我正在使用NDSolve []来整合轨道轨迹(使用ExplicitRungeKutta)。 Mathematica给了我
{{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
我没有很多使用这些插值功能的经验,我们将不胜感激。
答案 0 :(得分:3)
您将返回规则,而不是直接执行功能。为了访问插值函数本身,您需要进行规则替换。
而不是
Table[Solved, {t, 0, tmax}]
你需要
Table[Evaluate[{x[t], y[t]} /. Solved], {t, 0, tmax}];
Solved
(我假设是NDSolve
的输出)只是一个规则列表,允许将表达式x[t]
和y[t]
替换为相应的插值函数,然后进行评估。
查看NDSolve
的F1帮助以获取更多示例。
答案 1 :(得分:3)
如果您对用于插值的点感兴趣,可以尝试使用PropertyValue[]函数 - 这有时在使用NDSolve []时有意义。请参阅以下示例:
if(string.isNullOrEmpty(this.testString)){
break; // if in a loop of params, just giving an example, rest of the
// xmlwriter implementation would be normal
// note you might need to also implement the reader a bit different - unsure of that.
}
通过这种方式,您可以提取任何对象的几乎任何属性。要获取属性列表,请使用PropertyList[]函数。在上面的例子中,它返回:
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}]]