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

用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。在得到正确结果后,请修改程序使所设的x 初始值由1.5改变为100、1000、10000,再运行,观察结果,分析不同的x初值对结果有没有影响,为什么?修改程序,使之能输出迭代的次数和每次迭代的结果,分析不同的x初始值对迭代的次数有无影响。

#include<stdio.h>
#include<math.h>
int main()
{
float x1,x,f1,f2;static int count=0;
x1=1.5//定义初始值
do
{
x=x1;
f1=x*(2*x*x-4*x+3)-6;
f2=6*x*x-8*x+3;//对函数f1求导
x1=x-f1/f2; count++;
}while(fabs(x1-x)<=1e-5);
printf("%8.7f\n",x1); printf("%d\n",count);
return 0;
}
//2x3-4x2+3x-6//根据我改了初始值,查看结果,表明:改变初始值得到的结果并不一样,但是迭代的次数并没有改变!!
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-04-08

#include<stdio.h>
#include<math.h>
int main()
{
float x1,x,f1,f2;static int count=0;
x1=1.5//定义初始值
do
{
x=x1;
f1=x*(2*x*x-4*x+3)-6;
f2=6*x*x-8*x+3;//对函数f1求导
x1=x-f1/f2;  count++;
}while(fabs(x1-x)<=1e-5);
printf("%8.7f\n",x1); printf("%d\n",count);
return 0;
}
//2x3-4x2+3x-6

改了初始值,查看结果,表明:改变初始值得到的结果并不一样,但是迭代的次数并没有改变!!

本回答被网友采纳
第2个回答  2013-11-08
#include<stdio.h>float solution(float x){float x1,y,k;do{k=6*x*x-8*x+3;y=2*x*x*x-4*x*x+3*x-6;x1=x-y/k;x=x1;}while(fabs(y)<0.001);return x;}void main(){float x;<b>x=1.5; /* 初值改这里*/</b>x=solution(x);printf("%f\n",x);}

C语言编程 牛顿迭代法是什么 求解
你把这段文字认真仔细慢慢读一遍,把给的方程式写出来,然后照这个在纸上画出图形,就会明白牛顿迭代法的概要了。你讲的xopint?root?float?这些都是自己定义的函数。float是c语言中定义浮点型变量的写法。include <iostream> include <math.h> void main(){ float f(float);float xpoint(float,float...

C语言编程,指针,编写函数,用牛顿迭代法求方程f(x)=2x3-4x2+3x-6=0在...
include <math.h> double root(double (*f)(double),double (*f1)(double), double x,double eps);double fx(double x){ return 2*x*x*x-4*x*x+3*x-6;} double fp(double x){ return 6*x*x-8*x+3;} int main(){ double x=1.5,y,eps=1e-08;printf("input eps 1e-08...

用C语言实现牛顿迭代法解非线性方程组 方程组如下 可是迭代的初值没给...
回答:y=x+1 y=z+3 y x z y y-1 y-3 可以看出来 y=1.336 x=0.336 z=-1.664 附近就是解

牛顿迭代法解方程,C语言程序
是1e-5, 数字1,不是字母l,科学计数法,表示0.00001。

C语言编程——内容:用牛顿迭代法求一元三次方程的根。要求:由主函数调...
牛顿迭代法 牛顿迭代法又称牛顿切线法,它采用以下方法求根:先任意设定一个与真实的根接近的值x0作为第一个近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),再过(x1,f(x1))点做f(x)的切线,交x轴于x2,再求出f(x...

c语言 用牛顿迭代法求f(x);
main(){float x,f,f1; \/\/f代表 f(x)=2x^3-4x^2+5x-18,f1代表 f‘(x)=2*x^2-4*2x^+5 =6*x*x-8*x+5;x=8; \/\/ x的初值可为任意值 do { f=2*x*x*x-4*x*x+5*x-18; \/\/f(x)=2x3-4x2+5x-18 f1=6*x*x-8*x+5; \/\/f(x)的导数: f‘(x)=2*3* ...

c语言编写x3+x2+3x=0用牛顿迭代法求
公式:x = (- x^3 - x^2)\/3;主要过程如下:用户输入一个近似值:a float x,x1;x = a;x1 = (-x^3-x^2)\/3;while(fabs(x1-x)>0.0000001){ x = x1;x1 = (-x^3-x^2)\/3;} 循环退出时的x或x1就是方程的近似解

C语言 用牛顿迭代法求方程的根,并且输出迭代的次数
void main(){float x1,x0,f,f1;int i=0;\/\/i就是当前计算的次数 x1=1.5;do {i++;x0=x1;f=((2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x1=x0-f\/f1;printf("the d%th root is:%5.2f\\n",i,x1);}while(fabs(x1-x0)>=1e-5);printf("the time is d%\\n...

用牛顿迭代法编写c语言程序求方程x-e^-x=0的根
include <stdio.h> include <math.h> int main(void){ double x, x0, d;x0 = 0;do { x = x0 - (x0 - exp(-x0)) \/ (1 + exp(-x0));d = x - x0;x0 = x;} while (d >= 1e-10);printf("%.10f", x);return 0;} ...

C语言编程:牛顿迭代法求方程的根
程序流程分析:① 赋值x0=1.5,即迭代初值;② 用初值x0代入方程中计算此时的f(x0)及f’(x0),程序中用变量f描述方程的值,用fd描述方程求导之后的值;③ 计算增量d=f\/fd;④ 计算下一个x,x=x0-d;⑤ 把新产生的x替换x0,为下一次迭代做好准备;⑥ 若d绝对值大于1e-3,则重复②③...

相似回答