各位大佬,小白求助PDE求解问题,求轻喷。。。
mathematica吧
全部回复
仅看楼主
level 2
我今天刚接触Mathematica,想要解一个分析力学题里面的PDE组,其实就是一个五个自由度的拉格朗日方程组,可是搞了很久老是不行,代码如下,求大佬指点。我是完全小白,如果犯了可笑的低级错误,还求大佬轻喷。。。
v1 = l'[t] Sin[a1] Cos[b1] + l*a1'[t] Cos[a1] Cos[b1] +
l*b1'[t]*(-Sin[b1])
v2 = l'[t] Sin[a1] Sin[b1] + l*a1'[t] Cos[a1] Sin[b1] +
l*b1'[t]*Cos[b1]
v3 = l'[t] Cos[a1] + l*a1'[t]*(-Sin[a1])
u1 = v1 + (-l'[t]) Sin[a2] Cos[b2] + (l0 - l)*
a2'[t] Cos[a2] Cos[b2] + (l0 - l)*b2'[t]*(-Sin[b2])
u2 = v2 + (-l'[t]) Sin[a2] Sin[b2] + (l0 - l)*
a2'[t] Cos[a2] Sin[b2] + (l0 - l)*b2'[t]*Cos[b2]
u3 = v3 + (-l'[t]) Cos[a2] + (l0 - l) a2'[t]*(-Sin[a2])
T = 0.5*m1*(v1^2 + v2^2 + v3^2) + 0.5*m2*(u1^2 + u2^2 + u3^2)
V = m1*g*l*Cos[a1] + m2*g*(l*Cos[a1] + (l0 - l)*Cos[a2])
L = T - V
H1 = l'[t]
H2 = a1'[t]
H3 = b1'[t]
H4 = a2'[t]
H5 = b2'[t]
P1 = D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], H1]
P2 = D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], H2]
P3 = D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], H3]
P4 = D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], H4]
P5 = D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], H5]
In[1] := NDSolve[{P1'[t] -
D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], l] == 1,
P2'[t] -
D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], a1] == 0,
P3'[t] -
D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], b1] == 0,
P4'[t] -
D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], a2] == 0,
P5'[t] -
D[L[l[t], a1[t], b1[t], a2[t], b2[t], H1[t], H2[t], H3[t], H4[t],
H5[t]], b2] == 0, l[0] == 0.5, a1[0] == 0.5 Pi,
b1[0] == 0.5 Pi, a2[0] == 0, b2[0] == (1/3)*Pi}, l, a1, b1, a2,
b2, {t, 0, 1}]
Plot[Evaluate[{l[t], a1[t], b1[t], a2[t], b2[t]} /. s], {t, 1, 0},
PlotStyle -> Automatic]
2020年09月12日 15点09分 1
level 2
我已经检查过了,v1,v2,v3,u1,u2,u3,T,V,L这些量的赋值都没有问题,就是我不知道怎么实现求解拉格朗日方程组(方程组如下)
其中q_alpha依次是我的代码里面的l,a1,b1,a2,b2(所以有五个PDE)
2020年09月12日 15点09分 2
level 2
字母上面加一点代表对时间t求导
2020年09月12日 15点09分 3
吧务
level 15
1. 请问这个方程哪里不对: y + y'[t] == 1
不想写这么多[t]的话可以用With:
With[{y=y[t]}, y+D[y,t]==1]
2. l, a1, b1, a2,b2 要用{} 包起来。
2020年10月03日 05点10分 4
上面这个用With的写法,主要是写偏微分方程的时候优势比较明显,对于常微分方程,用了With就没法用 ' ,因此有点微妙……总之请自己权衡吧。
2020年10月03日 05点10分
1