本文共 1828 字,大约阅读时间需要 6 分钟。
最近在学习工程优化设计与MATLAB实现,在模拟课本中的例子的时候,程序提示不正确。
Error using ==> mrdivide
Matrix dimensions must agree.
Error in ==> htexcoptfun4 at 10
dtmjy=((88-tlqs2)-(tjy2-tlqs1))/log((88-tlkq2)/(tjy2-tlqs1));
Error in ==> fmincon at 519
initVals.f = feval(funfcn{3},X,varargin{:});
主要问题有以下几点。
1)主程序调用的子函数 需要变量t。但是整个程序并没有t的输入,只有主程序的输出才有t。子函数需要调用t,但是只有主程序的输出才有t这个是不是矛盾?
是不是fmincon这个函数是一个需要迭代的函数?给定初始值t0之后,得到一个t然后再带入子函数即目标函数,再得到一个新的t,直到符合终止条件再终止?
2)我运行的时候出现[t,A]=fmincon(@htexcoptfun4,t0,[],[],[],[],tL,tU,@htexcoptcons4,options)
Caused by:Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.
函数初始化失败,是不是因为这个t未定义的原因?之前就感觉书有问题。但是自己由于不是很精通,所以想请教一下各位。麻烦了。下面是 matlab程序
1)主程序
%换热器优化设计,hexcopttest1
clc;
clear all;
close all;
global mclqs Kzl Kjy Ksr
mclqs=116.23;
Kzl=120;
Kjy=750;
Ksr=100;
t0=[62 70];
%options=optimset('LargeScale','off');
tL=[60,60];
tU=[88,88];
[t,A]=fmincon(@htexcoptfun4,t0,[],[],[],[],tL,tU,@htexcoptcons4,options)
2)目标函数
function A=htexcoptfun4(t)
global mclqs Kzl Kjy Ksr
global tlqs1 tlqs2 tzlq2 tjy2 tlkq2
global dtmzl dtmjy dtmsr AA
tlqs1=t(1);
tlqs2=t(2);
tzlq2=165-19.31*(tlqs1-60);
tjy2=88-2.62*(tlqs2-60)+40;
tlkq2=2.41*(tlqs2-60)+40;
dtmzl=((165-tlqs1)-(tzlq2-60))/log((165-tlqs1)/(tzlq2-60));
dtmjy=((88-tlqs2)-(tjy2-tlqs1))/log((88-tlkq2)/(tjy2-tlqs1));
dtmsr=((tlqs2-tlkq2)-(60-40))/log((tlqs2-tlkq2)/(60-40));
AA(1)=mclqs*(tlqs1-60)*1000/(Kzl*dtmzl);
AA(2)=mclqs*(tlqs2-tlqs1)*1000/(Kjy*dtmjy);
AA(3)=mclqs*(tlqs2-60)*1000/(Ksr*dtmsr);
A=sum(AA);
Q=mclqs*(tlqs1-60)+mclqs*(tlqs2-tlqs1)
end
3)约束函数
function [c ceq]=htexcoptcons4(t)
global mclqs Kzl Kjy Ksr
global tlqs1 tlqs2 tzlq2 tjy2 tlkq2 AA
global dtmzl dtmjy dtmsr
c(1)=1100-mclqs*(tlqs2-60);
c(2)=2+tlqs1-tlqs2;
c(3)=tzlq2-70;
c(4)=tjy2-87;
c(5)=42-tlkq2;
c(6)=-dtmzl;
c(7)=-dtmjy;
c(8)=-dtmsr;
A=sum(AA);
ceq=abs(imag(A));
转载地址:http://skyhp.baihongyu.com/