Julia篇(二)用不动点法和牛顿迭代法求解函数根

原创
2018/09/29 21:32
阅读数 1.5K

对方程

  1. 不动点迭代法
    原方程可转换为

    由不动点迭代法得
  1. 牛顿迭代法
    给定一个初始x0,做一条垂线与函数f(x)相交,得到的交点为(x0,y0),过该点在f(x)上作一条切线,得到该切线与x轴的交点为(x1, 0)。之后对(x1, 0)重复上述步骤,直到与x轴的交点的横坐标xn逐渐收敛到f(x)=0的根。也就是对于第i+1次迭代(i>=0),有下列等式

Julia代码如下

print("Input max iter times: ")
f=x->(x*x-3*x+2-exp(x))
g=x->(2*x-3-exp(x))
h=x->(x*x+2-exp(x))/3

n=parse(Int, readline())
t=n
x = -1
newton_x=-1
x1 = h(x)
newton_y=newton_x-f(newton_x)/g(newton_x)
println("不动点迭代法               牛顿迭代\n")
println("step$(0): $(x)                     step$(0):$(newton_y)")
while ((abs(x-x1)>=(1e-12))||(abs(newton_x-newton_y)>=(1e-12)))&&(n!=0)
	x = x1
    newton_x = newton_y
    println("step$(t-n): $(x1)     step$(t-n):$(newton_y)")
    x1 = h(x)
    newton_y=newton_x-f(newton_x)/g(newton_x)
	n-=1
end
println("step$(t-n): $(x1)     step$(t-n):$(newton_y)");

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部