2

我正在使用 NDSolve[] 来整合轨道轨迹(使用 ExplicitRungeKutta)。数学给我

{{x[t]->InterpolatingFunction[{{0.,2000.}},<>][t],
y[t]->InterpolatingFunction[{{0.,2000.}},<>][t]}}

我的问题是如何将其放入 t=0,1,2...2000 的原始数据表中?我试过了:

path = Table[Solved, {t, 0, tmax}];

但我得到了一大堆这样的东西:

{{{x[0] -> -0.523998, y[0] -> 0.866025}}, {{x[1] -> -0.522714, 
y[1] -> 0.886848}}, {{x[2] -> -0.480023, 
y[2] -> 0.951249}}, {{x[3] -> -0.369611, y[3] -> 1.02642}}

我想要类似的东西:

{{{-0.523998, 0.866025}}, {{-0.522714, 0.886848}}, etc

我没有很多使用这些插值函数的经验,任何帮助将不胜感激。

4

2 回答 2

3

您正在返回规则,而不是直接运行。为了访问插值函数本身,您需要进行规则替换。

代替

Table[Solved, {t, 0, tmax}]

你需要

Table[Evaluate[{x[t], y[t]} /. Solved], {t, 0, tmax}];

Solved(我假设是 的输出NDSolve)只是一个规则列表,这些规则将允许表达式x[t]并被y[t]相应的插值函数替换,然后您对其进行评估。

查看 F1 帮助以NDSolve获取更多示例。

于 2012-09-16T17:54:29.760 回答
3

如果您对用于插值的点感兴趣,可以尝试使用PropertyValue[]函数——这在使用 NDSolve[] 时有时很有趣。请参见下面的示例:

x = Range[1, 10];
y = x^2;
pts = Transpose[{x, y}];
f = Interpolation[pts];
Plot[f[t], {t, 1, 10}]
(*getting the coordinates*)
X = PropertyValue[f, "Coordinates"][[1]]
Y = PropertyValue[f, "ValuesOnGrid"]
ListPlot[Transpose[{X, Y}]]

通过这种方式,您可以提取几乎任何对象的任何属性。要获取属性列表,请使用PropertyList[]函数。在上面的示例中,它返回:

PropertyList[f]
{"Coordinates", "DerivativeOrder", "Domain", "ElementMesh", 
"Evaluate", "GetPolynomial", "Grid", "InterpolationMethod", 
"InterpolationOrder", "MethodInformation", "Methods", 
"OutputDimensions", "Periodicity", "PlottableQ", "Properties", 
"QuantityUnits", "Unpack", "ValuesOnGrid"}
于 2015-11-26T08:46:14.780 回答