Borrar filtros
Borrar filtros

Trying to use fminsearch but always says "Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 0-by-0"

2 visualizaciones (últimos 30 días)
Can someone help me please? :(
I always get the error: Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 0-by-0.
function yprima=balances(z,var);
%% Se crea un vector para almacenar las derivadas
yprima=zeros(4,1);
%% Se definen los parámetros globales
global A R Cpcat Cpmix M MWb MWp MWc n1 Tshell U eb AHr rhoc rhog wbo wpo wco wb wp wc T To t wcf
%% Se reasignan las variables
wb=var(1); % Masa de benceno
wp=var(2); % Masa de propileno
wc=var(3); % Masa de cumeno
T=var(4); % Temperatura
%% Ecuaciones auxiliares
k=3500*exp(-13.28/(R*T)); % Constante cinética
vel1=k*wb*wc; % Velocidad de reacción
velc=rhoc*(1-eb)*n1*vel1; % Velocidad del catalizador
%% Ecuaciones diferenciales
yprima(1)=(A/M)*(-eb*rhog*((wb-wbo)/t)-MWb*velc); % Balance de materia al benceno
yprima(2)=(A/M)*(-eb*rhog*((wp-wpo)/t)-MWp*velc); % Balance de materia al propileno
yprima(3)=(A/M)*(-eb*rhog*((wc-wco)/t)+MWc*velc); % Balance al cumeno
yprima(4)=((eb*Cpmix*rhog+(1-eb)*rhoc*Cpcat)*((T-To)/t)+pi*(U/A)*(Tshell-T)+velc*(-AHr))/(M/A*Cpmix); % Balance de energía
%273.15 es el To, ver que hago con eso porque está en 'resolucion' como
%variable inicial entonces ns
end
------------------------
% Se desea maximizar los beneficios obtenidos
function B=reactorcumeno(VAR);
%% Reasignación de variables de decisión
Z1=VAR(1); % Longitud del reactor (m)
T1=VAR(2); % Temperatura de la mezcla gaseosa(K)
%% Parámetros globales
% Se definen los parámetros que son globales en el problema.
global A R Cpcat Cpmix M MWb MWp MWc n1 Tshell U eb AHr rhoc rhog wbo wpo wco wb wp wc T To t wcf
%% Costes
% Cálculo de la amortización
i=0.07; % % Tasa de retorno del proyecto (7%)
n=12; % Duración de vida (años)
AP=i*(1+i)^n/((1+i)^n-1);
% Costes reactor
D=0.35;
Vreactor=(pi*Z1*D^2)/4; % Volumen del reactor (m3) (z=L)
Vreactorft=Vreactor*35.3147; % Volumen del reactor en ft^3 (unidades tabuladas)
Creactor=1000*(Z1/4)^0.81*(D/3)^1.05; % ****Ver si necesito despejar el diametro o lo q sea
CreactorA=Creactor*AP; % Costes anuales del reactor ($/año)
% Costes reactivos
CbencenoA=wb*0.987*365; % Costes anuales del benceno ($/año)
CpropilenoA=wp*1.133*365; % Costes anuales del propileno ($/año)
% Costes totales
Costes=CreactorA+CbencenoA+CpropilenoA; % Costes anuales totales ($/año)
%% Resolución del sistema de ecuaciones diferenciales
%x0=0; %conversion a la entrada del reactor 1
%[w1,R1]=ode45('balances',[0 W1],[x0 T1]);
%x1=R1(end,1); %resultado de la conversion de salida del reactor 1
[z1 R1]=ode45('balances',[0 Z1],[wbo wpo wco T1]); % R1: matriz de 4 columnas con las variables dependientes [wb wp wc T]
wcf=R1(end,3); % Resultado de la masa de cumeno a la salida
Ingresos=wcf*1.124*365;% Ingresos anuales ($/año)
%% Función objetivo
B=Ingresos-Costes; %$/año máximo
B=-B; %mínimo
end
---------------------
% Este script resuleve la optimización de la producción de cumento
clc;clear all;
% 1 - Definir que los parámetros del problema son globales:
global A R Cpcat Cpmix M MWb MWp MWc n1 Tshell U eb AHr rhoc rhog wbo wpo wco wb wp wc T To t wcf
R=8.314; % Cte. gases ideales (kJ/kmol·K)
A=7.065; % Área transversal interior (m2)
Cpcat=0.92878; % Calor específico del catalizador (kJ/kg·K)
Cpmix=0.988; % Calor específico de la mezcla (kJ/kg·K)
M=20; % Flujo másico (kg/s)
MWb=0.120; % Peso molecular del benceno (kg/kmol)
MWp=0.07811; % Peso molecular del propileno (kg/kmol)
MWc=0.04208; % Peso molecular del cumeno (kg/kmol)
n1=0.95; % Eficiencia de la reacción (-)
Tshell=458.5; %Temperatura de la carcasa del reactor (K)
U=0.065; % Coeficiente global de transferencia de calor (kW/m2·K)
eb=0.5; % Fracción porosa del lecho catalítico (-)
AHr=100018.02546; % Entalpía de la reacción (kJ/kg) *****dif uds nomenclatura y tabla valores*****
rhoc=943.618; % Densidad de pellets (gránulos) catalíticos (kg cat/m3 cat)
rhog=17.5; % Densidad de la fase gas (kg/m3)
wbo=0.727; % Fracción másica inicial del benceno
wpo=0.0909; % Fracción másica inicial del propileno
wco=0; % Fracción másica inicial del cumeno
t=365*24*3600; % Tiempo de operación (1 año) (s)
To=273.15;
%******************REVISAR BIEN TODOS LOS PARÁMETROS
% 2 - Definir valor inicial para optimizar de las variables decisión
Z01=0.1;
T01=273.15;
VAR0=[Z01 T01];
% 3 - Buscar el valor óptimo
[VARopt,fval,exitflag,output]=fminsearch('reactorcumeno',VAR0,optimset('Display','iter'))
% 4 - Imprimir resultado
fprintf('Longitud del reactor = %.2f h\n',VARopt(1))
fprintf('Temperatura del reactor = %2f L/h \n',VARopt(2))
fprintf('Cantidad de cumeno producida = %.2f h\n', wcf)
fprintf('Beneficios =%2f $/año\n', -fval)

Respuestas (1)

Dinesh
Dinesh el 27 de Abr. de 2023
Hi David!
I tried replicating the issue on my side. The problem is that 'CbencenoA' and 'CpropilenoA' are being wrongly updated which in turn is affecting the 'Costes' variable. The variable 'wb' and 'wp' are updated in the call 'ode45('balances')' and you are using these variables before this call happens.Thus, we are getting the error. Simple shifting of the lines will solve the issue. The correct function 'reactorcumeno' would be:
function B=reactorcumeno(VAR);
%% Reasignación de variables de decisión
Z1=VAR(1); % Longitud del reactor (m)
T1=VAR(2); % Temperatura de la mezcla gaseosa(K)
%% Parámetros globales
% Se definen los parámetros que son globales en el problema.
global A R Cpcat Cpmix M MWb MWp MWc n1 Tshell U eb AHr rhoc rhog wbo wpo wco wb wp wc T To t wcf
%% Costes
% Cálculo de la amortización
%Change here
[z1 R1]=ode45(@balances,[0 Z1],[wbo wpo wco T1]); % R1: matriz de 4 columnas con las variables dependientes [wb wp wc T]
i=0.07; % % Tasa de retorno del proyecto (7%)
n=12; % Duración de vida (años)
AP=i*(1+i)^n/((1+i)^n-1);
% Costes reactor
D=0.35;
Vreactor=(pi*Z1*D^2)/4; % Volumen del reactor (m3) (z=L)
Vreactorft=Vreactor*35.3147; % Volumen del reactor en ft^3 (unidades tabuladas)
Creactor=1000*(Z1/4)^0.81*(D/3)^1.05; % ****Ver si necesito despejar el diametro o lo q sea
CreactorA=Creactor*AP; % Costes anuales del reactor ($/año)
% Costes reactivos
CbencenoA=wb*0.987*365; % Costes anuales del benceno ($/año)
CpropilenoA=wp*1.133*365; % Costes anuales del propileno ($/año)
% Costes totales
Costes=CreactorA+CbencenoA+CpropilenoA; % Costes anuales totales ($/año)
wcf=R1(end,3); % Resultado de la masa de cumeno a la salida
Ingresos=wcf*1.124*365;% Ingresos anuales ($/año)
%% Función objetivo
B=Ingresos-Costes; %$/año máximo
B=-B; %mínimo
end
Hope this helps!

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!