matlab工具箱优化问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 00:44:40
我是MATLAB的初学者,这有个程序看不懂,求高手帮吧程序修改下,能运行结果出来就行,因为这个程序我看了很多遍,想搞懂。
以工程车辆上某一圆柱型减振弹簧为例,该弹簧材料为50 CrVA,给定激励振幅为2 mm。其工作频率 25Hz,结构上允许簧丝直径d=2~12 mm,中径D一20~60mm,有效圈数n=3~ 15,参振质量 m=100 kg。另外,弹簧材料的剪切模量G=78 700 N/mm ,弹簧丝许用剪应力 [r]=366 MPa。
利用Matlab6.5软件优化工具箱的Fmincon()函数 ,对建立的数学模型进行求解,首先要建立两个函数文件,一个是目标函数的文件,命名为myfun.m:
function f=myfun(x,a1,a3,a4)
f=10^7*x(1)^4*x(2)^(-3)*x(3)^(-1);
一个是约束文件,命名为mycon.m:
function[c,ceq]=mycon(x,a1,a2,a3,a4)
c(1)=4-x(2)*x(1)^(-1);
c(2)=x(2)*x(1)^(-1)-18;
c(3)=0.4*x(2)*x(3)+1.5x(1)-3.7x(2);
c(4)=7.87*1e7*a1*a4*x(1)^4*(7.87*1e7*a4*x(1)^4-315.83*a2^2*a3*x(2)^3*x(2))^(-1)-0.4*x(2)*x(3)+x(1)*x(3)+1.017*1e-3*a3*x(2)^3*x(3)*x(1)^(-4);
c(5)=1.028*1e10*a1*a4*x(1)^5.16*x(2)^(-2.16)*x(3)^(-1)*(7.87*1e7*a4*x(1)^4-315.83*a2^2*a3*x(2)^3*x(3))^(-1)-366;
c(6)=99.837*(a4*a3^(-1)*x(1)^4*x(2)^(-3)*x(3)^(-1))^0.5-a2;
然后建立一个原本文件,负责原始数据的输人、函数的调用和结果的输出。
A=[-1 0 0;1 0 0;0 -1 0;0 1 0;0 0 -1;0 0 1];
b=[-2;10;-20;60;-3;15];

程序调试通了,子程序主程序在一个程序里。

%======================
function tanhuang
A=[-1 0 0;1 0 0;0 -1 0;0 1 0;0 0 -1;0 0 1]
b=[-2;10;-20;60;-3;15]
x0=[2.5;25.0;3.0]
lb=zeros(3,1)

[x,fval,exitflag,output,lambda]=fmincon(@myfun,x0,A,b,[],[],lb,[],@mycon)

function f=myfun(x) %,a1,a3,a4)
f=10^7*x(1)^4*x(2)^(-3)*x(3)^(-1);

function[c,ceq]=mycon(x,a)
a=[2,25,100,1];
a1=a(1);a2=a(2);a3=a(3);a4=a(4);
c(1)=4-x(2)*x(1)^(-1);
c(2)=x(2)*x(1)^(-1)-18;
c(3)=0.4*x(2)*x(3)+1.5*x(1)-3.7*x(2);
c(4)=7.87*1e7*a1*a4*x(1)^4*(7.87*1e7*a4*x(1)^4-315.83*a2^2*a3*x(2)^3*x(2))^(-1)-0.4*x(2)*x(3)+x(1)*x(3)+1.017*1e-3*a3*x(2)^3*x(3)*x(1)^(-4);
c(5)=1.028*1e10*a1*a4*x(1)^5.16*x(2)^(-2.16)*x(3)^(-1)*(7.87*1e7*a4*x(1)^4-315.83*a2^2*a3*x(2)^3*x(3))^(-1)-366;
c(6)=99.837*(a4*a3^(-1)*x(1)^4*x(2)^(-3)*x(3)^(-1))^0.5-a2;
ceq=[];
%==============================

结果:
A =

-1 0