C | Lab3——Newton迭代和Damped-Newton迭代

C | Lab3——Newton迭代和Damped-Newton迭代C 语言解决 Newton 迭代和 Damped Newton 迭代 damped newton 迭代和 newton 迭代的区别

 1.要求

给定非线性方程f(x)=arctan(x)+sin(x)-1=0

分别编写 Newton 迭代 (通常也称 Newton-Raphson 迭代)

x_{k+1}=x_{k}-\frac{f(x_{k})}{f^{'}(x_{k})}

Damped-Newton (DN) 迭代

x_{k+1}=x_{k}-\tau \frac{f(x_{k})}{f^{'}(x_{k})}(其中阻尼参数 τ : 0 < τ < 1)

的程序. 取阻尼参数τ = 0.5, 两种迭代方法的初始点 x0 依次取值为 4, 3, 2, 1, 0, 1, 2, 3, 5, 7, 9;

停止条件为 |f(xk)| < 108 或 迭代步数 k > 104 (此时, 可认为迭代失败)

求迭代步数和数值解x_{k}

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; } 

今天的文章 C | Lab3——Newton迭代和Damped-Newton迭代分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-16 16:30
下一篇 2024-12-16 16:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/87912.html