牛顿迭代法是一种常用的计算方法,这个大学大三应该学过。
具体为:设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语言 用迭代法求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)