C语言 用牛顿迭代法解方程
愉快的一天,不得不做的三件事:
种田,锄地,整代码!!!
【题目】
用牛顿迭代法求解任意的三次方程:
ax^3+bx^2+cx+d=0
要求a、b、c、d从键盘输入,使用循环方法编程。
【设计思路】
令f(x)= ax3+bx2+cx+d=((a*x+b)*x+c)*x+d.求出方程的表达式f(x)的导数f1(x)=(3*a*x+2*b)*x+c.计算曲线上的点(x0,f(x0))的切线与x轴的交点x:
x=x0-f(x0)/f1(x0)
任取初始点x,在循环中进行迭代:
x0=x
x=x0-f(x0)/f1(x0)
依次继续,直至x与x0的差满足指定精度的要求为止.
【代码分析】
float a,b,c,d; //定义三次方程的系数
float x,x0;
float f,f1; //定义三次方程表达式和和其一阶导数表达式
printf("请依次输入三次方程的四个系数 a,b,c,d:\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
printf("请输入x0的值:");
scanf("%f",&x0);
//输入系数和初始点
x=x0;
do
{
f=((a*x+b)*x+c)*x+d;
f1=(3*a*x+2*b)*x+c;
x=x-f/f1;
}
while(fabs(f/f1)>1e-7);
printf("方程在x0=%f附近的根是:x= %f",x0,x);
//进行循环迭代,直至f/f1满足指定精度
【代码展示】
#include<stdio.h>
#include<math.h>
void equation()
{
float a,b,c,d;
float x,x0;
float f,f1;
printf("-------欢迎进入<用牛顿迭代法解方程>操作界面-------\n\n");
printf("请依次输入三次方程的四个系数 a,b,c,d:\n");
scanf("%f%f%f%f",&a,&b,&c,&d);
printf("请输入x0的值:");
scanf("%f",&x0);
printf("\n");
x=x0;
do
{
f=((a*x+b)*x+c)*x+d;
f1=(3*a*x+2*b)*x+c;
x=x-f/f1;
}
while(fabs(f/f1)>1e-7);
printf("方程在x0=%f附近的根是:x= %f",x0,x);
}
int main()
{
equation();
return 0;
}
【运行结果展示】
“牛顿迭代法”
牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量,在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二,建立迭代关系式,所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式或关系。迭代关系式的建立,是解决迭代问题的关键,通常可以使用递推或倒退的方式来完成。
三、对迭代过程进行控制。
(文字、图片来源于秒懂百科)
IT 农工要回家休息了,我们下期再见吧
记得点击“在看”进行收藏哦
往期精彩