【发布时间】: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}]]
eq1 和 eq2 是我的方程式,thrust 和 angle 是解
【问题讨论】:
-
您可以简单地在等高线图中绘制 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}]