Mysterious "Operands to the || and && operators must be convertible to logical scalar values." error
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Lenilein
am 21 Jan. 2020
Bearbeitet: Fangjun Jiang
am 10 Mär. 2020
Hello dear community,
I'm getting following error quite unexpectedly (since I don't have any && or || in my code) while trying to solve an optimization problem with patternsearch:
Operands to the || and && operators must be convertible to logical scalar values.
Error in psAugConverged (line 94)
if ~isempty(infMessage) && strmatch('optimlib:optimfcnchk',infMessage)
Error in pfmincon (line 66)
[X,FVAL,maxConstr,optimState] = psAugConverged(Iterate,X,optimState,psAugParam,options);
Error in patternsearch (line 280)
[X,FVAL,EXITFLAG,OUTPUT] = pfmincon(FUN,X0,optimState,Iterate, ...
Error in Test1 (line 17)
[x,fval,exitflag,output] = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,@(x)nonlcon(x),options);
Any clue?
My optimization problem is referring to following script called CSolveODE (I made sure to replace all && with & but it didn't fix the issue!) and I am sure that the issue is linked to this script since the optimization code works if I replace the parameter Heatflow.steamair with a parameter from ADatafromExcel or BDatadefinition
% addpath Functions
% run ADatafromExcel
% run BDatadefinition
Position.all=zeros([],1);Characteristics.paper_all=zeros([],2); Characteristics.paper_begsection_all=[];Humidity.air_f_all=zeros([],1);Heatflow.steampaper_all=zeros([],1);Heatflow.steamair_all=zeros([],1);Support.differentialua=zeros([],1);Temperature.air_f_all=zeros([],1);Temperature.air2_f_all=zeros([],1);PAR.CONDITIONS.PAPER_PRE_ALL=[];PAR.CONDITIONS.PAPER_POST_ALL=[];PAR.CONDITIONS.PAPER_COAT_ALL=[];Support.coeffplot_tot=[];
% Solving loop
for k=1:numel(PAR.POSITION_IN_PAPERMACHINE)-1
PAR.TEMP.STEAM_CYL=PAR.TEMP.STEAM_CYL_ALL(k); PAR.AREA.CONV=PAR.AREA.CONV_ALL(k); PAR.AREA.COND=PAR.AREA.COND_ALL(k);PAR.MASSFIBER.P=PAR.MASSFIBER.ALL(k); PAR.ANGLE=PAR.ANGLE_ALL(k);PAR.DIAMETER.CYL=PAR.DIAMETER.CYL_ALL(k); PAR.AREA.CYL_NONCOVERED=PAR.AREA.CYL_NONCOVERED_ALL(k);PAR.MASSFLOW.AIR_PERZONE=PAR.MASSFLOW.AIR_PERZONE_ALL(k);PAR.HEATTRANSF.CYLAIR=PAR.HEATTRANSF.CYLAIR_ALL(k);PAR.MASSTRANSF.PAPERAIR=PAR.MASSTRANSF.PAPERAIR_ALL(k); PAR.HEATTRANSF.PAPERAIR=PAR.HEATTRANSF.PAPERAIR_ALL(k);
PAR.AREA.CONV1=PAR.AREA.CONV_ALL1(k);
% Solving the ODE system
if k<(PAR.CYLNUM.PRE*2+1)
[Position.paper,Characteristics.paper]=ode45(@(L,y) myODE(L,y,PAR.AREA.CONV,PAR.AREA.COND,PAR.HEATTRANSF.PAPERAIR,PAR.MASSTRANSF.PAPERAIR,PAR.MASSFIBER.P,PAR.TEMP.STEAM_CYL,PAR.MOLARWEIGHT.WATER,PAR.SPEED.PAPERMACHINE,PAR.GASCONSTANT,PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES, PAR.DIAMETER.CYL, PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL, PAR.HEATTRANSF.CYLSHEET_REF,PAR.DENSITY.DRYPAPER,PAR.DENSITY.WATER,PAR.GRAM.PAPER_DRY,PAR.THERMCONDUCTIVITY.DRYPAPER,PAR.SPECIFICHEAT.FIBER,PAR.SPECIFICHEAT.WATER,PAR.SPECIFICHEAT.VAPOR,PAR.TEMP.AIR_AFTER_STEAMHEATING,PAR.PRESSURE.ATMOSPHERE,PAR.PARTIALPRESSURE.VAPOR_HOOD,densityair(PAR.TEMP.AIR_AFTER_STEAMHEATING),PAR.SPECIFICHEAT.AIR,PAR.PRANDTL.AIR,PAR.SCHMIDT.AIR),PAR.POSITION_IN_PAPERMACHINE(k:k+1),PAR.CONDITIONS.PAPER_PRE); PAR.CONDITIONS.PAPER_PRE=Characteristics.paper(end,:); % Set in B: PAR.CONDITIONS.PAPER_PRE=[PAR.HUM.PAPER_PRE,PAR.TEMP.PAPER_PRE]; and in Y: PAR.HUM.PAPER_PRE=PAR.HUM.PAPER_PRE+x(1)*(PAR.HUM.PAPER_PRE_Mechanicaldryingmeasure-PAR.HUM.PAPER_PRE) & PAR.TEMP.PAPER_PRE=PAR.TEMP.PAPER_PRE+x(2)*(PAR.TEMP.PAPER_PRE_Steamboxmeasure-PAR.HUM.PAPER_PRE);
elseif k>=(PAR.CYLNUM.PRE*2+1) & k<((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1)
[Position.paper,Characteristics.paper]=ode45(@(L,y) myODE(L,y,PAR.AREA.CONV,PAR.AREA.COND,PAR.HEATTRANSF.PAPERAIR,PAR.MASSTRANSF.PAPERAIR,PAR.MASSFIBER.P,PAR.TEMP.STEAM_CYL,PAR.MOLARWEIGHT.WATER,PAR.SPEED.PAPERMACHINE,PAR.GASCONSTANT,PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES, PAR.DIAMETER.CYL, PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL, PAR.HEATTRANSF.CYLSHEET_REF,PAR.DENSITY.DRYPAPER,PAR.DENSITY.WATER,PAR.GRAM.PAPER_DRY,PAR.THERMCONDUCTIVITY.DRYPAPER,PAR.SPECIFICHEAT.FIBER,PAR.SPECIFICHEAT.WATER,PAR.SPECIFICHEAT.VAPOR,PAR.TEMP.AIR_AFTER_STEAMHEATING,PAR.PRESSURE.ATMOSPHERE,PAR.PARTIALPRESSURE.VAPOR_HOOD,densityair(PAR.TEMP.AIR_AFTER_STEAMHEATING),PAR.SPECIFICHEAT.AIR,PAR.PRANDTL.AIR,PAR.SCHMIDT.AIR),PAR.POSITION_IN_PAPERMACHINE(k:k+1),PAR.CONDITIONS.PAPER_POST); PAR.CONDITIONS.PAPER_POST=Characteristics.paper(end,:); % Set in B: PAR.CONDITIONS.PAPER_POST=[PAR.HUM.PAPER_POST,PAR.TEMP.PAPER_POST] and in Y: PAR.HUM.PAPER_POST=PAR.HUM.PAPER_POST+x(2)*(PAR.HUM.PAPER_POST_StarchMeasure-PAR.HUM.PAPER_POST);
else
[Position.paper,Characteristics.paper]=ode45(@(L,y) myODE(L,y,PAR.AREA.CONV,PAR.AREA.COND,PAR.HEATTRANSF.PAPERAIR,PAR.MASSTRANSF.PAPERAIR,PAR.MASSFIBER.P,PAR.TEMP.STEAM_CYL,PAR.MOLARWEIGHT.WATER,PAR.SPEED.PAPERMACHINE,PAR.GASCONSTANT,PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES, PAR.DIAMETER.CYL, PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL, PAR.HEATTRANSF.CYLSHEET_REF,PAR.DENSITY.DRYPAPER,PAR.DENSITY.WATER,PAR.GRAM.PAPER_DRY,PAR.THERMCONDUCTIVITY.DRYPAPER,PAR.SPECIFICHEAT.FIBER,PAR.SPECIFICHEAT.WATER,PAR.SPECIFICHEAT.VAPOR,PAR.TEMP.AIR_AFTER_STEAMHEATING,PAR.PRESSURE.ATMOSPHERE,PAR.PARTIALPRESSURE.VAPOR_HOOD,densityair(PAR.TEMP.AIR_AFTER_STEAMHEATING),PAR.SPECIFICHEAT.AIR,PAR.PRANDTL.AIR,PAR.SCHMIDT.AIR),PAR.POSITION_IN_PAPERMACHINE(k:k+1),PAR.CONDITIONS.PAPER_COAT); PAR.CONDITIONS.PAPER_COAT=Characteristics.paper(end,:); % Set in B: PAR.CONDITIONS.PAPER_COAT=[PAR.HUM.PAPER_COAT_CYL,PAR.TEMP.PAPER_COAT]; if PAR.IRDRYER.SWITCH==1; PAR.CONDITIONS.PAPER_COAT(2)=PAR.IRDRYER.TEMP; elseif PAR.IMPDRYER.SWITCH==1; PAR.CONDITIONS.PAPER_COAT(2)=PAR.IMPDRYER.TEMP; end
end
% Plot supporting coefficient
if k<(PAR.CYLNUM.PRE*2+1)
Support.coeffplot=1+Position.paper/(PAR.LENGTH.FREE_ALL(k)+PAR.LENGTH.COND_ALL(k));
elseif k>=(PAR.CYLNUM.PRE*2+1) & k<((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1)
Support.coeffplot=1+PAR.CYLNUM.PRE+(Position.paper-(sum(PAR.LENGTH.COND_PRE)+sum(PAR.LENGTH.FREE_PRE)))/(PAR.LENGTH.FREE_ALL(k)+PAR.LENGTH.COND_ALL(k));
else
Support.coeffplot=1+PAR.CYLNUM.PRE+PAR.CYLNUM.POST+(Position.paper-(sum(PAR.LENGTH.COND_PRE)+sum(PAR.LENGTH.COND_POST)+sum(PAR.LENGTH.FREE_PRE)+sum(PAR.LENGTH.FREE_POST)))/(PAR.LENGTH.FREE_ALL(k)+PAR.LENGTH.COND_ALL(k));
end
% Value of u and Tp at beginning of a cylinder&no-cylinder section
Characteristics.paper_begsection=Characteristics.paper(end-40,:);
% Differential of u for Balance on air;
if k<(PAR.CYLNUM.PRE*2+1)
Support.differentialu=PAR.CONDITIONS.PAPER_PRE(:,1)-Characteristics.paper_begsection(:,1);
elseif k>=(PAR.CYLNUM.PRE*2+1) & k<((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1)
Support.differentialu=PAR.CONDITIONS.PAPER_POST(:,1)-Characteristics.paper_begsection(:,1);
else
Support.differentialu=PAR.CONDITIONS.PAPER_COAT(:,1)-Characteristics.paper_begsection(:,1);
end
Humidity.air_f=-Support.differentialu*PAR.GRAM.PAPER_DRY*PAR.SPEED.PAPERMACHINE*PAR.WIDTH.PAPER/PAR.MASSFLOW.AIR_PERZONE+PAR.HUM.AIR_OUTSIDE;
% Heat flow/cylinder to paper & air
if rem(k,2)==0; Heatflow.steamair=0; Heatflow.steampaper=0;
elseif k<PAR.CYLNUM.PRE*2+1 & rem(k,4)==3 & PAR.CONFIG.CYL(k)==1 & PAR.CONFIG.FIRSTCYL(1)==1;Heatflow.steamair=0; Heatflow.steampaper=0;
elseif k<PAR.CYLNUM.PRE*2+1 & rem(k,4)==1 & PAR.CONFIG.CYL(k)==1 & PAR.CONFIG.FIRSTCYL(1)==0; Heatflow.steamair=0; Heatflow.steampaper=0;
elseif k>=(PAR.CYLNUM.PRE*2+1) & k<((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1) & rem((k-PAR.CYLNUM.PRE*2),4)==3 & PAR.CONFIG.CYL(k)==1 & PAR.CONFIG.FIRSTCYL(2)==1;Heatflow.steamair=0; Heatflow.steampaper=0;
elseif k>=(PAR.CYLNUM.PRE*2+1) & k<((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1) & rem((k-PAR.CYLNUM.PRE*2),4)==1 & PAR.CONFIG.CYL(k)==1 & PAR.CONFIG.FIRSTCYL(2)==0;Heatflow.steamair=0; Heatflow.steampaper=0;
elseif k>((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1) & rem((k-(PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2),4)==3 & PAR.CONFIG.CYL(k)==1 & PAR.CONFIG.FIRSTCYL(3)==1;Heatflow.steamair=0; Heatflow.steampaper=0;
elseif k>((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1) & rem((k-(PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2),4)==1 & PAR.CONFIG.CYL(k)==1 & PAR.CONFIG.FIRSTCYL(3)==0;Heatflow.steamair=0; Heatflow.steampaper=0;
elseif k<PAR.CYLNUM.PRE*2+1
Heatflow.steampaper=0.001*heatTransfCoeffSteamtoPaper(Characteristics.paper(1),PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES,PAR.DIAMETER.CYL,PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL,PAR.HEATTRANSF.CYLSHEET_REF,PAR.DENSITY.DRYPAPER,PAR.DENSITY.WATER,PAR.GRAM.PAPER_DRY,PAR.THERMCONDUCTIVITY.DRYPAPER,thermalconductivitywater(Characteristics.paper(2)))*(PAR.TEMP.STEAM_CYL-(PAR.CONDITIONS.PAPER_PRE(:,2)+Characteristics.paper_begsection(:,2))/2)*PAR.AREA.CONV; % Heat flow from cylinder to paper in kJ/s (kW)
Heatflow.steamair=0.001*heatTransfCoeffSteamtoAir(PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES,PAR.DIAMETER.CYL,PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL,PAR.HEATTRANSF.CYLAIR)*(PAR.TEMP.STEAM_CYL-PAR.TEMP.AIR_AFTER_STEAMHEATING)*(PAR.AREA.CYL_NONCOVERED+pi*(PAR.DIAMETER.CYL/2)^2); % Heat flow from cylinder to air in kJ/s
elseif k>=(PAR.CYLNUM.PRE*2+1) & k<((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1)
Heatflow.steampaper=0.001*heatTransfCoeffSteamtoPaper(Characteristics.paper(1),PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES,PAR.DIAMETER.CYL,PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL,PAR.HEATTRANSF.CYLSHEET_REF,PAR.DENSITY.DRYPAPER,PAR.DENSITY.WATER,PAR.GRAM.PAPER_DRY,PAR.THERMCONDUCTIVITY.DRYPAPER,thermalconductivitywater(Characteristics.paper(2)))*(PAR.TEMP.STEAM_CYL-(PAR.CONDITIONS.PAPER_POST(:,2)+Characteristics.paper_begsection(:,2))/2)*PAR.AREA.CONV; % Heat flow from cylinder to paper in kJ/s
Heatflow.steamair=0.001*heatTransfCoeffSteamtoAir(PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES,PAR.DIAMETER.CYL,PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL,PAR.HEATTRANSF.CYLAIR)*(PAR.TEMP.STEAM_CYL-PAR.TEMP.AIR_AFTER_STEAMHEATING)*(PAR.AREA.CYL_NONCOVERED+pi*(PAR.DIAMETER.CYL/2)^2); % Heat flow from cylinder to air in kJ/s
elseif k>((PAR.CYLNUM.PRE+PAR.CYLNUM.POST)*2+1)
Heatflow.steampaper=0.001*heatTransfCoeffSteamtoPaper(Characteristics.paper(1),PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES,PAR.DIAMETER.CYL,PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL,PAR.HEATTRANSF.CYLSHEET_REF,PAR.DENSITY.DRYPAPER,PAR.DENSITY.WATER,PAR.GRAM.PAPER_DRY,PAR.THERMCONDUCTIVITY.DRYPAPER,thermalconductivitywater(Characteristics.paper(2)))*(PAR.TEMP.STEAM_CYL-(PAR.CONDITIONS.PAPER_COAT(:,2)+Characteristics.paper_begsection(:,2))/2)*PAR.AREA.CONV; % Heat flow from cylinder to paper in kJ/s
Heatflow.steamair=0.001*heatTransfCoeffSteamtoAir(PAR.ANGLE,PAR.HEATTRANSF.CONDENSATES,PAR.DIAMETER.CYL,PAR.THICKNESS.IRONSHELL,PAR.THERMCONDUCTIVITY.IRONSHELL,PAR.HEATTRANSF.CYLAIR)*(PAR.TEMP.STEAM_CYL-PAR.TEMP.AIR_AFTER_STEAMHEATING)*(PAR.AREA.CYL_NONCOVERED+pi*(PAR.DIAMETER.CYL/2)^2); % Heat flow from cylinder to air in kJ/s
end
if rem(k,2)~=0 & PAR.PRESSURE.STEAM_CYL_ALL(k)==0; Heatflow.steamair=0; Heatflow.steampaper=0;end
Support.Phi= 1-exp(-(47.58*Characteristics.paper(1)^1.877+0.10085*(Characteristics.paper(2))*Characteristics.paper(1)^1.0585));
Support.DHevap = (PAR.GASCONSTANT/PAR.MOLARWEIGHT.WATER)*0.10085*(Characteristics.paper(1)^1.0585)*((Characteristics.paper(2)+273.15)^2)*(1-Support.Phi)/Support.Phi+2501-2.3237*Characteristics.paper(2); % in kJ/kg water
Temperature.air_f=(PAR.MASSFLOW.AIR_PERZONE*Entha(PAR.TEMP.AIR_AFTER_STEAMHEATING,PAR.HUM.AIR_OUTSIDE,PAR.SPECIFICHEAT.AIR,PAR.SPECIFICHEAT.VAPOR,Latentheatvaporization(PAR.TEMP.AIR_AFTER_STEAMHEATING))-Support.DHevap*Support.differentialu*PAR.GRAM.PAPER_DRY*PAR.SPEED.PAPERMACHINE*PAR.WIDTH.PAPER+Heatflow.steamair-PAR.MASSFLOW.AIR_PERZONE*Latentheatvaporization(PAR.TEMP.AIR_AFTER_STEAMHEATING)*Humidity.air_f)/(PAR.MASSFLOW.AIR_PERZONE*(PAR.SPECIFICHEAT.AIR+PAR.SPECIFICHEAT.VAPOR*Humidity.air_f));
if Temperature.air_f<0;Temperature.air_f=0;end
%%% Formula taken from a paper
Temperature.air2_f=0.5*PAR.TEMP.AIR_AFTER_STEAMHEATING+(1-0.5)*Characteristics.paper_begsection(2);
Position.all=[Position.all;Position.paper];Characteristics.paper_all=[Characteristics.paper_all;Characteristics.paper];PAR.CONDITIONS.PAPER_PRE_ALL=[PAR.CONDITIONS.PAPER_PRE_ALL;PAR.CONDITIONS.PAPER_PRE];PAR.CONDITIONS.PAPER_POST_ALL=[PAR.CONDITIONS.PAPER_POST_ALL;PAR.CONDITIONS.PAPER_POST];PAR.CONDITIONS.PAPER_COAT_ALL=[PAR.CONDITIONS.PAPER_COAT_ALL;PAR.CONDITIONS.PAPER_COAT];Characteristics.paper_begsection_all=[Characteristics.paper_begsection_all;Characteristics.paper_begsection];Heatflow.steampaper_all=[Heatflow.steampaper_all;Heatflow.steampaper];Heatflow.steamair_all=[Heatflow.steamair_all;Heatflow.steamair];Humidity.air_f_all=[Humidity.air_f_all;Humidity.air_f];Support.differentialua=[Support.differentialua;Support.differentialu];Temperature.air_f_all=[Temperature.air_f_all;Temperature.air_f];Temperature.air2_f_all=[Temperature.air2_f_all;Temperature.air2_f];Support.coeffplot_tot=[Support.coeffplot_tot;Support.coeffplot];
end
% keeping only every second value of:
PAR.ENTH.STEAM_CYL_ALL(2:2:end)=[];PAR.ENTH.COND_CYL_ALL(2:2:end)=[];Heatflow.steamair_all(2:2:end)=[];Heatflow.steampaper_all(2:2:end)=[];
Massflow.steam_cyl_all=3.6*(Heatflow.steamair_all+Heatflow.steampaper_all)./((PAR.ENTH.STEAM_CYL_ALL'-PAR.ENTH.COND_CYL_ALL').*(1-PAR.BLOWTHROUGH_COEFF_CYL));
if PAR.STEAMGROUPS.EMPTYCYLNUM~=0
for i=1:numel(PAR.STEAMGROUPS.EMPTYCYLNUM)
k=PAR.STEAMGROUPS.EMPTYCYLNUM(i);
Massflow.steam_cyl_all(k)=0;
end
end
Massflow.steam_cyltot=sum(Massflow.steam_cyl_all); % total steam consumption for cylinders in t steam/h
Heatflow.steampapertot=sum(Heatflow.steampaper_all);
Heatflow.steamairtot=sum(Heatflow.steamair_all);
DemandSteamSpec.cyl_all=Massflow.steam_cyl_all/PAR.PRODRATE.PAPER; % specific steam consumption/cylinder in kg steam/kg paper
DemandSteamSpec.cyltot=sum(DemandSteamSpec.cyl_all); % total cylinder specific steam consumption in kg steam/kg paper
EnergyFlowSpec.steam_cyl_all_kJ=DemandSteamSpec.cyl_all.*PAR.ENTH.STEAM_CYL_ALL; % specific Energy consumption/cylinder in kJ/kg paper
EnergyFlowSpec.steam_cyltot_kJ=sum(EnergyFlowSpec.steam_cyl_all_kJ); % total cylinder specific Energy consumption in kJ/kg paper
And this is the optimization problem:
clearvars; clear; addpath Functions;
fun=@(x)Investcosts(x);
x0 = [1 1]; % Start point (row vector)
A=[]; % Equality constraint
b=[]; % Equality constraint
Aeq=[]; % Inequality constraint
beq=[]; % Equality constraint
lb=[0 0]; % lower bound for x
ub=[1 1]; % upper bound for x
options = optimoptions('patternsearch','ScaleMesh','off','TolMesh',0.9);
[x,fval,exitflag,output] = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,@(x)nonlcon(x),options);
function f=Investcosts(x)
A = 2;
B = 3;
f = A*x(1)+B*x(2);
end
function [CO2Emissionsyear,ceq]=nonlcon(x)
run ADatafromExcel; run BDatadefinition;
PAR.HUM.PAPER_PRE_Mechanicaldryingmeasure=PAR.HUM.PAPER_PRE_A;
PAR.HUM.PAPER_PRE=PAR.HUM.PAPER_PRE+x(1)*(PAR.HUM.PAPER_PRE_Mechanicaldryingmeasure-PAR.HUM.PAPER_PRE);
PAR.TEMP.PAPER_PRE_Steamboxmeasure=PAR.TEMP.PAPER_PRE_A ;
PAR.TEMP.PAPER_PRE=PAR.TEMP.PAPER_PRE+x(2)*(PAR.TEMP.PAPER_PRE_Steamboxmeasure-PAR.HUM.PAPER_PRE);
run CSolveODE;
CO2Emissionsyear=Heatflow.steamairtot*24*365/1000-110;
ceq=[];
end
1 Kommentar
Allen
am 21 Jan. 2020
Though you are not using && or ||, you do have a & in a few of your if statements. The difference between the two is that for A & B, both A and B are evaluated, while for A && B, B is only evaluated when A is true. When using if-statements to evaluate multiple conditions, you need to be certain that each conditional statement is return a scalar and not a vector or array. For example:
a = [1 2 3 4 5];
b = 10;
if a>2 && b==10
% a>5 returns a logical array >> [0 0 1 1 1]
% This can create the error that you are seeing and you might want to consider
% changing to something more along the following:
% any(a>5) OR all(a>5)
end
Akzeptierte Antwort
Alice Ye
am 10 Mär. 2020
One thing you can try is to see if any of the constraints or parts of the function are evaluating to Inf or NaN
There might also be an error message that popus up in psAugConverged:
% fmincon enocntered NaN or Inf and could not continue; error here
if ~isempty(infMessage) && strmatch('optimlib:optimfcnchk',infMessage)
error(message('globaloptim:psAugConverged:NaNFval'));
0 Kommentare
Weitere Antworten (2)
Fangjun Jiang
am 21 Jan. 2020
Bearbeitet: Fangjun Jiang
am 10 Mär. 2020
this line
if ~isempty(infMessage) && strmatch('optimlib:optimfcnchk',infMessage)
when strmatch() returns empty [], the error message will appear
~isempty('abc') && strmatch('abc',{'a','b','c'})
Or, strmatch could return a vector
>> strmatch('a',char('a','a','a'))
ans =
1
2
3
end
0 Kommentare
Steven Lord
am 21 Jan. 2020
Can you check to confirm that you haven't written your own functions named isempty, strmatch, or not that are shadowing the functions by those names included in MATLAB? Check this using the which function.
which -all isempty
which -all strmatch
which -all not
For each of these, you can most likely ignore any lines in the output that end with "% <some class name> method". You can also ignore the strmatch.m file in the toolbox\matlab\strfun subdirectory under matlabroot. If you see any others, can you list them?
2 Kommentare
Fangjun Jiang
am 21 Jan. 2020
Bearbeitet: Fangjun Jiang
am 21 Jan. 2020
when strmatch() returns empty [], the error message will appear
~isempty('abc') && strmatch('abc',{'a','b','c'})
Or, strmatch could return a vector
>> strmatch('a',char('a','a','a'))
ans =
1
2
3
Siehe auch
Kategorien
Mehr zu Introduction to Installation and Licensing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!