【文件属性】:
文件名称:牛顿下山法C语言实现,供大家用用
文件大小:1KB
文件格式:CPP
更新时间:2012-07-08 12:41:38
牛顿下山法C
//x:双精度实型变量指针,指向变量中存放迭代的初值,返回时在该指针只想爱你个的变量村存放终值
//eps:控制精度要求:eps1,eps2是精度要求;eps3是为了防止无休止地细分t而设的;eps4是为处理x0取得太差的情况而设置的,可适当取大点
//t:下山因子,,双精度实型变量
//js:最大迭代次数.不可取太大,防止初值跳跃次数太多
//f:无类型函数指针变量,指向计算方程左端函数f(x)值及其导数值f'(x) 的函数
//可由用户自编,其形式为:
// double *f(double x)
// {
// double y[2];
// y[0]=f(x)的表达式;
// y[1]=f'(x)的表达式;
// return y;
// }
#include
#include
void NewtDownhill(double *x , double eps1 , double eps2 , double eps3 , double eps4 , int js, double (**f)())
{
int n=1 , flag=1 ;
double t=1.0 , x0=*x , x1 , y[2] , f0 , f1 ;
(**f)(x0); //计算f(x0)和f'(x0)
f0=y[0] ;
x1=x0-t*(y[0]/y[1]) ; //迭代计算x1=x0-f(x0)/f'(x0)
(**f)(x1); //计算x1在f的值和f'的值
f1=y[0];
while(n<=js&&flag==1)
{
if(fabs(x1-x0)eps3)
{
t=t/2.0 ;
(**f)(x0); //计算f(x0)和f'(x0)
f0=y[0] ;
x1=x0-t*(y[0]/y[1]) ; //迭代计算x1=x0-f(x0)/f'(x0)
(**f)(x1); //计算x1在f的值和f'的值
f1=y[0];
x0=x1+eps4;
n++;
}
}
if(n>js) printf("Method fail after js iterations");
}