分享

牛顿法──用导数方法求方程的近似解

 dwlinux_gs 2014-09-15
牛顿迭代法要计算 
(1) y1=f(x) 在 x 的函数值 
(2) d1=f'(x) 在x 的值 
你可以写两个函数,分别计算y1,d1 
如果一阶导数有解析解,则可用赋值语句,否则要写数值解子程序。 

步骤: 
设解的精度,例 float eps=0.000001; 
设x初值,x1; 
 

迭代循环开始 
算y1 = f(x1);
算d1 = f'(x1) 
用牛顿公式 算出 x2; [x2 = x1 - y1 / d1] 
如果 fabs(x2-x1) > eps 则重新迭代 -- 用新的函数值和一阶导数值推下一个 新x.

牛顿迭代法: 
#include<stdio.h> 
#include<conio.h> 
#include<math.h> 
#define MAXREPT 1000 
float f(float x) 
{return(x*exp(x)-1); 
} 
float df(float x) 
{return((x+1)*exp(x)); 
} 
float iterate(float x) 
{float x1; 
x1=x-f(x)/df(x); 
return(x1); 
} 

void main() 
{
float x0,x1,eps,d;int k=0; 
printf("\n please input x0,eps:"); 
scanf("%f,%f",&x0,&eps); 
printf("\n k xk\n"); 
printf(" %d %f\n",k,x0); 
do 
{k++; 
x1=iterate(x0); 
printf(" %d %f\n",k,x1); 
d=fabs(x1-x0); 
x0=x1; 
} 
while((d>=eps)&(k<MAXREPT)); 

if(k<MAXREPT) 
printf("the root is x=%f, k=%d\n",x1,k); 
else 
printf("\n The iteration is failed!\n"); 
getch(); 
} 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多