【问题标题】:Plotting the solution to an equation with Mathematica用 Mathematica 绘制方程的解
【发布时间】:2014-03-01 21:33:06
【问题描述】:

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

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 是解

【问题讨论】:

  • 您可以简单地在等高线图中绘制 f(x,t) 的水平集。有选项可以控制绘制哪些级别,因此可以确保 f(x,t)=0 的绘图。
  • @LutzL 这里的问题是x 是一个向量,所以这样做会很麻烦。无论如何,谢谢你的好主意。
  • 然后我会考虑使用 table 命令和数值求解器构建一个解点数组。
  • @LutzL 我尝试使用Table 编辑我的答案。我还有一个小问题。您还有什么建议吗?
  • Mathematica 是一种基于术语重写的函数式语言,它与 Python 或 C 大不相同。它非常强大,一旦你学会了它,你就可以非常快速地实现一些东西小代码。但首先你必须学习如何以 Mma 方式做事,而不是强迫其他范式!这是您要求的示例:f[a_?NumericQ] := Module[{x}, x /. FindRoot[Log[a x] == Sin[x], {x, 1}]]; Plot[f[a], {a, 0.1, 10}]

标签: wolfram-mathematica


【解决方案1】:

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

你有x(0),你想要x(t) for t&gt;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] 替换为RandomReal[{x_1,x_2}],其中x_1x_2 在您要探索的x 空间范围内。

【讨论】:

  • 谢谢!我提出了我是如何解决问题的问题,但我必须说我的方式比你的方式看起来更丑陋。
  • 哇!我没有看到你最后的编辑。我现在看看。另一件有趣的事情是寻找额外的解决方案..
猜你喜欢
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-22
相关资源
最近更新 更多