如何从2D Mathematica插值函数中获取离散数据?

时间:2012-09-16 15:32:59

标签: wolfram-mathematica

我正在使用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

我没有很多使用这些插值功能的经验,我们将不胜感激。

2 个答案:

答案 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}]]