关于DSolve和NDSolve的问题
mathematica吧
全部回复
仅看楼主
level 5
sol = NDSolve[{-65 x'[t] - 31 x[t] + 6250 Cos[1.05` *t] +
100 (x1'[t] - x'[t]) + 800 (x1[t] - x[t]) ==
62 x''[t], -100 ( x1'[t] - x'[t]) - 80 (x1[t] - x[t]) ==
24*x1''[t], x[0] == 0, x'[0] == 0, x1[0] == 0, x1'[0] == 0}, {x,
x1}, {t, 0, 200}]
Plot[Evaluate[{x1[t] - x[t]} /. sol], {t, 0, 100},
PlotLegends -> {x[t], x1[t]}]
sol1 = DSolve[{-65 x'[t] - 31 x[t] + 6250 Cos[1.05` *t] +
100 (x1'[t] - x'[t]) + 800 (x1[t] - x[t]) ==
62 x''[t], -100 ( x1'[t] - x'[t]) - 80 (x1[t] - x[t]) ==
24*x1''[t], x[0] == 0, x'[0] == 0, x1[0] == 0, x1'[0] == 0}, {x,
x1}, t]
Plot[Evaluate[{x1[t] - x[t]} /. sol1], {t, 0, 100},
PlotLegends -> {x[t], x1[t]}]
这两个函数解出来的图像并不一致,请问是什么问题
2022年09月16日 09点09分 1
吧务
level 10
在DSolve中,精度的不足导致了约1e-17数量级的虚部的产生,进而大量数据不认为不是实数从而不能被绘制。
将出现的机器精度非精确数1.05`改为任意精度数1.05`20即可。
2022年09月17日 04点09分 2
哦哦,确实以前老是出现这种情况[太开心]c语言中我貌似也看到人碰到过
2022年09月17日 06点09分
不过您那个任意精度数的表示方法我在考虑一下[呵呵]
2022年09月17日 06点09分
为啥还是存在复数解呀
2022年09月17日 11点09分
吧务
level 15
“为啥还是存在复数解呀”
升精度是不太可能把虚部除干净的,因为数值误差始终在那儿,但是随着精度的提升你应该会看到虚部越来越小。
2022年09月30日 16点09分 3
1