用mathmatic解方程,带循环为什么总不出结果,急求解谢谢啦
mathematica吧
全部回复
仅看楼主
level 3
hdguangshan3 楼主
For[g = 0.01, g < 1.2, g = g + 0.05,
e1 = 20 -
250 x - ((8 g^2 - 30 (0.0047` - 30 x)) Tanh[
13.63969351909815` Sqrt[(0.0047` - 30 x)^2 +
16 g^2 x]])/(2 Sqrt[(0.0047` - 30 x)^2 + 16 g^2 x]);
solution = NSolve[e1 == 0, x, Reals, WorkingPrecision -> 10];
Print[g, solution]]
2018年01月01日 10点01分 1
level 9
Solve::ratnz: Solve was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result.
2018年01月03日 02点01分 3
这只是一个警告,通常不影响结果。楼主的主要问题不是这个。参4楼。
2018年01月06日 07点01分
吧务
level 15
1. 别用For的问题说得够多的了,这里不多谈了。
2. 计算会卡在半途毫不意外。NSolve的帮助的更多信息里已经说了,NSolve 处理的主要是线性和多项式方程。它在一定程度上是可以解超越方程的,但是限制颇多。所以,如果不是已经确定超越方程存在通解,那就不要一骨脑地用Solve/NSolve去扫一大片参数区域。实际上稍加实验即可发现Solve和NSolve在求解这个方程时都遇到了困难。
3. 对于超越方程的数值求根,FindRoot常常是一个更好的选择。(如果根只有一个的话。)
4. 对于这类问题,先画图观察一下是有好处的:
e1 = 20 - 250 x - ((8 g^2 - 30 (0.0047 - 30 x)) Tanh[
13.63969351909815 Sqrt[(0.0047 - 30 x)^2 + 16 g^2 x]])/(
2 Sqrt[(0.0047 - 30 x)^2 + 16 g^2 x]);
ContourPlot[e1 == 0, {g, 0.01, 1.2}, {x, -0.03, 0.03}, PlotPoints -> 200]
在g较大时方程有多组解。如果这些解你全需要,那么你还需要使用RootSearch程序包:http://library.wolfram.com/infocenter/Demos/4482/
2018年01月06日 07点01分 4
谢谢你,就是因为g变大的时候出现两个解用findroot[哈哈]就不好处理
2018年01月09日 03点01分
g=0.8;f1[x_]:=e1=20-250 x-((8 g^2-30 (0.047-30 x)) Tanh[13.63969351909815 Sqrt[(0.047-30 x)^2+16 g^2 x]])/(2 Sqrt[(0.047-30 x)^2+16 g^2 x]); soln=RootSearch[f1[x]==0,{x,0,0.02}] 我按照你说的用得出了两个解,但是我取了g的一个值带入的,想问下我怎样加g的范围,由0.01到1.2,间隔为0.01
2018年01月09日 03点01分
@hdguangshan3 来把这帖读了:tieba.baidu.com/p/5104865347
2018年02月03日 11点02分
1