牛顿迭代法C语言程序: 牛顿迭代法要计算
(1) y1=f(x) 在x 的函数值
(2) d1=f(x) 的一阶导数在x 的值
你可以写两个函数,分别计算y1,d1
如果一阶导数有解析解,则可用赋值语句,否则要写数值解子程序。
步骤:
设解的精度,例float eps=0.000001;
设x初值,x1;
算y1=f(x1);
迭代循环开始
算一阶导数在x1 的值d1
用牛顿公式算出x2; [x2 = x1 - y1 / d1]
如果fabs(x2-x1) > eps 则从新迭代-- 用新的函数值和一阶导数值推下一个新x.
第一题:#include
#include
#include
float f(float x)
{
return (x*exp(x)-1);
}
float f1(float x)
{
return (x*exp(x)+exp(x));
}
void main()
{
float x1=0.5,x;
system("cls");
do
{
x=x1;
x1=x-f(x)/f1(x);
}while(fabs(x1-x)>0.0001);
printf("x=%f\n",x1);
}
第二题:
#include
#include
#include
float f(float x)
{
return (x*x*x-12.42*x*x+50.444*x-66.552);
}
float f1(float x)
{
return (3*x*x-24.84*x+50.444);
}
void main()
{
float x1=4.0,x;
system("cls");
do
{
x=x1;
x1=x-f(x)/f1(x);
}while(fabs(x1-x)>0.0001);
printf("x=%f\n",x1);
}
#include
#include
#include
#define MAXREPT 1000
float f(float x)
{return(x*x*x-12.42*x*x+50.444*x-66.552);
}
float df(float x)
{return(3*x*x-24.84*x+50.444);
}
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 if(k printf("the root is x=%f, k=%d\n",x1,k); else printf("\n The iteration is failed!\n"); getch(); }