求解:进退法确定若函数f x(x)=7x^2...

最优化方法(黄金分割与进退法)实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
最优化方法(黄金分割与进退法)实验报告
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢【图文】进退法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
上传于||暂无简介
大小:416.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢12503人阅读
matlab(4)
这是我最优化方法课程的编程作业,贴来和大家分享,后续会继续发来一些最优化的程序。、
以下程序由matlab编写
jintuifa.m
进退法,用于确定下单峰区间.根据最优化方法(天津大学出版社)20页算法1.4.3编写。
输出:[left right]& 为下单峰区间
输入:y& x& x0 step&&&&&&&&&&&&&&&&&
&&&&& y为函数,x为函数y的变量,x0& step(&0)分别为初始点,初始步长
黄金分割法。根据最优化方法(天津大学出版社)17页算法1.4.2编写。
当保留的区间长度|b-a|&=epsilon时停止迭代
输出:[best_x best_fx]& best_x为最优的x值,best_fx为最优的函数值
输入: y x a b epsilon&&&&&
&&&&&& y为函数,x为函数y的变量,a,b为下单峰区间[a,b],epsilon为精确度
paowuxianfa.m
抛物线法(二次插值法)。根据最优化方法(天津大学出版社)22页算法1.4.5编写。
输出:[best_x best_fx]&& best_x为最优的x值,best_fx为最优的函数值
输入:x1 x0 x2 epsilon1 epsilon2&& x1,x0,x2为已知的三点且满足f1&f0&f2,epsilon为精确度
Wolfe不精确一维搜索。根据最优化方法(天津大学出版社)24页算法1.4.6编写。
输出:[alpha xk1]& alpha为要求的步长,xk1为x(k+1)是得出的下一个点
输入:xk pk mu sigma&& xk为初始点,pk为方向,mu和sigma为参数. 一般mu属于(0,1/2),sigma属于(mu,1)
老师测试的例子函数例4
老师作业例子4函数求梯度
一个调用jintuifa.m golddiv.m paowuxianfa.m的计算的例子
程序详细代码
%最优化编程作业中的例子
&function result = f(x)
&%result = x.^4+2.*x+4;%例1 区间为[-1,0]
&%result = exp(-x)+x.^2;%例2 区间为[0,1]
result =100*(x(2)-x(1)^2)^2+(1-x(1))^2;%例4
%求在点x处的梯度,对应编程作业中的例四 这里的x是向量,代表x1,x2……
%author liuxi BIT
function result =g(x)
syms x1 x2;%定义符号变量
f=100*(x2-x1^2)^2+(1-x1)^2;
result_1=diff(f,x1);%函数f对符号变量x1求一阶微分
result_2=diff(f,x2);
result(1)=subs(result_1,[x1 x2],[x(1) x(2)]);%将result_1中的符号变量x1和x2替换为普通变量x(1),x(2)
result(2)=subs(result_2,[x1 x2],[x(1) x(2)]);
%黄金分割法。根据最优化方法(天津大学出版社)17页算法1.4.2编写。
%v1.0 author: liuxi BIT
%best_x为最优的x值,best_fx为最优的函数值,y为函数,x为函数y的变量,a,b为下单峰区间[a,b],epsilon为精确度
%当保留的区间长度|b-a|&=epsilon时停止迭代
function [best_x best_fx]=golddiv(y,x,a,b,epsilon)
if nargin==4
&&& epsilon=0.0000001;;%设置默认的epsilon
x2=a+0.618*(b-a);%step1
f2=subs(y,x,x2);
x1=a+0.382*(b-a);%step2
f1=subs(y,x,x1);
while(abs(b-a)&epsilon)
&&& if f1&f2 %step4
&&&&&&& b=x2;x2=x1;f2=f1;
&&&&&&& x1=a+0.382*(b-a);%转step2
&&&&&&& f1=subs(y,x,x1);
&&& elseif f1==f2
&&&&&&& a=x1;b=x2;
&&&&&&& x2=a+0.618*(b-a);f2=subs(y,x,x2);%转step1
&&&&&&& x1=a+0.382*(b-a);f1=subs(y,x,x1);
&&&&&&& a=x1;x1=x2;f1=f2;
&&&&&&& x2=a+0.618*(b-a);%step5
&&&&&&& f2=subs(y,x,x2);
best_x=(a+b)/2;%最优的x值
best_fx=subs(y,x,best_x);%最优的函数值
jintuifa.m
%进退法,用于确定下单峰区间.根据最优化方法(天津大学出版社)20页算法1.4.3编写。
%v1.0 author: liuxi BIT
%[left right]为下单峰区间,y为函数,x为函数y的变量,x0为初始点(默认为0),step(&0)为初始步长(默认为0.01)
function [left right] = jintuifa(y,x,x0,step)
if nargin==3%当只有三个参数时,默认设置步长为0.01
&&& step=0.01;
if nargin==2
&&& x0=0;%当只有两个参数时,默认设置初始点为0
&&& step=0.01;
f0=subs(y,{x},{x0});%step1 求f(x0) 将函数y中变量x替换为x0
x1=x0+%step2
f1=subs(y,{x},{x1});
if (f1&=f0)%step3 step4
&&& step=2*
&&& x2=x1+
&&& f2=subs(y,{x},{x2});
&&& while(f1&f2)
&&&&&&& x0=x1; x1=x2;
&&&&&&& f0=f1; f1=f2;
&&&&&&& step=2*
&&&&&&& x2=x1+
&&&&&&& f2=subs(y,{x},{x2});
&&& left=x0
&&& right=x2
else%step5 step6
&&& step=2*
&&& x2=x1-
&&& f2=subs(y,{x},{x2});
&&& while(f0&f2)
&&&&&&& x1=x0; x0=x2;
&&&&&&& f1=f0; f0=f2;
&&&&&&& step=2*
&&&&&&& x2=x1-
&&&&&&& f2=subs(y,{x},{x2});
&&& left=x2;right=x1;
paowuxianfa.m
%抛物线法(二次插值法)。根据最优化方法(天津大学出版社)22页算法1.4.5编写。
%v1.0 author: liuxi BIT
%best_x为最优的x值,best_fx为最优的函数值,y为函数,x为函数y的变量,x1,x0,x2为已知的三点且满足f1&f0&f2,epsilon为精确度
function[best_x best_fx]=paowuxianfa(y,x,x1,x0,x2,epsilon1,epsilon2)
if nargin==5
&&& epsilon1=0.0000001;
&&& epsilon2=0.0000001;
%求f(x1),f(x0),f(x2)
f1=subs(y,x,x1);
f0=subs(y,x,x0);
f2=subs(y,x,x2);
while abs(x1-x2)&epsilon1&&abs((x2-x0)*f1+(x1-x2)*f0+(x0-x1)*f2)&epsilon2%step1 step2
&&& x3=0.5*((x2^2-x0^2)*f1+(x1^2-x2^2)*f0+(x0^2-x1^2)*f2)/((x2-x0)*f1+(x1-x2)*f0+(x0-x1)*f2);%step3&& x3对应算法中的x一拔,就是x上面有一个“—”
&&& f3=subs(y,x,x3);
&&& if f0-f3&0%转step6
&&&&&&& if x0&x3
&&&&&&&&&&& x2=x3;f2=f3;
&&&&&&& else
&&&&&&&&&&& x1=x3;f1=f3;
&&&&&&& end%if x0&x3
&&& elseif f0-f3==0%转step7
&&&&&&& if x0&x3
&&&&&&&&&&& x1=x0;x2=x3;x0=0.5*(x1+x2);
&&&&&&&&&&& f1=f0;f2=f3;f0=subs(y,x,x0);
&&&&&&& elseif x0==x3%转step8
&&&&&&&&&&& x4=0.5*(x1+x0);f4=subs(y,x,x4);%x4对应算法中的x一冒,就是x上面有一个“^”
&&&&&&&&&&& if f4&f0
&&&&&&&&&&&&&&& x2=x0;x0=x4,f2=f0;f0=f4;
&&&&&&&&&&& elseif f4==f0
&&&&&&&&&&&&&&& x1=x4;x2=x0;x0=0.5*(x1+x2);
&&&&&&&&&&&&&&& f1=f4;f2=f0,f0=subs(y,x,x0);
&&&&&&&&&&& else
&&&&&&&&&&&&&&& x1=x4;f1=f4;
&&&&&&&&&&& end%if f4&f0
&&&&&&& else%转step9
&&&&&&&&&&& x1=x3;x2=x0;x0=0.5*(x1+x2);
&&&&&&&&&&&& f1=f3;f2=f0;f0=subs(y,x,x0);
&&&&&&& end% if x0&x3
&&& else %转step5
&&&&&&& if x0&x3
&&&&&&&&&&& x2=x0;x0=x3;f2=f0;f0=f3;
&&&&&&& else
&&&&&&&&&&& x1=x0;x0=x3;f1=f0;f0=f3;
&&&&&&& end
&&& end%if f0-f3&0
&&& k=k+1
best_x=x0;
best_fx=f0;
%Wolfe不精确一维搜索。根据最优化方法(天津大学出版社)24页算法1.4.6编写。
%v1.0 author: liuxi BIT
%alpha为要求的步长,xk1为x(k+1)是得出的下一个点,xk为初始点,pk为方向,mu和sigma为参数,
%一般mu属于(0,1/2),sigma属于(mu,1)
function[alpha xk1] =wolfe(xk,pk,mu,sigma)
if nargin&=2
&&& mu=0.1;%默认设置
&&& sigma=0.5;
if nargin==0
&&& xk=[0 0];%这个是为了测试的那个例子方便而设的,通用性就不需要这段了
&&& pk=[1 0];
a=0;b=alpha=1;j=0;%step1 j用来标记迭代次数 Inf表示无穷大
xk1=xk+alpha*%step2 xk1代表算法里的x(k+1) , fk1代表f(k+1), gk1代表g(k+1)
fk1=f(xk1);
gk1=g(xk1);
while& fk-fk1&-mu*alpha*gk*pk'
&&& j=j+1;
&&& alpha=0.5*(alpha+a);
&&& xk1=xk+alpha*
&&& fk1=f(xk1);
&&& %gk1=g(xk1);
while gk1*pk'&sigma*gk*pk'
&&& j=j+1;
&&& alpha=min([2*alpha 0.5*(a+b)]);
&&& xk1=xk+alpha*
&&& %fk1=f(xk1);
&&& gk1=g(xk1);
xk1=xk+alpha*
%format long
y = x.^4+2.*x+4;
[left right] = jintuifa(y,x,-1);
[best_x best_fx]=golddiv(y,x,left,right);
[best_x best_fx]=paowuxianfa(y,x,left,(left+right)/2,right);&&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:142318次
积分:2391
积分:2391
排名:第12207名
原创:80篇
评论:133条
(12)(4)(1)(2)(2)(2)(10)(2)(12)(6)(25)(7)(2)当前位置: >>
内蒙古科技大学进退发黄金分割法二次插值法编程
进退法试用进退法确定函数 f(x)=3x2+8x+9 的初始单峰区间,设定给定的初始值 x0=0,初始步长 h=0.1。#include &math.h& #include &stdlib.h& #include &stdio.h& main() {float x0=0,x1,x2; float h=0.1;
double f1,f2; printf(&请输入初始点,初始步长。\n&); /*scanf(&%f%f\n&,&x0,&h);*/ x1=x0; x2=x1+h; printf(&%f,%f\n&,x1,x2); f1=3*pow(x1,2)-8*x1+9; f2=3*pow(x2,2)-8*x2+9; printf(&%f,%f\n&,f1,f2); if(f1&f2) {ss:h=2*h; x2=x2+h; f1=f2; f2=3*pow(x2,2)-8*x2-9; if(f2&f1) printf(&区间是%f,%f\n&,x1,x2); else {x1=x2-h; if(f1==f2) printf(&区间是%f,%f\n&,x1,x2); else goto } else{if(f2==f1) printf(&区间是%f,%f\n&,x1,x2); else{h=-h/4; kk: x1=x1+h; f2=f1; f1=3*pow(x1,2)-8*x1-9; if(f2&f1) printf(&区间是%f,%f\n&,x1,x2); else{x2=x1-h; if(f1=f2)printf(&区间是%f,%f\n&,x1,x2); else{h=2*h; goto } }}}} } 输出正确结果: (0.7,3.1) 黄金分割法试用黄金分割法求一元函数 minf(x)=x2+6x+9 的最优解。已知初始单峰区间【1,7,】 ,取迭 代精度 q=0.01。 #include&math.h& #include&stdlib.h& #include&stdio.h& main() {float a=1,b=7; float e=0.01; double a1,a2; double f1,f2; double k,h; int n=0; /*printf(&请输入区间值和迭代精度值\n&); scanf(&%f%f%f&,&a,&b,&e);*/ a1=a+0.382*(b-a); f1=pow(a1,2)-6*a1+9; a2=a+0.618*(b-a); f2=pow(a2,2)-6*a2+9; printf(&%f,%f,%f\n&,a1,a2,f1,f2); ss: if(f1&f2) {b=a2; a2=a1; f2=f1; n=n+1; a1=a+0.382*(b-a); f1=pow(a1,2)-6*a1+9; } else {a=a1; a1=a2; f1=f2; n=n+1; a2=a+0.618*(b-a); f2=pow(a2,2)-6*a2+9; } if((b-a)&e||(b-a)==e) {k=(b+a)/2; h=pow(k,2)-6*k+9; printf(&最优点和最优值为%f,%f,%d\n&,k,h,n); }} 运行结果 最优点 2.998360 最优值 0.000003二次插值法现已知某汽车行驶速度 x 与每公里耗油量之间的函数关系为:f(x)=x+20/x.试用二次插值法 确定当速度在 30~100km/s 时的最经济速度 x*,取迭代精度 q=0.01。#include&stdlib.h& #include&math.h& float fun(float x) {return x+20.0/x; } float eccz(float a,float b,float e) { float x1,x2,x3;float f1,f2,f3;float c1,c2,x,f; x1=a;x3=b;x2=(a+b)/2; s30:f1=fun(x1);f2=fun(x2);f3=fun(x3); c1=(f3-f1)/(x3-x1);c2=((f2-f1)/(x2-x1)-c1)/(x2-x3); if (c2==0.0) goto s90; x=0.5*(x1+x3-c1/c2);f=fun(x); if((x-x1)*(x3-x)&=0.0) goto s90; if(fabs(f-f2)&e) goto s95; if(x&x2) goto s70; if(f2&f) goto s60; x1=x;goto s30; s60:x3=x2;x2=x;goto s30; s70:if(f2&f) goto s80;x3=x;goto s30; s80:x1=x2;x2=x;goto s30; s90:x=x2; s95: } main() { float a=30;float b=100;float e=0.01; y=eccz(a,b,e); printf(&由二次差值法所求得的最优点为 x=%f\n&,y); printf(&所求得的最优解为 minf(x)=%f\n&,fun(y));} 运行结果: 最优点 65.000000 最优值 65.307692
内蒙古科技大学进退发黄金分割法二次插值法编程 隐藏&& 进退法 试用进退法确定函数 f(x)=3x2+8x+9 的初始单峰区间,设定给定的初始值 x0=0,初始步长 h=0....内蒙古科技大学学... 内蒙古科技大学2007-...A 二次插值法 ⒋牛顿法是以( B 罚函数法 C ...C 黄金分割法 C 最好点 C 梯度方向 ⒌复合形法...关键词:内蒙古科技大学现代机械设计方法考试试卷 1...x3 ) 内,取一点 x2 ,用二次插值法计算得 x4 ...分) (5 四、分析与计算题 1. 用黄金分割法求解...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 函数fx的定义域为d 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信