用牛顿迭代法求方程2**3 − 4**2 + 3 − 6 = 0在 1.5 附近的根 您所在的位置:网站首页 matlab二分法解一元三次方程怎么解 用牛顿迭代法求方程2**3 − 4**2 + 3 − 6 = 0在 1.5 附近的根

用牛顿迭代法求方程2**3 − 4**2 + 3 − 6 = 0在 1.5 附近的根

2023-06-14 12:56| 来源: 网络整理| 查看: 265

题为c程序设计(第五版) 谭浩强  第5章第14题

牛顿迭代法分析:

牛顿迭代法是一种求解方程的方法,它的基本思想是:如果一个函数在某一点的切线是直线,那么迭代下一次产生的值就是切线与x轴的交点的x坐标(简单来说就是用第一次取的点x做切线,再取切线与x轴的交点x1作为下一个点的横坐标,继续以x1做切线,如此反复,直到最后能够接近所求方程的根。),按照这个思想,我们可以不断迭代,直到收敛到方程的根 ¹。

牛顿迭代法的具体做法如下:

牛顿迭代法可以用于求解非线性方程、多项式方程、三角函数方程等等。它具有收敛速度快、精度高等优点。但是,它也有一些缺点,比如可能会出现发散现象、初值选取不当会导致无法收敛等等。

具体代码如下:

#define _CRT_SECURE_NO_WARNINGS #include #include // 定义需要求解的方程 double f(double x) { return 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6; } // 定义方程的导数 double f_prime(double x) { return 6 * pow(x, 2) - 8 * x + 3; } int main() { double x0 = 1.5; // 初始值 double x1; // 迭代后的值 double eps = 1e-6; // 精度要求 do { x1 = x0 - f(x0) / f_prime(x0); // 计算迭代后的值 printf("x = %lf\n", x1); // 输出迭代后的值 if (fabs(x1 - x0) < eps) { // 判断是否满足精度要求 break; } x0 = x1; // 更新初始值 } while (1); return 0; }

代码分析:

1.通过2个函数存放了原始方程所对应的函数,和原始方程所对应的导数,提高了代码的可读性。

2.后续代码是对牛顿迭代法数学思想和公式的编程表示。

需要注意的是:break虽然放在if中,但是break就是用来跳出最近的一个循环的,千万不要误认为只是跳出了if语句。

运行结果:

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有