Multiple Inputs, Multiple Outputs
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
JR
el 24 de Abr. de 2020
Comentada: Mehmed Saad
el 24 de Abr. de 2020
I have the following code:
f=@rate;
Y0 = [40; 125; 100; 250; 1500; 300; 0; 2; 0.5; 30; 8; 10; 10];
function output=rate(Y0)
%Y0 = [SI; SS; XI ; XS; XB_H ; XB_A ; XP; SO; SNO ; SNH ;SND ; XND ; S_ALK ];
%Y0 = [40; 125; 100; 250; 1500; 300; 0; 2; 0.5; 30; 8; 10; 10];
%j=Process
%i= component
%SI=40;
%SS=125;
%XI=100;
%XS=250;
%XB_H=1500;
%XB_A=300;
%XP=0;
%SO=2;
%SNO=0.5;
%SNH=30;
%SND=8;
%XND=10;
%S_ALK=10;
%%Process rate expression constants at 20C
mu_H=6; %1/day
mu_A=0.8; %1/day
KS=20; %gCOD/m^3
KNH=1; %gNH2-N/m^3
K_OH=0.2; %gO2/m^3
K_OA=0.4; %gO2/m^3
KNO=0.5; %gNO3-N/m^3
ng=0.8; %dimensionless
bH=0.62; %1/day
bA=0.2; %1/day
ka=0.08; %m^3*COD(g*day)^-1
kH=3; %g slowly biodegradable COD (g cell COD*day)^-1
KX=0.03; %g slowly biodegradable COD(g cell COD)^-1
nH=0.4; %dimensionless
%%Constants for coefficients at 20C
YH=0.67; %g cell COD formed (g N oxidized)^-1
iXB=0.086; %g N(g COD)^-1) in biomass
iXP=0.06; %g N(g COD)^-1 in endogenous mass
YA=0.24; %g cell COD formed (g N oxidized)^-1
fp=0.08; %dimensionless
P1= (mu_H)*(SS/(KS+SS))*(SO/(K_OH+SO))*(XB_H);
P2= (mu_H)*(SS/(KS+SS))*(K_OH/(K_OH+SO))*(SNO/(KNO+SNO))*(ng*XB_H);
P3= (mu_A)*(SNH/(KNH+SNH))*(SO/(K_OA+SO))*(XB_A);
P4= (bH)*(XB_H);
P5= (bA)*(XB_A);
P6= (ka)*(SND)*(XB_H);
P7= (kH)*((XS/XB_H)/((KX)+(XS/XB_H)))*((SO/(K_OH+SO))+(nH)*(K_OH/(K_OH+SO))*(SNO/(KNO+SNO)))*(XB_H);
P8= P7*(XND/XS);
%r_SI=0;
%r_SS=((-1/YH)*P1)+((-1/YH)*P2)+(1*P7);
%r_XI=0;
%r_XS=((1-fp)*P4)+((1-fp)*P5)+(-1*P7);
%r_XB_H=(1*P1)+(1*P2)+(-1*P4);
%r_XB_A=(1*P3)+(-1*P5);
%r_XP=((fp)*(P4))+((fp)*(P5));
%r_SO=((-((1-YH)/(YH)))*P1)+((-((4.57-YA)/(YA)))*P3);
%r_SNO=((-((1-YH)/(2.86*YH)))*P2)+((1/YA)*P3);
%r_SNH=((-1*iXB)*(P1))+((-1*iXB)*(P2))+((-iXB-(1/YA))*P3)+(P6);
%r_SND=(-1*P6)+(P8);
%r_XND=((iXB-(fp*iXP))*(P4))+((iXB-(fp*iXP))*(P5))+(-1*P8);
%r_S_ALK=(((-iXB/14))*(P1))+((((1-YH)/(14*(2.86*YH)))-(iXB/14))*(P2))+((((-iXB/14))-(1/(7*YA)))*(P3))+((1/14)*(P6));
output=[0;
((-1/YH)*P1)+((-1/YH)*P2)+(1*P7);
0;
((1-fp)*P4)+((1-fp)*P5)+(-1*P7);
(1*P1)+(1*P2)+(-1*P4);
(1*P3)+(-1*P5);
((fp)*(P4))+((fp)*(P5));
((-((1-YH)/(YH)))*P1)+((-((4.57-YA)/(YA)))*P3);
((-((1-YH)/(2.86*YH)))*P2)+((1/YA)*P3);
((-1*iXB)*(P1))+((-1*iXB)*(P2))+((-iXB-(1/YA))*P3)+(P6);
(-1*P6)+(P8);
((iXB-(fp*iXP))*(P4))+((iXB-(fp*iXP))*(P5))+(-1*P8);
((-(iXB/14))*P1)+(((1-YH)/(14*(2.86*YH))-(iXB/14))*P2)+(((-(iXB/14))-(1/7*YA))*P3)+((1/14)*P6)];
end
All I want to do is input any column vector of 13 numerical values, have each of them be inputted in their respective equation, and I want MATLAB to tell me what the output values are. How do I do this? Thanks in advance.
0 comentarios
Respuesta aceptada
Mehmed Saad
el 24 de Abr. de 2020
Editada: Mehmed Saad
el 24 de Abr. de 2020
This is not a good coding approach
SI=Y0(1);
SS=Y0(2);
XI=Y0(3);
XS=Y0(4);
XB_H=Y0(5);
XB_A=Y0(6);
XP=Y0(7);
SO=Y0(8);
SNO=Y0(9);
SNH=Y0(10);
SND=Y0(11);
XND=Y0(12);
S_ALK=Y0(13);
or you can insert this in the start of function
tx={'SI'; 'SS'; 'XI' ; 'XS'; 'XB_H' ; 'XB_A' ; 'XP'; 'SO'; 'SNO' ; 'SNH' ;'SND' ; 'XND' ; 'S_ALK'};
for i=1:length(Y0)
feval(@()assignin('caller',tx{i},Y0(i)));
end
5 comentarios
Ameer Hamza
el 24 de Abr. de 2020
"good coding approach is to directly use variable Y"
Not always. Good coding approach is the one that makes your code easy to understand and debug. For example, If the OP is trying to implement a system of mathematical equations. It can be much more important to use consistent notation, then using an array. For example, consider following two codes. I am sure the first code is much more readable and easy to debug as compared to the second code.
Using the individual variable name:
eq1 = alpha + beta^3 + gamma/2 + eta;
eq2 = log(gamma) + sqrt(eta) + sin(alpha);
eq3 = exp(eta) - beta;
Using array:
eq1 = y(1) + y(2)^3 + y(3)/2 + y(4);
eq2 = log(y(3)) + sqrt(y(4)) + sin(y(1));
eq3 = exp(y(4)) - y(2);
Más respuestas (1)
Ameer Hamza
el 24 de Abr. de 2020
Create a file named rate.m and save the code of function in that file. The code of the function includes the lines between
function output=rate(Y0)
% function code
end
inside the function, uncomment these lines and write them like this
SI=Y0(1);
SS=Y0(2);
XI=Y0(3);
XS=Y0(4);
XB_H=Y0(5);
XB_A=Y0(6);
XP=Y0(7);
SO=Y0(8);
SNO=Y0(9);
SNH=Y0(10);
SND=Y0(11);
XND=Y0(12);
S_ALK=Y0(13);
Then call the function like this
Y0 = [40; 125; 100; 250; 1500; 300; 0; 2; 0.5; 30; 8; 10; 10];
out = rate(Y0);
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!