vlambda博客
学习文章列表

C语言 用牛顿迭代法解方程

点击上方“蓝字”关注我们
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)


依次继续,直至xx0的差满足指定精度的要求为止.





【代码分析】


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满足指定精度





【代码展示】


C语言   用牛顿迭代法解方程

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

}






【运行结果展示】


C语言 用牛顿迭代法解方程






C语言 用牛顿迭代法解方程


牛顿迭代法


牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,利用迭代算法解决问题,需要做好以下三个方面的工作:


一、确定迭代变量,在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

C语言 用牛顿迭代法解方程


二,建立迭代关系式,所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式或关系。迭代关系式的建立,是解决迭代问题的关键,通常可以使用递推或倒退的方式来完成。

C语言 用牛顿迭代法解方程


三、对迭代过程进行控制。


(文字、图片来源于秒懂百科)


IT 农工要回家休息了,我们下期再见吧

记得点击“在看”进行收藏哦




往期精彩