|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 子飞鱼 于 2024-1-18 08:38 编辑
一个处理实际问题的方程,想通过迭代求正数根(因为是实际生活的问题,负数根或虚数根没有意义)。
方程如下所示:
- a*X/b = 1 + B/X +C/(X**2) + D/(X**5) + (E -0.0001713155/(X**2))/(b**3 * X**2) * exp(-0.0128542/(X**2))
复制代码
其中:X为未知数,a与b为已知的常数。B,C,D,E均与b有关。
- B = 0.3664405 - 0.3434066/b + 0.2346731/(b**2) -0.4924378/(b**3)-0.1333935*b**1.1
复制代码- C = -0.06230325 +0.01194191/b +0.02720183/(b**3) + 0.04049407*b**1.1
复制代码- D = 0.00001082989 - 0.000003051937/b + 0.000001428566*b**1.1
复制代码- E = 0.1112586 - 0.07506711 * b**1.1
复制代码
a的取值范围是 0<a<30 , b的取值范围是 0<b<13
我以往都是给X一个初值,比如0.5,通过方程右边的表达式求出一个值,再根据这个值反推出方程左侧的X值;继续用这个X值求方程右侧的值,再反推方程左侧的值。直到上一次的X值与本次求出的X值的差值小于我设定的误差范围,迭代结束。
但是现在当a = 15, b=5的时候 或者a>13,b>4的时候 就没法迭代出结果。经过若干次迭代后 上一次的X的迭代值值与本次的X迭代值的差值是一个固定值,不随着迭代次数的增加而改变,不收敛。
请问该如何设置迭代过程能避免出现上面的问题? |
|