各位大佬麻烦看一下 为啥一直报这个错误
mathematica吧
全部回复
仅看楼主
level 2
sol = NDSolve[{p''[x] + p'[x]/x == Sinh[p[x]]/0.1^2,
q''[x] + q'[x]/x == Sinh[q[x]]/0.1^2 - 1/(1^2*0.1^2),
p'[0] == 0, p[-0.9] == q[-0.9], q'[-1] == 0, p'[-0.9] == q'[-0.9]},
{p[x], q[x]},
{x, -1, 0}]
2023年03月29日 02点03分 1
吧务
level 15
……你在3个位置(两端点,外加中间一点)给了限制条件,并不寻常。NDSolve居然似乎正确地解析了你这个输入,这点挺神奇的。
你是不是在尝试“在不同区域解不同的方程”?我好像还是第一次遇到人在解常微分方程的时候试图这么干。如果是的话,你这个问题比较一般的书写方法是用分段函数:
(*潜在方法1,使用Shooting方法,同样导致ndsz警告并返回输入:*)
NDSolveValue[{q''[x] + q'[x]/x ==
Sinh[q[x]]/0.1^2 - Piecewise[{{1/(1^2 0.1^2), x < -0.9}}], q'[-1] == 0,
q'[0] == 0}, q, {x, -1, 0}]
(*潜在方法2,使用有限元法,在输出警告后返回了一个解,但是检查后会发现左边界没被满足:*)
NDSolveValue[{q''[x] + q'[x]/x ==
Sinh[q[x]]/0.1^2 - Piecewise[{{1/(1^2 0.1^2), x < -0.9}}]}, q, {x, -1, 0},
Method -> FiniteElement]
(* 这个方法无需设置q'[-1] == 0, q'[0] == 0,因为有限元法的默认边界是为0的NeumannValue *)
从以上计算结果来看,问题本身可能就不对,我建议你再好好检查下背后的模型。
2023年04月01日 03点04分 2
level 2
谢谢大佬
2023年04月10日 02点04分 3
1