机械优化设计实验c语言程序.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二次插值法 #include quot;stdio.hquot; #include quot;math.hquot; #include quot;conio.hquot; void main() { float *area(float a1,float p,float a[3]); float f(float x); float ar,fr; float a2,a3; float f1,f2,f3; float a1=10,p=0.01,e=0.00001; float pa[3]; area(a1,p,pa); a1=pa[0]; a2=pa[1]; a3=pa[2]; f1=f(a1); f2=f(a2); f3=f(a3); do { ar=((a3*a3-a2*a2)*f1+(a1*a1-a3*a3)*f2+(a2*a2-a1*a1)*f3); ar=ar/2/((a3-a2)*f1+(a1-a3)*f2+(a2-a1)*f3); fr=f(ar); if(argt;a2) {if(frgt;f2) {a3=ar;f3=fr;} else if(frlt;f2) {a1=a2;f1=f2; a2=ar;f2=fr;} else {a3=ar;a1=a2;a2=(a1+a3)/2; f1=f2;f3=fr;f2=f(a2);} } else if(arlt;a2) {if(frgt;f2) {a1=ar;f1=fr;} else if(frlt;f2) {a3=a2;f3=f2; a2=ar;f2=fr;} else {a1=ar;a3=a2;a2=(a1+a3)/2; f1=fr;f3=f2;f2=f(a2);} - 1 - } if(fabs(a1-a3)lt;=e) break; }while(1); if(f2lt;fr) {ar=a2;fr=f2;} printf(quot;\nx*=%f\nf(x*)=%fquot;,ar,fr); } float *area(float a1,float p,float a[3]) {float f(float x); float a2,f2,a3,f3,temp; float acc=0.01; float f1=f(a1); float p; while(1) {a2=a1+p;f2=f(a2); if(f2gt;=f1) {if(fabs(f2-f1)lt;acc) p=p/2; else p=-p; } else break; } while(1) {a3=a2+p;f3=f(a3); if(f2lt;=f3) break; p=2*p; a1=a2;f1=f2; a2=a3;f2=f3; } if(a1gt;a3) {temp=a1;a1=a3;a3=temp;} a[0]=a1;a[1]=a2;a[2]=a3; return a; } float f(float x) {float y=pow(x,4)-4*pow(x,3)-6*pow(x,2)-16*x+4; return y; } 变尺度法 计算 f(x1,x2)=x1+2*x2-4*x1-2*x1*x2 的无约束极值,初始点x0=[1,1]。 /* tt ---- 一维搜索初始步长 - 2 - ff ---- 差分法求梯度时的步长 ac ---- 终止迭代收敛精度 ad ---- 一维搜索收敛精度 n ----- 设计变量的维数 xk[n] -- 迭代初始点 */ #includelt;stdio.hgt; #includelt;stdlib.hgt; #includelt;math.hgt; #includelt;conio.hgt; #define tt 0.01 #define ff 1.0e-6 #define ac 1.0e-6 #define ad 1.0e-6 #define n 2 double ia; double fny(double *x) { double x1=x[0],x2=x[1]; double f; f=x1*x1+2*x2*x2-4*x1-2*x1*x2; return f; } double * iterate(double *x,double a,double *s) { double *x1; int i; x1=(double *)malloc(n*sizeof(double)); for(i=0;ilt;n;i++) x1[i]=x[i]+a*s[i]; return x1; } double func(double *x,double a,double *s) { double *x1; - 3 - double f;

您可能关注的文档

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档