牛顿迭代法

zcqbit 2008-06-14 06:13:49
函数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

这个问题怎么解决?
...全文
416 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcqbit 2008-06-15
  • 打赏
  • 举报
回复
晕 这种具体的例子我找了很多了
你最后终止条件有问题 应该是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了,作为分母就出错了
  • 打赏
  • 举报
回复
看看一个具体的例子吧
例如:用牛顿迭代法未方程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为所求的根
用户 昵称 2008-06-15
  • 打赏
  • 举报
回复
嗯,用计算机按曲线画出来图形,用尺子量一下,也许真的管用,俺上学时好多参数都是查表法或图解法得到,这并不是无赖的方法,只不过不好使罢了。
zcqbit 2008-06-15
  • 打赏
  • 举报
回复
没懂 什么叫画出图形图解?
你说是通过程序来画图 然后图解?
用户 昵称 2008-06-15
  • 打赏
  • 举报
回复
不行的话画出图形图解。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧