C语言每日一练——第154天:牛顿迭代法求方程根

🌟 前言

Wassup guys,我是Edison 😎

今天是C语言每日一练,第154天!

Let’s get it!

文章目录

  • 1. 问题描述
  • 2. 题目分析
  • 3. 算法设计
  • 4. 确定程序框架
  • 5. 迭代法求方程根
  • 6. 代码实现

1. 问题描述

编写用牛顿迭代法求方程根的函数。
 
方程为 C语言每日一练——第154天:牛顿迭代法求方程根,系数a,b,c,d 由主函数输入。
 
C语言每日一练——第154天:牛顿迭代法求方程根C语言每日一练——第154天:牛顿迭代法求方程根 附近的一个实根。求出根后,由主函数输出。

 
牛顿迭代法的公式是:C语言每日一练——第154天:牛顿迭代法求方程根 ,设迭代到 C语言每日一练——第154天:牛顿迭代法求方程根 时结束。

2. 题目分析

牛顿迭代法是取 C语言每日一练——第154天:牛顿迭代法求方程根 之后,在这个基础上,找到比 C语言每日一练——第154天:牛顿迭代法求方程根 更接近的方程的根,一步一步迭代,从而找到更接近方程根的近似根。
 
C语言每日一练——第154天:牛顿迭代法求方程根C语言每日一练——第154天:牛顿迭代法求方程根 的根,选取 C语言每日一练——第154天:牛顿迭代法求方程根 作为 C语言每日一练——第154天:牛顿迭代法求方程根 初始近似值。
 
过点 C语言每日一练——第154天:牛顿迭代法求方程根 作为曲线 C语言每日一练——第154天:牛顿迭代法求方程根 的切线 C语言每日一练——第154天:牛顿迭代法求方程根
 
C语言每日一练——第154天:牛顿迭代法求方程根 的方程为 C语言每日一练——第154天:牛顿迭代法求方程根
 
求出 L 与 x 轴交点的横坐标 C语言每日一练——第154天:牛顿迭代法求方程根,称 C语言每日一练——第154天:牛顿迭代法求方程根C语言每日一练——第154天:牛顿迭代法求方程根 的一次近似值,
 
过点 C语言每日一练——第154天:牛顿迭代法求方程根 作为曲线 C语言每日一练——第154天:牛顿迭代法求方程根 的切线,并求该切线与 x 轴的横坐标 C语言每日一练——第154天:牛顿迭代法求方程根,称 C语言每日一练——第154天:牛顿迭代法求方程根C语言每日一练——第154天:牛顿迭代法求方程根 的二次近似值,
 
重复以上过程,得 C语言每日一练——第154天:牛顿迭代法求方程根 的近似值 C语言每日一练——第154天:牛顿迭代法求方程根
 
上述过程即为牛顿迭代法的求解过程。

3. 算法设计

程序流程分析👇
 
(1) 在 C语言每日一练——第154天:牛顿迭代法求方程根 附近找任一实数作为 C语言每日一练——第154天:牛顿迭代法求方程根 的初值,我们取 C语言每日一练——第154天:牛顿迭代法求方程根,即 C语言每日一练——第154天:牛顿迭代法求方程根
 
(2) 用初值 C语言每日一练——第154天:牛顿迭代法求方程根 代入方程中计算此时的 C语言每日一练——第154天:牛顿迭代法求方程根C语言每日一练——第154天:牛顿迭代法求方程根;程序中用变量 C语言每日一练——第154天:牛顿迭代法求方程根 描述方程的值,用 C语言每日一练——第154天:牛顿迭代法求方程根 描述方程求导之后的值。
 
(3) 计算增量 C语言每日一练——第154天:牛顿迭代法求方程根
 
(4) 计算下一个 C语言每日一练——第154天:牛顿迭代法求方程根
 
(5) 用新产生的 C语言每日一练——第154天:牛顿迭代法求方程根 替换原来的 C语言每日一练——第154天:牛顿迭代法求方程根,为下一次迭代做好准备。
 
(6) 若 C语言每日一练——第154天:牛顿迭代法求方程根,则转到第 (3) 步继续执行,否则转到步骤 (7)。
 
(7) 所求 C语言每日一练——第154天:牛顿迭代法求方程根 就是方程 C语言每日一练——第154天:牛顿迭代法求方程根 的根,将其输出。
 
本程序的编写既可用 while,也可用 do...while,二者得到的结果是一样的,只是在赋初值时稍有不同。
 
while 结构需要先判定条件,即先判断 C语言每日一练——第154天:牛顿迭代法求方程根 是否成立,这样对于 C语言每日一练——第154天:牛顿迭代法求方程根C语言每日一练——第154天:牛顿迭代法求方程根 我们要在 C语言每日一练——第154天:牛顿迭代法求方程根 附近取两个不同的数值作为初值;
 
do...while 结构是先执行一次循环体,得到 C语言每日一练——第154天:牛顿迭代法求方程根 的新值后再进行判定,这样程序开始只需给 C语言每日一练——第154天:牛顿迭代法求方程根 赋初值。
 
这里我们采用 do...while 结构来实现。

4. 确定程序框架

程序的主体结构如下👇

流程图如下所示👇

5. 迭代法求方程根

编写程序时要注意的一点是判定 C语言每日一练——第154天:牛顿迭代法求方程根
 
从牛顿迭代法的原理可以看出:迭代的实质就是越来越接近方程根的精确值,最初给 C语言每日一练——第154天:牛顿迭代法求方程根 所赋初值与根的精确值是相差很多了,正是因为这个我们才需要不断地进行迭代,也就是程序中循环体的功能。
 
在经过一番迭代之后所求得的值之间的差别也越来越小,直到求得的某两个值的差的绝对值在某个范围之内时,便可结束迭代。
 
若我们把判定条件改为 C语言每日一练——第154天:牛顿迭代法求方程根,则第一次的判断结果必为假,这样就不能进入循环体再次执行。

定义 solution()函数求方程的根。solution()函数的代码如下👇

6. 代码实现

完整代码📝

#include <stdio.h>
#include <math.h>

float solution(float a, float b, float c, float d)
{
	float x0, f, fd, h; 
	float x = 1.5;

	do
	{
		x0 = x; 

		f = a * x0 * x0 * x0 + b * x0 * x0 + c * x0 + d;

		fd = 3 * a * x0 * x0 + 2 * b * x0 + c;

		h = f / fd;

		x = x0 - h; 

	} while (fabs(x-x0) >= 1e-5);

	return x;
}

int main()
{
	float a, b, c, d; 

	float x; 
	
	printf("请输入方程的系数:");
	
	scanf("%f %f %f %f", &a, &b, &c, &d);
	
	x = solution(a, b, c, d);
	
	printf("\n");
	
	printf("所求方程的根为:x=%f\n", x);

	return 0;
}

运行结果👇

代码解释👇

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月15日
下一篇 2023年12月15日

相关推荐