C语言编程 牛顿迭代法是什么 求解

C语言编程 牛顿迭代法是什么 求解,第1张

牛顿迭代法是一种常用的计算方法,这个大学大三应该学过。

具体为:设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'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。

你把这段文字认真仔细慢慢读一遍,把给的方程式写出来,然后照这个在纸上画出图形,就会明白牛顿迭代法的概要了。

你讲的xopintrootfloat这些都是自己定义的函数。float是c语言中定义浮点型变量的写法。

#include <iostream>

#include <mathh>

void main()

{

float f(float);

float xpoint(float,float);

float root(float,float);

float x,x1,x2,f1,f2;

do

{

printf("输入x1,x2\n\n");

scanf("%f%f",&x1,&x2);

f1=f(x1);

f2=f(x2);

}while(f1f2>0);

x=root(x1,x2);

printf("方程在15附近的根为:%f\n\n",x);

}

float f(float x)//定义一个f函数,返回值y

{

float y;

y=2xxx-4xx+3x-6;

return(y);

}

float xpoint(float x1,float x2)//定义一个带返回值的函数即y,也就是求y的函数,main()中调用

{

float y;

y=(x1f(x2)-x2f(x1))/(f(x2)-f(x1));

return(y);

}

float root(float x1,float x2)//这也是定义一个函数,是求根的函数,利用了上面自己定义的函数

{

float x,y,y1;

y1=f(x1);

do

{

x=xpoint(x1,x2);

y=f(x);

if(yy1>0)

{

y1=y;

x1=x;

}

else

x2=x;

}while(fabs(y)>1e-4);

return(x);

}

建议你看看c 语言教程,上面讲得很详细噢。

#include<stdioh>

#include<mathh>

void main()

{

double a,x0,x1;

int i;

scanf(“%lf”,&a);

while(a<0){

x1=a/20;

do

{x0=x1;

x1=(x0+a/x0)/20;

}while(fabs(x1-x0)>=1e-5);

i++;

printf(“sqrt(%lf)=%5lf\t”,a,x1);

if(i%5==0)

printf("\n");

scanf(“%lf”,&a);

}

}

#include

<stdioh>

#include

<mathh>

int

main(void)

{//本程序已测试,完全可用

double

a;

printf("input

a:");

scanf("%lf",&a);

if(fabs(a)<1e-13){//需要注意为0的情况,double双精度精确到15位,这里设置下

printf("0");

return

0;

}

double

x,y;

x=a;

y=(2x/3)+(a/(3xx));

while(fabs(y-x)>0000001){

x

=

y;

y=(2x/3)+(a/(3xx));

printf("%6f

%6f\n",x,xxx);

}

}

第一个回答的同志有两个错误

1,倒数第三行while(fabs(xk2-temp)<1e-6)中的<应该改为>才对

2,没有考虑输入的数很小为0的情况

牛顿迭代法

牛顿迭代法又称牛顿切线法,它采用以下方法求根:先任意设定一个与真实的根接近的值x0作为第一个近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),再过(x1,f(x1))点做f(x)的切线,交x轴于x2,再求出f(x2),再作切线……如此继续下去,直到足够接近真正的x为止。

其中f'(X0)是函数在X0处的斜率,也就是在X0处的导数。

代码如下:

#include

#include

float f(float a,float b,float c,float d,float x)

{

float f;

f=((ax+b)x+c)x+d;

return f;

}

float f1(float a,float b,float c,float x)

{

float f;

f=(x3a+2b)x+c;

return f;

}

float root(float a,float b,float c,float d)

{

float x0,x1=1;

do

{

x0=x1;

x1=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);

}while(fabs(x1-x0)>=1e-6);

return x0;

}

void main()

{

float a,b,c,d,x;

printf("input four float numbers:\n");

scanf("%f%f%f%f",&a,&b,&c,&d);

x=root(a,b,c,d);

printf("%1fX^3+%1fX^2+%1fX+%1f=0 its root near x=15 is :%4f\n",a,b,c,d,x);

getch();

}

#include"stdioh"

//#include"conioh"

#include"mathh"

float fun(float x)

{

return (xxx+4xx-10);

}

float xpoint(float x1,float x2)

{

return (x1+x2)/2;

}

float root(float x1,float x2)

{

float x,y,y1,y2;

y1=fun(x1);

printf("");

y2=fun(x2);

do

{x=xpoint(x1,x2);

y=fun(x);

if(y1y<0)

{

x2=x;

y2=y;

}

else

{

x1=x;

y1=y;

}

}while(fabs(fun(x))<5e-6);

return x;

}

void main()

{

float a,b,f1,f2,x;

do

{

printf("输入a b\n");

scanf("%f%f",&a,&b);

f1=fun(a);

f2=fun(b);

}while(f1f2>=0);

x=root(a,b);

printf("%f",x);

getch();

}

采纳我哦

以上就是关于C语言编程 牛顿迭代法是什么 求解全部的内容,包括:C语言编程 牛顿迭代法是什么 求解、C语言程序 用 迭代法求 平方根、c语言 用迭代法求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9347075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存