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

Posted IT青鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 农工要回家休息了,我们下期再见吧

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




往期精彩





以上是关于C语言 用牛顿迭代法解方程的主要内容,如果未能解决你的问题,请参考以下文章

跪求用牛顿迭代法解三元三次非线性方程组,急!! 在线等。。。MATLAB求解要代码

如何用牛顿迭代法求解方程

matlab牛顿迭代法急!!(100分悬赏)

牛顿迭代法求解非线性方程组 matlab

急!!如何用matlab语言编写一个用牛顿迭代法求解经过有限差分法处理过的非线性方程组

C语言实现牛顿迭代法解方程