非线性方程求解 不动点迭代法
Solution
Knowledge
收敛定理一
可以尝试证明一下
1、不动点的存在性
2、不动点的唯一性
3、序列收敛
收敛定理二
这个的条件2更加简洁
可以尝试证明
1、不动点的存在性(其实同定理一的证明过程一样的)
2、不动点的唯一性
3、收敛性证明
误差估计(有公式)
如何判断迭代函数是否收敛
还有一个局部收敛的定义
example
Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void out_put(double x){
printf("%.5f\n", x);
}
double cal_1(double x){///x = exp(-x)
return exp(-x);
}
double cal_2(double x){/// x = -ln(x);
if(x < 0.0){
printf("ERROR, log a negtive number\n");
exit(-1);
}
return -log(x);
}
int main(){
double x = 0.5;
int n = 20;
for(int i = 1; i <= n; i++){
out_put(x);
x = cal_1(x);
}
printf("The ans is: %.4f\n", x);
x = 0.5;
for(int i = 1; i <= n; i++){
out_put(x);
x = cal_2(x);
}
printf("The ans is: %.4f\n", x);
return 0;
}