使用Mathematica将解决方案绘制到方程式中

时间:2014-03-01 21:33:06

标签: wolfram-mathematica

我有一个函数f(x,t),我想使用Mathematica绘制x(t)的解f(x(t),t)=0的函数。我该怎么办?

Mathematica通常与我可以使用的其他编程语言完全不同。通常情况下,我会尝试看起来像:

Create arrays X, T

For t in T do
   solve (numerically) f(x,t)=0, append the solution to X

Plot X

但是,我不太清楚如何在Mathematica中使用循环,对于数组也是如此,所以我遇到了严重的问题。

使用Mathematica有一些快速,直接的方法来解决这个问题吗?如果没有,有人可以帮我解决这个问题吗?

此外,是否有人对此问题有更好的称号?


编辑:根据@LutzL的建议,我会尝试以下内容:

Table[FindRoot[f[x,t]==0,{x,x_0}],{t,start,stop,step}]

这会正常工作吗?

我仍有问题,因为我的函数f(x,t)是高度非线性的,因此我想为每个t输入一个好的起点。具体来说,我知道t=0的解决方案,我想用t_{n+1}解决方案的时间步t_n。有没有办法做到这一点?


编辑2:我通过以下方式解决了问题:

tmax = 10; nsteps = 100*tmax;
thrust = {v/2 - g}; angle = {Pi/2};
For[i = 1, i <= nsteps, i++, 
  sol = {thr, \[Theta]} /. 
    FindRoot[{eq1[i*tmax/nsteps], 
      eq2[i*tmax/nsteps]}, {{thr, Last[thrust]}, {\[Theta], 
       Last[angle]}}]; AppendTo[thrust, sol[[1]]]; 
  AppendTo[angle, sol[[2]]]];
ListPlot[Table[{i*tmax/nsteps, thrust[[i + 1]]}, {i, 0, nsteps}]]
ListPlot[Table[{i*tmax/nsteps, angle[[i + 1]]/Pi}, {i, 0, nsteps}]]

其中eq1eq2是我的等式,thrustangle是解决方案

1 个答案:

答案 0 :(得分:1)

一种方法是创建一个列表,然后绘制它。

您有x(0)并且想要x(t) for t>0。您可以使用Szabolcs提供的表达式:

root(t_NumericQ, x0_):= Module[{z}, z = z /. FindRoot[f[z, t] == 0, {z, x0}]]

然后你计算并绘制一个列表。

list[tin_, tend_, tstep_, x0_] := Module[{z = x0, t = tin}, lis = {}; 
While[t < tend, z = root[t, z]; lis = Append[lis, {t, z}]; t = t + tstep; ];
ListPlot[lis]]

或者您可以更改x=Interpolation[lis]的最后一行,x[t]将是解决方案的插值函数x(t)

此外,您可以测试x(t)的其他解决方案是否有可能替换root[t,z]的{​​{1}},其中RandomReal[{x_1,x_2}]x_1位于{{1}的范围内1}}你要探索的空间。