初级系列6.牛顿迭代法求方程根问题
牛顿迭代法求方程根
问题描述
编写用牛顿迭代法求方程根的函数, 方程为ax^3 + bx^2 + cx + d = 0
系数a,b,c,d由主函数输入, 求x在1附近的一个实根. 求出根后,由主函数输出
牛顿迭代法的公式是:
x = x0 - f(x0) / f'(x0) 设迭代到|x-x0| <= 10^5时结束
问题分析
牛顿迭代法是取x0之后,在此基础找到比x0更接近的方程的根,一步步迭代从而找到更接近方程根的近似根
设r是f(x) =0的根,选取x0作为r初始近似值,过点(x0,f(x0)) 做曲线y = f(x)的切线L
L的方程为y = f(x0) + f'(x0)(x-x0)
求出L与x轴交点的横坐标x1=x0 - f(x0)/f'(x0)
称x1为r的一次近似值,过点(x1, f(x1))做曲线y=f(x)的切线,并求该切线与x轴的横坐标 x2=x1-f(x1)/f'(x2)称为r的二次近似值,重复以上过程,得r的近似值xn 上述过程即为牛顿迭代法的求解过程
算法设计
程序流程分析:
|--1. 在1附近找任一实数作为x0的初值 取1.5即x0 = 1.5
|--2. 用初值x0代入方程中计算此时的f(x0)及f'(x0) 程序中用变量f描述方程的值用fd描述方程求导之后的值
|--3. 计算增量h=f/fd
|--4. 计算下一个x, x = x0 - h
|--5. 用新产生的x替换原来的x0 为下一次迭代作好准备
|--6. 若|x-x0|>=le-5 则转到步骤3继续执行 否则转到步骤7
|--7. 所求x就是方程ax^3 + bx^2 + cx + d = 0的根,将其输出
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
float solution(float a, float b, float c, float d); //函数功能是用牛顿迭代法求方程的根
float a,b,c,d,x; //x用来记录求得的方程根, abcd代表所求方程的系数
printf("请求输入方程的系数:");
scanf("%f %f %f %f", &a, &b, &c, &d);
x = solution(a, b, c, d);
printf("所求方程的根为x = %f", x);
return 0;
}
float solution(float a, float b, float c, float d)
{
float x0, x = 1.5, f, fd, h; //f用来描述方程的值, fd用来描述方程求导之后的值
do
{
x0 = x; //用来求得的x的值代替x0原来的值
f = a*x0*x0*x0 + b*x0*x0 + c*x0 + d;
fd = 3*a*x0*x0 + b*x0 + c;
h = f/fd;
x = x0 - h;
} while (fabs(x-x0) >= 1e-5);
return x;
}
/* !< input */
2 -4 3 -6
/* !< output */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!