潘隆武-b09310524-机制09-5-鲍威尔法_第1页
潘隆武-b09310524-机制09-5-鲍威尔法_第2页
潘隆武-b09310524-机制09-5-鲍威尔法_第3页
潘隆武-b09310524-机制09-5-鲍威尔法_第4页
潘隆武-b09310524-机制09-5-鲍威尔法_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

鲍威尔共轭方向法实验报告姓名: 潘隆武 学号:B09310534 班级:机制 09-5(2+2)一、 实验目的1. 加深对鲍威尔法的基本理论和算法步骤的理解。2. 培养独立编制、调试计算机程序的能力。3. 掌握常用优化程序的使用方法。4. 培养灵活运用优化设计方法解决工程实际问题的能力。二、 实验要求1. 明确鲍威尔法基本原理及程序框图。2. 编制鲍威尔法程序。三实验内容计算实例:用鲍威尔法求函数的极小值221211(,)0(5)()fxxx步骤一:利用 matlab 先画出函数 的图线,并标出关键点,12(,)fx以备检验程序的运行结果是否正确,如图 a。图 a步骤二:通过编制鲍威尔法 C 语言程序求函数极小值.鲍威尔法基本原理简述任选一初始点 X0,再选两个线性无关的向量。从 X0出发,顺次沿 e1、e 2作一维搜索得 、 ,两点连线得一新方向 d1,用 d1102代替 e1形成两个线性无关向量 e2、d 1,作为下一轮搜索方向。再从出发,沿 d1作一维搜索得点 ,作为下一轮迭代的初始点。从02X01XX1出发,顺次沿 e2、d 1作一维搜索,得到点 、 ,两点的连线得12X一新方向 d2。 、 两点是从不同点 X0、 出发,分别沿 d1方向10 1进行一维搜索而得到的极小点。再从 出发,沿 d2作一维搜索得点2X2,即是二维问题的极小点 X*。、程序的流程图结束i=n ?判别条件是否满足?开始给定 0,X1()kkiiifxf.编制鲍威尔法程序#include “stdio.h“#include “stdlib.h“#include “math.h“double objf(double x) /*目标函数子程序 */double ff; /*定义目标函数*/ff=pow(10*(x1+x0-5),2)+pow(x1-x0),2);return(ff); /*返回目标函数的计算值 */void jtf(double x0,double h0,double s,int n,double a,double b) /*确定搜索区间的进退法(外推法)子程序*/int i;double *x3,h,f1,f2,f3;for(i=0;i=f1) /*若 f2f1,则步长变号,反向搜索*/ h=-h0;for(i=0;if2) /*根据的 f1、f2 大小关系判断消去区间*/for(i=0;ieps); /*如果误差不满足收敛精度 eps,进行循环迭代,直到满足收敛精度eps 为止*/for(i=0;idlt) /*如果函数下降值大于-1 则交换 j 与 m*/dlt=df; /*交换m 与 m 的值*/m=j;sdx=0;for(i=0;in;i+) /*计算误差*/sdx=sdx+fabs(xi-(*(xx1+i);if(sdxeps) /*如果满足精度要求*/free(ss);free(s);for(i=0;i4;i+) free(xxi);return(f);for(i=0;in;i+)*(xx2+i)=xi;f2=f; /*将终点的函数值赋给 f2*/for(i=0;in;i+) /*计算映射点*/*(xx3+i)=2*(*(xx2+i)-(*(xx1+i);xi=*(xx3+i);fx=objf(x); /*计算映射点的函数值*/f3=fx; /*将映射点的函数值赋给 f3*/q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt);d=0.5*dlt*(f1-f3)*(f1-f3);if(f3f1)|(qd) /*判断是否需要换方向*/ /*不需要换*/if(f2=f3) /*判断将终点还是将映射点赋给下一轮始点*/for(i=0;in;i+) /*将终点赋给下一轮始点*/*(xx0+i)=*(xx2+i);else /*将映射点赋给下一轮始点*/for(i=0;in;i+)*(xx0+i)=*(xx3+i);else /*去掉第 r+1 个方向,其它方向前移*/for(i=0;in;i+)*(ss+(i+1)*(n+1)=xi-(*(xx1+i);*(s+i)=*(ss+(i+1)*(n+1);f=oneoptim(xx0,s,h0,epsg,n,x); /*按新方向搜索一次*/ for(i=0;in;i+) /*将映射点赋给下一轮始点*/*(xx0+i)=xi;for(j=m+1;j=n;j+)for(i=0;in;i+)*(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j);void main() /*主程序*/ double p=1,2; /*设定使用鲍威尔法时的初始点为 p(1,2)*/double ff,x2;ff=powell(p,0.002,0.00000001,0.00000001,2,x);/*调用鲍威尔法子程序计算最终函数的极小值 ,并同时设定使用鲍威尔法时的初始点为p(1,2) ,外推法的初始步长 h0 为 0.002,鲍威尔法的精度为 0.00000001,黄金分割法的精度为 0.00000001,目标函数的变量 n为 2 个,变量为 x */printf(“n 所求函数是:f(x)=10(x1+x2-5)2+(x1-x2)2“);printf(“n 使用鲍威尔法时的迭代初始点为:p(1,2)“);printf(“n 鲍威尔法的精度为:0.00000001“);printf(“n 外推法的初始步长:ho 为 0.002“);printf(“n 黄金分割法的精度为:0.00000001“);printf(“n 求得极值点坐标为:x0=%f,x1=%f;极小值是:f(%f,%f)=%fn“,x0,x1,x0,x1,ff); /*输出极值点和极小值*/程序运行结果四、实验结果分析:从上面的程序运行结果和利用 Matlab 解出的结果相比较,利用鲍威尔法求函数的极小值时,在计算机运行性能满足条件的情况下,只要把外推法的初始步长 h0、鲍威尔法的精度为 e1、黄金分割

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论