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

对方程

  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)");

转载于:https://my.oschina.net/VenusV/blog/2221740

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值