%人字架体积优化设计%1----主程序%人字架优化调用目标函数文件与非线性约束文件%设计变量的初始值x0=[100;800];%设计变量的下界与上界lb=[20;200];ub=[140;1200];%线性不等式约束(g3、g4、g5、g6)中

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 05:41:29

%人字架体积优化设计%1----主程序%人字架优化调用目标函数文件与非线性约束文件%设计变量的初始值x0=[100;800];%设计变量的下界与上界lb=[20;200];ub=[140;1200];%线性不等式约束(g3、g4、g5、g6)中
%人字架体积优化设计
%1----主程序
%人字架优化调用目标函数文件与非线性约束文件
%设计变量的初始值
x0=[100;800];
%设计变量的下界与上界
lb=[20;200];
ub=[140;1200];
%线性不等式约束(g3、g4、g5、g6)中设计变量的系数矩阵
a=zeros(4,2);
a(1,1)=-1;a(2,1)=1;
a(3,2)=-1;a(4,2)=1;
%线性不等式约束中常数项列阵
b=[-20;140;-200;1200];
%调用多维约束优化函数
%等式约束参数Aeq,beq定义为空矩阵符号“[]”
[x,fn]=fmincon(@rzjyh_f,x0,a,b,[],[],lb,ub,@rzjyh_g);
disp ' '
fprintf(1 ,' 钢管平均直径 D=%3.4fmm\n',x(1))
fprintf(1 ,' 人字架高度 H=%3.4fmm\n',x(2))
fprintf(1 ,' 人字架体积 V=%3.4fmm^3\n',fn)
%调用多维约束优化非线性约束函数(jsqyh_g)计算最优点x*的性能约束函数值
g=rzjyh_g(x);
disp ' '
fprintf(1,' 人字架钢管压缩强度 g1=%3.4f\n',g(1))
fprintf(1,' 人字架钢管稳定性 g2=%3.4f\n',g(2))
%2----目标函数(rzjyh_f)
function f=jsqyh_f(x);
%人字架跨距B;钢管厚度T;
B=1520;T=2.5;
f=2*pi*x(1)*T*sqrt((B/2)^2+x(2)^2);
%3----非线性不等式约束函数(rzjyh_g)
function [g,ceq]=rzjyh_g(x);
% 人字架跨距B;钢管厚度T;载荷P;弹性模量E;许用压应力Cy;
B=1520;T=2.5;P=294300;E=2.119e5;Cy=690;
%钢管压缩强度条件
Q=0.5*P*sqrt((B/2)^2+x(2)^2)/x(2); %钢管轴向压力
sgm=Q/(pi*T*x(1)); %钢管压应力
g(1)=sgm-Cy;
%钢管稳定性条件
Cc=0.125*pi^2*E*(x(1)^2+T^2)/((B/2)^2+x(2)^2); %稳定临界应力
g(2)=sgm-Cc;
ceq=[];
程序结果
Warning:The default trust-region-reflective algorithm does not solve problems with the constraints you have specified.FMINCON will use the active-set algorithm instead.For information on
applicable algorithms,see Choosing the Algorithm in the documentation.
> In fmincon at 486
Error using feval
Undefined function 'rzjyh_f' for input arguments of type 'double'.
Error in fmincon (line 601)
initVals.f = feval(funfcn{3},X,varargin{:});
Caused by:
Failure in initial user-supplied objective function evaluation.FMINCON cannot continue.
这是一本书上的程序,为什么程序总是运行错误呢,

%人字架体积优化设计%1----主程序%人字架优化调用目标函数文件与非线性约束文件%设计变量的初始值x0=[100;800];%设计变量的下界与上界lb=[20;200];ub=[140;1200];%线性不等式约束(g3、g4、g5、g6)中
这个程序要能够运行,首先要解决以下几个问题:
第一,你的第二个程序,定义目标函数中有一个错误:function f=jsqyh_f(x); 应改为:
function f=rzjyh_f(x);
第二,以上一大段,应该分别保存为3个m文件
一个是主程序:(随意命名)
%人字架体积优化设计
%1----主程序
%人字架优化调用目标函数文件与非线性约束文件
%设计变量的初始值
x0=[100;800];
%设计变量的下界与上界
lb=[20;200];
ub=[140;1200];
%线性不等式约束(g3、g4、g5、g6)中设计变量的系数矩阵
a=zeros(4,2);
a(1,1)=-1;a(2,1)=1;
a(3,2)=-1;a(4,2)=1;
%线性不等式约束中常数项列阵
b=[-20;140;-200;1200];
%调用多维约束优化函数
%等式约束参数Aeq,beq定义为空矩阵符号“[]”
[x,fn]=fmincon(@jsqyh_f,x0,a,b,[],[],lb,ub,@rzjyh_g);
disp ' '
fprintf(1 ,' 钢管平均直径 D=%3.4fmm\n',x(1))
fprintf(1 ,' 人字架高度 H=%3.4fmm\n',x(2))
fprintf(1 ,' 人字架体积 V=%3.4fmm^3\n',fn)
%调用多维约束优化非线性约束函数(jsqyh_g)计算最优点x*的性能约束函数值
g=rzjyh_g(x);
disp ' '
fprintf(1,' 人字架钢管压缩强度 g1=%3.4f\n',g(1))
fprintf(1,' 人字架钢管稳定性 g2=%3.4f\n',g(2))
第二个程序:文件名:rzjyh_f.m
%2----目标函数(rzjyh_f)
function f=rzjyh_f(x);
%人字架跨距B;钢管厚度T;
B=1520;T=2.5;
f=2*pi*x(1)*T*sqrt((B/2)^2+x(2)^2);
第三个程序:文件名:rzjyh_g.m
%3----非线性不等式约束函数(rzjyh_g)
function [g,ceq]=rzjyh_g(x);
% 人字架跨距B;钢管厚度T;载荷P;弹性模量E;许用压应力Cy;
B=1520;T=2.5;P=294300;E=2.119e5;Cy=690;
%钢管压缩强度条件
Q=0.5*P*sqrt((B/2)^2+x(2)^2)/x(2); %钢管轴向压力
sgm=Q/(pi*T*x(1)); %钢管压应力
g(1)=sgm-Cy;
%钢管稳定性条件
Cc=0.125*pi^2*E*(x(1)^2+T^2)/((B/2)^2+x(2)^2); %稳定临界应力
g(2)=sgm-Cc;
ceq=[];
把以上三个程序放在一个文件夹中,然后执行主文件即可运行.