牛顿迭代法
函数F(X),其一阶倒数G(X)用牛顿迭代法解F(x)=0
do until ABS(F(X))<0.0000 ‘当F(x)绝对值小于0.00001时停止循环返回x值
X=X—F(X)/G(X) ‘一阶迭代公式
LOOP
F(X)是对我输入的值进行累加或者累乘,比较复杂,输入的值有时候可以求出解来,有时候会弹出错误来,显示G(X)几乎为0
这个问题怎么解决? --------------------编程问答-------------------- 看看一个具体的例子吧
例如:用牛顿迭代法未方程2*x^3-4x^2+3x-6=0在1.5附近的根。代码如下:
dim x1 as double =1.5
dim x0 as double
dim f as double
dim f1 as double
do until abs((x1-x0)>1*exp-5)'精确度
x0=x1
f=((2*x0-4)*x0+3)*x0-6
f1=(6*x0-8)*x0+3
x1=x0-f/f1
Loop
print x1 '输出所要求的根
----------------------------------------
牛顿迭代法又称牛顿切线法,其公式如下:
f'(x0)=f(x0)/(x-x0)
x1=x0-f(x0)/f'(x0)
其中x0为根的接近值,f(x)为原方程,f'(x)为原方程的导数方程,x1为所求的根 --------------------编程问答-------------------- 晕 这种具体的例子我找了很多了
你最后终止条件有问题 应该是f(x)接近0作为终止条件,而且应该是小于某个值
f(x)与f'(x) 的表达式 我也求出来了
f(x)=s(1) * s(2) - s(3) * s(4)
f'(x)= -(1 / X) * s(5) * s(6) * (1 / X) - 2 * (1 / X) * s(7) * s(8) * (1 / X) + (1 / X) * s(9) * (1 / X) * s(10) + 2 * (1 / X) * s(11) * (1 / X) * s(12)
其中数组s(i)也是是关于x的表达式比较复杂, 取x初值为0 最后计算结果应该是大于0的
——————————————————————————————————————————
我的问题是
在进行条件判断的时候,经常abs(f'(x))很小,因而abs(f(x)/f'(x))会很大,x=x-f(x)/f'(x)也会变化很大,看起来是收敛速度加快,实际上相当于一个恶性循环,一会f'(x))<1E-328=0了,作为分母就出错了 --------------------编程问答-------------------- 不行的话画出图形图解。 --------------------编程问答-------------------- 没懂 什么叫画出图形图解?
你说是通过程序来画图 然后图解? --------------------编程问答-------------------- 嗯,用计算机按曲线画出来图形,用尺子量一下,也许真的管用,俺上学时好多参数都是查表法或图解法得到,这并不是无赖的方法,只不过不好使罢了。
补充:VB , 基础类