1.要求
给定非线性方程
分别编写 Newton 迭代 (通常也称 Newton-Raphson 迭代)
和 Damped-Newton (DN) 迭代
(其中阻尼参数 τ : 0 < τ < 1)
的程序. 取阻尼参数τ = 0.5, 两种迭代方法的初始点 x0 依次取值为 −4, −3, −2, −1, 0, 1, 2, 3, 5, 7, 9;
停止条件为 |f(xk)| < 10−8 或 迭代步数 k > 104 (此时, 可认为迭代失败)
求迭代步数和数值解
2.Matlab代码
#include<stdio.h>
#include<math.h>
double fun1(double x) {
return (atan(x)+sin(x)-1);
}
double fun2(double x) {
return (1/(1+x*x)+cos(x));
}
int main() {
int j,n;
double x, y;
for(j=1;j<=11;j++){
printf("x=");
scanf("%lf",&x);
n=0;
while (fabs(fun1(x))>=pow(10,-8)) {
y = x - fun1(x) / fun2(x);
x = y;
n=n+1;
if(n>10000){
printf("error!\n");
break;
}
}
printf("x=%.8f,f(x)=%.8f,n=%d\n",x,fun1(x),n);
}
for(j=1;j<=11;j++){
printf("x=");
scanf("%lf",&x);
n=0;
while (fabs(fun1(x))>=pow(10,-8)) {
y = x - 0.5*fun1(x) / fun2(x);
x = y;
n=n+1;
if(n>10000){
printf("error!\n");
break;
}
}
printf("x=%.8f,f(x)=%.8f,n=%d\n",x,fun1(x),n);
}
return 0;
}