对方程
- 不动点迭代法
原方程可转换为
由不动点迭代法得
- 牛顿迭代法
给定一个初始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)");