有一个代数常微分方程组求解遇到了点小问题,求指点!
mathematica吧
全部回复
仅看楼主
level 3
如图所示,求解的是一个代数常微分方程组,前三组是odes,后面四组方程是代数边界条件(a,b,c,d都是常数),一直求不出来u[r],v[r],p[r]的解析表达式,求指点![泪]
然后源代码如下:
Clear["Global`*"];
Print["函数解析式的求解:"];
DSolve[{u[r] + m v[r] + r Derivative[1][u][r] ==
0, -(c11 + c99 m^2 - r^2 \[Rho] \[Omega]^2) u[r] - (c11 + c99) m v[
r] + r (-r Derivative[1][p][r] + c11 Derivative[1][u][r] +
c12 m Derivative[1][v][r] + c69 m Derivative[1][v][r] +
c11 r (u^\[Prime]\[Prime])[r]) ==
0, -m r p[r] + (c11 + c99) m u[r] + c99 v[r] + c11 m^2 v[r] -
r^2 \[Rho] \[Omega]^2 v[r] + c12 m r Derivative[1][u][r] +
c69 m r Derivative[1][u][r] - c66 r Derivative[1][v][r] -
c66 r^2 (v^\[Prime]\[Prime])[r] ==
0, -a p[a] + c12 u[a] + c12 m v[a] + a c11 Derivative[1][u][a] ==
0, -b p[b] + c12 u[b] + c12 m v[b] + b c11 Derivative[1][u][b] ==
0, -c69 m u[a] - c69 v[a] + a c66 Derivative[1][v][a] ==
0, -c69 m u[b] - c69 v[b] + b c66 Derivative[1][v][b] == 0}, {u[r],
v[r], p[r]}, r]
2020年11月17日 09点11分 1
level 2
里面的u都要写成u[r],
v[r], p[r]也是
2020年11月18日 13点11分 2
LZ在这一点上没有犯错。
2020年12月05日 03点12分
吧务
level 15
……看方程结构感觉像是特征值问题。如果是的话,那用DSolve
直接解边值问题本身就是个错误。参看知乎提问《Mathematica 怎么解常微分方程本征值问题?》(编号27536107)。此外 DEigensystem 或许会有帮助。
然后再就这个方程的通解说两句。
DSolve在直接解方程组的时候经常跪,常常需要人工介入消变量,对于你这个方程来说这个好办,只要利用方程1和方程3即可消掉p和v:
eq = {u[r] + m*v[r] + r*Derivative[1][u][r] == 0,
(-(c11 + c99*m^2 - r^2*\[Rho]*\[Omega]^2))*u[r] -
(c11 + c99)*m*v[r] + r*((-r)*Derivative[1][p][r] +
c11*Derivative[1][u][r] + c12*m*Derivative[1][v][r] +
c69*m*Derivative[1][v][r] + c11*r*Derivative[2][u][
r]) == 0, (-m)*r*p[r] + (c11 + c99)*m*u[r] +
c99*v[r] + c11*m^2*v[r] - r^2*\[Rho]*\[Omega]^2*v[r] +
c12*m*r*Derivative[1][u][r] +
c69*m*r*Derivative[1][u][r] - c66*r*Derivative[1][v][r] -
c66*r^2*Derivative[2][v][r] == 0};
bc = {(-a)*p[a] + c12*u[a] + c12*m*v[a] +
a*c11*Derivative[1][u][a] == 0,
(-b)*p[b] + c12*u[b] + c12*m*v[b] +
b*c11*Derivative[1][u][b] == 0,
(-c69)*m*u[a] - c69*v[a] + a*c66*Derivative[1][v][a] == 0,
(-c69)*m*u[b] - c69*v[b] + b*c66*Derivative[1][v][b] == 0};
solp[r_] = p[r] /. First@Solve[eq[[3]], p[r]]
solv[r_] = v[r] /. First@Solve[eq[[1]], v[r]]
newsys = {eq[[2]], bc} /. p -> solp /. v -> solv // Simplify
麻烦的是后面。理论上DSolve是可以求解newsys[[1]]的。(你可以代一组具体的数字系数进去,算的还是很快的。)但符号系数就没那么简单了,反正我写答案这段时间Mathematica还没算出来。而且,如果这真的是个特征值问题的话,即便可以解出通解,后续对特解的讨论也是相当麻烦的,因为这方程的解,含了特殊函数……
总之,条件允许的话,改数值解吧,虽然大概也容易不到哪里去……
2020年12月05日 03点12分 3
谢谢吧主,好久了才看了sorry,后来这个问题我从计算源头用贝塞尔方程求了。
2021年07月01日 20点07分
1