欢迎来到天天文库
浏览记录
ID:60790251
大小:11.75 KB
页数:4页
时间:2020-12-18
《对分法求解目标函数最优解函数MATLAB实现.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、%%对分法求解目标函数最优解函数function[t,y]=equation_extremum(x,~,a,b,epsional)%%=======================================%函数默认参数:%x为目标函数,输入字符串型,默认最优解求其最小值%a,b为其初始区间,默认闭区间,a=0;%%=======================================symst;x_inline=inline(sym(x));func_diff=diff(sym(x))
2、;func_diff_inline=inline(func_diff);t=b;high_value=func_diff_inline(t);t=a;low_value=func_diff_inline(t);ifhigh_value*low_value>0t='本函数不可解';y='给定初始区间非单谷区间';elseifhigh_value*low_value==0ifhigh_value==0t=b;y=x_inline(t);elset=a;y=x_inline(t);endelsewhileabs(high_value-low_value)>=epsional;c=1/2*(b+a
3、);t=c;middle_value=func_diff_inline(t);ifmiddle_value>0high_value=middle_value;b=c;elseifmiddle_value<0low_value=middle_value;a=c;elseifmiddle_value==0break;endendendendc=1/2*(b+a);t=c;y=x_inline(t);endend运行代码:%%========================closeall;clearall;clc;%%目标函数symst;[t,y]=equation_extremum('t*(
4、t-3)',t,-3,5,0.1);disp([t,y]);运行结果:t=1.5y=-2.25%%抛物线法求函数最优解function[t,y]=parabola_extremum(x,~,t1,t2,epsional)%%=======================================%函数默认参数:%x为目标函数,输入字符串型,例如:'x^2-sin(x)'默认最优解求其最小值%a,b为其初始区间,默认闭区间,t15、line=inline(sym(x));%%生成随机数求出t0;high_value=x_inline(t2);low_value=x_inline(t1);t0=parabola_overture(x,t,t1,t2);%自定义函数,试探法求t0middle_value=x_inline(t0);%%拟合曲线,待定系数法%p(t0)=a0+a1*t0+a2*t0^2=f(t0)%p(t1)=a0+a1*t1+a2*t2^2=f(t1)%p(t2)=a0+a1*t2+a2*t2^2=f(t2)%推出:%a1=((t0^2-t2^2)*f(t1)+(t2^2-t1^2)*f(t0)+(t1^6、2-t0^2)*f(t2))/((t1-t0)*(t0-t2)*(t2-t1))%a2=((t0-t2)*f(t1)+(t2-t1)*f(t0)+(t1-t0)*f(t2))/((t1-t0)*(t0-t2)*(t2-t1))while1t_ba=0.5*((t0^2-t2^2)*low_value+(t2^2-t1^2)*middle_value+(t1^2-t0^2)*high_value)/((t0-t2)*low_value+(t2-t1)*middle_value+(t1-t0)*high_value);t_ba_value=x_inline(t_ba);ifabs(t_ba-t7、0)t0ift_ba_value<=middle_valuet1=t0;t0=t_ba;low_value=middle_value;middle_value=t_ba_value;elset2=t_ba;high_value=t_ba_value;endelseift_ba_value<=middle_valuet2=t0;t0
5、line=inline(sym(x));%%生成随机数求出t0;high_value=x_inline(t2);low_value=x_inline(t1);t0=parabola_overture(x,t,t1,t2);%自定义函数,试探法求t0middle_value=x_inline(t0);%%拟合曲线,待定系数法%p(t0)=a0+a1*t0+a2*t0^2=f(t0)%p(t1)=a0+a1*t1+a2*t2^2=f(t1)%p(t2)=a0+a1*t2+a2*t2^2=f(t2)%推出:%a1=((t0^2-t2^2)*f(t1)+(t2^2-t1^2)*f(t0)+(t1^
6、2-t0^2)*f(t2))/((t1-t0)*(t0-t2)*(t2-t1))%a2=((t0-t2)*f(t1)+(t2-t1)*f(t0)+(t1-t0)*f(t2))/((t1-t0)*(t0-t2)*(t2-t1))while1t_ba=0.5*((t0^2-t2^2)*low_value+(t2^2-t1^2)*middle_value+(t1^2-t0^2)*high_value)/((t0-t2)*low_value+(t2-t1)*middle_value+(t1-t0)*high_value);t_ba_value=x_inline(t_ba);ifabs(t_ba-t
7、0)t0ift_ba_value<=middle_valuet1=t0;t0=t_ba;low_value=middle_value;middle_value=t_ba_value;elset2=t_ba;high_value=t_ba_value;endelseift_ba_value<=middle_valuet2=t0;t0
此文档下载收益归作者所有