用NDSolve报错和原代码如下,请问该怎么修改?
mathematica吧
全部回复
仅看楼主
level 3
YoungLu0 楼主
Subscript[T, 1] = \[Pi]/2;
Subscript[T, 2] = \[Pi];
\[Kappa][t_] = 1;
\[Tau][t_] =
Piecewise[{{0, 0 <= t < Subscript[T, 1]}, {1000,
t = Subscript[T, 1]}, {0,
Subscript[T, 1] < t <= Subscript[T, 2]}}];
r[t_] := {x[t], y[t], z[t]};
n[t_] = {x''[t]/\[Kappa][t], y''[t]/\[Kappa][t], z''[t]/\[Kappa][t]};
b[t_] = Cross[r'[t], n[t]];
sol3 = NDSolve[{n'[t_] == -(\[Kappa][t]*r'[t] + \[Tau][t]*b[t]),
b'[t] == -\[Tau][t]*n[t], r[0] == 0, r[Subscript[T, 2]] == 0,
r'[0] == {0, 0, 1}}, {x, y, z}, {t, 0, \[Pi]}];
ParametricPlot3D[Evaluate[x[t], y[t], z[t]] /. sol3, {t, 0, \[Pi]}]
2022年10月03日 05点10分 1
吧务
level 10
问题挺多
分段函数里有个=应为==
矢量变量拆成三个分量
方程超定
2022年10月03日 12点10分 2
您好,感谢您的回答。您的意思是不是说,只能将r,n,b这样的矢量拆开,逐个逐个分量地列方程,然后拼成一个大的方程组,对吗?
2022年10月03日 13点10分
@YoungLu0 是。尽管这个过程可以自动完成。
2022年10月04日 03点10分
@asdasd1dsadsa 可为什么就不能用矢量直接囊括住这三个分量呢?
2022年10月04日 11点10分
@YoungLu0 据我所知,设计如此。DSolve可以,NDSolve不行。
2022年10月04日 14点10分
level 3
YoungLu0 楼主
请问这样报错该怎么弄呢?我在方程里都已经全部用"=="号了
Subscript[T, 1] = \[Pi]/2;
Subscript[T, 2] = \[Pi];
\[Kappa][t_] = 1;
\[Tau][t_] =
Piecewise[{{0, 0 <= t < Subscript[T, 1]}, {1000,
t == Subscript[T, 1]}, {0,
Subscript[T, 1] < t <= Subscript[T, 2]}}];
r[t_] = {x[t], y[t], z[t]};
n[t_] = {x''[t]/\[Kappa][t], y''[t]/\[Kappa][t], z''[t]/\[Kappa][t]};
b[t_] = Cross[r'[t], n[t]];
sol3 = NDSolveValue[
{r''[t] == r''[t], n'[t] == -(\[Kappa][t]*r'[t] + \[Tau][t]*b[t]),
b'[t] == -\[Tau][t]*n[t], r[0] == {0, 0, 0},
r[Subscript[T, 2]] == {0, 0, 0}, r'[0] == {0, 0, 1}}, {x, y,
z}, {t, 0, \[Pi]}];
ParametricPlot3D[sol3, {t, 0, \[Pi]}]
2022年10月11日 12点10分 3
Clear["`*", Subscript]
2022年10月11日 13点10分
@asdasd1dsadsa 您好,我按您发的github上的做法,前后分别添加了那两个Clear,发现还是不起作用,请问还有什么修改的方法呢?
2022年10月12日 05点10分
@YoungLu0 仔细一看,你这方程中居然有个形如x==x的。那可不当然会给你计算为True?
2022年10月13日 03点10分
1