下载可编辑
result =t; } } } int main() {
double a = 0.0; double b = 3.0; double x= newton(a,b);
cout<<\求解的结果是 x = \ cout<<\此时f(x) = \ return 0; }
附录4
#include
return (t*t+2*t); }
void Goldensection(double(*pfun)(double t)) {
int maxflag=1000,k=1;
double a=-3,b=5,err=0.001,t,t1,t2; do {
t1=a+0.618*(b-a); t2=b-0.618*(b-a); if(t1=t2){a=t2;b=t1;} else {if(t1 }while(fabs(a-b)>err&&k cout< t=(a+b)/2; cout< cout<<\迭代结果:近似根为root=\函数值近似为:f(root)=\} int main() { .专业.整理. 下载可编辑 Goldensection(fun); return 0; } 附录5 #include return (8*x*x*x-2*x*x-7*x+3); } double max(double a,double b) { if(a>b)return a; else return b; } double min(double a,double b) { if(a>b)return b; else return a; } void Parainterpolation(double(*pfun)(double x)) { double a=0,b=2,err=0.001,x=0,x0=1,f,f0; do { x=((x0*x0-b*b)*fun(a)+(b*b-a*a)*fun(x0)+(a*a-x0*x0)*fun(b))/(2*((x0-b)*fun(a)+(b-a)*fun(x0)+(a-x0)*f un(b))); f0=fun(x0); f=fun(x); if(f=f0){a=min(x,x0);b=max(x,x0);x0=(a+b)/2;} else { if((fun(x)-f0)*(x-x0)>0) { b=max(x,x0);x0=min(x,x0); } else { a=min(x,x0);x0=max(x,x0); } } }while(fabs(x-x0)>err); x=(x+x0)/2; cout<<\迭代结果:\.专业.整理. 下载可编辑 cout<<\近似根:\ cout<<\函数值近似为:\} int main() { Parainterpolation(fun); return 0; } 附录6 #include double lamda(double x[2],double p[2],double a[2]) { double lam1,lam2; lam1=(pow(a[0],3)*x[0]*x[0]+pow(a[1],3)*x[1]*x[1]); lam2=-(pow(a[0]*x[0],2)+pow(a[1]*x[1],2)); double s; s=-lam2/(2*lam1); return s; } void main() { cout<<\最速下降法求解最优解程序运行结果\ cout< double lamd,x[3],a[6]; double p[2],g[2],e,y,m,n; int i=0; cout<<\请输入精度e\ cout<<\请输入初始点x[0],x[1]的值:\\n\ cin>>m; cin>>n; x[0]=m; x[1]=n; cout<<\函数通式为f(x)=a[0]x1*x1+a[1]x2*x2+a[2]x1*x2+a[3]x1+a[4]x2+a[5]\ cout<<\请依次输入函数的系数:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]:\ for(i=0;i<6;i++) cin>>a[i]; p[0]=(2*a[0]*x[0]+a[2]*x[1]+a[3]); p[1]=(2*a[1]*x[1]+a[2]*x[0]+a[4]); g[0]=-p[0]; g[1]=-p[1]; i=0; cout< 下载可编辑 g[0]=-p[0]; g[1]=-p[1]; i++; cout<<\ cout<<\第\次迭代结果:\ cout<<\的模为:\ cout<<\的值\ cout<<\ cout< y=(a[0]*x[0]*x[0]+a[1]*x[0]*x[1]+a[2]*x[0]*x[1]+a[3]*x[0]+a[4]*x[1]+a[5]); cout<<\此时满足精度要求的p的模为:\ cout< cout<<\满足精度的最优近似结果x[1],x[2]分别为:\ cout<<\ cout<<\ cout<<\满足进度要求所得的最优值为:\cout<<\ } 附录7 #include #include\矩阵的有关运算 int const n1=2; double f(double *x);//目标函数; void g(double *x,double *y);//目标函数的梯度; void main() { int i; double x0[n1],x1[n1],g0[n1],g1[n1],H[n1][n1],h[n1][n1],p[n1],f0,f1,temp,e; x0[0]=0;x0[1]=0;e=0.01;H[0][0]=2;H[0][1]=-1;H[1][0]=-1;H[1][1]=2; f0=f(x0); g(x0,g0); matrix_inv(H,h); matrix_mul(h,g0,p); //matrix_minus(x0,p,x1); for(i=0;i x1[i]=x0[i]-p[i]; g(x1,g1); f1=f(x1); temp=g1[0]*g1[0]+g1[1]*g1[1]; while(temp>e) {