C语言程序 牛顿迭代法

C语言程序 牛顿迭代法,第1张

给你一点提示。

牛顿迭代法要计算

(1) y1=f(x) 在 x 的函数

(2) d1=f(x) 的一阶导数 在 x 的值

你可以写两个函数,分别计算y1,d1

如果一阶导数有解析解,则可用赋值语句,否则要写数值解子程序。

步骤:

设解的精度,例 float eps=0000001;

设x初值,x1;

算y1=f(x1);

迭代循环开始

算一阶导数 在 x1 的值 d1

用牛顿公式 算出 x2; [x2 = x1 - y1 / d1]

如果 fabs(x2-x1) > eps 则从新迭代 -- 用新的函数值和一阶导数值推下一个 新x

/

迭代就是函数自己调用自己,用的时候注意选择迭代结束条件就行了,不要陷入无限迭代。下面给出一个递归求阶乘的简单函数示例

/

long jiechen(long n){

if(n==1)return 1; //递归结束条件

else retrun(njiechen(n-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 语言教程,上面讲得很详细噢。

我举个例子:

①斐波那契数列:1,1,2,3,5,8,13,21,34

迭代:int Fib[N];

Fib[0]=1;Fib[1]=1;

for(i=2;i<N;i++)

Fib[i]=Fib[i-1]+Fib[i-2];

}

递归:int Fib(int n)

{ if(n==0||n==1)return 1;

else return (Fib(n-1)+Fib(n-2));

}

#include<stdioh>

#include<mathh>

int main()

{

float x1,x,f1,f2;static int count=0;

x1=15//定义初始值

do

{

x=x1;

f1=x(2xx-4x+3)-6;

f2=6xx-8x+3;//对函数f1求导

x1=x-f1/f2; count++;

}while(fabs(x1-x)<=1e-5);

printf("%87f\n",x1); printf("%d\n",count);

return 0;

}

//2x3-4x2+3x-6//根据我改了初始值,查看结果,表明:改变初始值得到的结果并不一样,但是迭代的次数并没有改变!!

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存