how can I pass parameters for ode15i?

조회 수: 3 (최근 30일)
Tadele
Tadele 2023년 2월 14일
이동: Torsten 2023년 2월 14일
Dear experts,
Can you please help on passing parameter for ode15i
exmple code
function dxdz = MS_AA_imp(z,x,xp, x_p, N_tot, Z)
TempK = 25 + 273.15; % Temp in Kelvin
Faraday = 96485.336; % Faraday constant [C/mol]
R_id = 8.314; % R constant [J/(K mol)]
VM_1 = 1.8e-5; % AA molar volume of lysine [m3/mol] ---converted to m3--which was 18 cm3/mol
VM_2 = 1.57e-5; % Na molar volume [m3/mol] * Calculated from rS
VM_3 = 4.47e-6; % Cl molar volume [m3/mol] * calcualted form rS
VM_4 = 1.8e-5; % Water molar volume [m3/mol]
D_24 = 1.33E-9; % D24 value under diluted conditions [m^2/s]
D_34 = 2.03E-9; % D34 value under diluted conditions [m^2/s]
h=9.8;
hydration= x(1)/((x(1))*(1-x(1)*h)*(R_id*TempK));
CT = 1/(x(1)*VM_1 + x(2)*VM_2 + x(3)*VM_3 + x(4)*VM_4);
D_14 =10e-9 *(0.665-0.393*x(1))/(1+x(1)* (h/(1-x(1)* h)));
IStr = 0.5* (Z(2)^2 * x(2)/(VM_2 *1000) + Z(3)^2 * x(3)/(VM_3 *1000));
D_23 = ((D_24 + D_34)/2 * IStr ^(0.55) / (abs((Z(2)) * (Z(3)))^(2.3)));
N_1 = x_p(1) * N_tot;
N_2 = x_p(2) * N_tot;
N_3 = x_p(3) * N_tot;
N_4 = (1-sum(x_p)) * N_tot;
%equations to be solved
dxdz = [hydration * xp(1) + x(1) * Z(1) * Faraday / (R_id .* TempK)*xp(5) - (N_4 * x(1) - N_1* x(4))/(D_14 * CT);
xp(2) + x(2) * Z(2) * Faraday*xp(5) / ( R_id * TempK) - (N_3 * x(2) - N_2 * x(3))/ (D_23*CT) - (N_4 * x(2) - N_2 * x(4))/ (D_24 *CT);
xp(3) + x(3) * Z(3) * Faraday*xp(5) / ( R_id * TempK) - (N_2 * x(3) - N_3 * x(2))/ (D_23*CT) - (N_4 * x(3) - N_3 * x(4))/ (D_34* CT); %D_32V replaced with D_
x(1) + x(2) + x(3) + x(4) - 1;
Z(1) * x(1) + Z(2)* x(2) + Z(3) * x(3)];
end
I want to pass parameters
x_p, N_tot, Z % as xp_guess_MS, N_tot and Z
for ode15i solver as I tried below which shows me error when I change the t span. Can you please help cheking how I pass those parameters for the solver? and is the ode15i procidure i followed correct?
VM_1 = 1.8e-5; % AA molar volume of lysine [m3/mol] ---converted to m3--which was 18 cm3/mol
VM_2 = 1.57e-5; % Na molar volume [m3/mol] * Calculated from rS
VM_3 = 4.47e-6; % Cl molar volume [m3/mol] * calcualted form rS
VM_4 = 1.8e-5; % Water molar volume [m3/mol]
D_24 = 1.33E-9; % D24 value under diluted conditions [m^2/s]
Z=[-1 1 -1];
z_pol=1.23e-5;
x_p_guess=[0.000147 0.000147 0.000147]
x_p_guess_MS = [x_p_guess 1- sum(x_p_guess)];
Jv=3.69e-6;
Cp_guess_tot = 1/ (sum([x_p_guess (1-sum(x_p_guess))].*[VM_1 VM_2 VM_3 VM_4]))
N_tot =Jv*Cp_guess_tot;
phi_start = [0.0001457 0.000179 0.000179 0.99]
[y0, yp0] = decic(@MS_AA_imp, 0, [phi_start 0], [0 0 0 0 0], [1 1 0 0 0], [],[], x_p_guess_MS, N_tot, Z);
[zsol_MS, ysol_MS] = ode15i(@(z,x,xp)MS_AA_imp(z,x,xp,x_p_guess_MS, N_tot, Z), [0 z_pol], y0, yp0);
C_surf = ysol_MS(end,:)
plot(zsol_MS,ysol_MS(:,1))
Thank you so much in advance!

답변 (1개)

Torsten
Torsten 2023년 2월 14일
이동: Torsten 2023년 2월 14일
The code you posted does not error.
VM_1 = 1.8e-5; % AA molar volume of lysine [m3/mol] ---converted to m3--which was 18 cm3/mol
VM_2 = 1.57e-5; % Na molar volume [m3/mol] * Calculated from rS
VM_3 = 4.47e-6; % Cl molar volume [m3/mol] * calcualted form rS
VM_4 = 1.8e-5; % Water molar volume [m3/mol]
D_24 = 1.33E-9; % D24 value under diluted conditions [m^2/s]
Z=[-1 1 -1];
z_pol=1.23e-5;
x_p_guess=[0.000147 0.000147 0.000147];
x_p_guess_MS = [x_p_guess 1- sum(x_p_guess)];
Jv=3.69e-6;
Cp_guess_tot = 1/ (sum([x_p_guess (1-sum(x_p_guess))].*[VM_1 VM_2 VM_3 VM_4]));
N_tot =Jv*Cp_guess_tot;
phi_start = [0.0001457 0.000179 0.000179 0.99];
[y0, yp0] = decic(@MS_AA_imp, 0, [phi_start 0], [0 0 0 0 0], [1 1 0 0 0], [],[], x_p_guess_MS, N_tot, Z);
[zsol_MS, ysol_MS] = ode15i(@(z,x,xp)MS_AA_imp(z,x,xp,x_p_guess_MS, N_tot, Z), [0 z_pol], y0, yp0);
C_surf = ysol_MS(end,:);
plot(zsol_MS,ysol_MS(:,1))
function dxdz = MS_AA_imp(z,x,xp, x_p, N_tot, Z)
TempK = 25 + 273.15; % Temp in Kelvin
Faraday = 96485.336; % Faraday constant [C/mol]
R_id = 8.314; % R constant [J/(K mol)]
VM_1 = 1.8e-5; % AA molar volume of lysine [m3/mol] ---converted to m3--which was 18 cm3/mol
VM_2 = 1.57e-5; % Na molar volume [m3/mol] * Calculated from rS
VM_3 = 4.47e-6; % Cl molar volume [m3/mol] * calcualted form rS
VM_4 = 1.8e-5; % Water molar volume [m3/mol]
D_24 = 1.33E-9; % D24 value under diluted conditions [m^2/s]
D_34 = 2.03E-9; % D34 value under diluted conditions [m^2/s]
h=9.8;
hydration= x(1)/((x(1))*(1-x(1)*h)*(R_id*TempK));
CT = 1/(x(1)*VM_1 + x(2)*VM_2 + x(3)*VM_3 + x(4)*VM_4);
D_14 =10e-9 *(0.665-0.393*x(1))/(1+x(1)* (h/(1-x(1)* h)));
IStr = 0.5* (Z(2)^2 * x(2)/(VM_2 *1000) + Z(3)^2 * x(3)/(VM_3 *1000));
D_23 = ((D_24 + D_34)/2 * IStr ^(0.55) / (abs((Z(2)) * (Z(3)))^(2.3)));
N_1 = x_p(1) * N_tot;
N_2 = x_p(2) * N_tot;
N_3 = x_p(3) * N_tot;
N_4 = (1-sum(x_p)) * N_tot;
%equations to be solved
dxdz = [hydration * xp(1) + x(1) * Z(1) * Faraday / (R_id .* TempK)*xp(5) - (N_4 * x(1) - N_1* x(4))/(D_14 * CT);
xp(2) + x(2) * Z(2) * Faraday*xp(5) / ( R_id * TempK) - (N_3 * x(2) - N_2 * x(3))/ (D_23*CT) - (N_4 * x(2) - N_2 * x(4))/ (D_24 *CT);
xp(3) + x(3) * Z(3) * Faraday*xp(5) / ( R_id * TempK) - (N_2 * x(3) - N_3 * x(2))/ (D_23*CT) - (N_4 * x(3) - N_3 * x(4))/ (D_34* CT); %D_32V replaced with D_
x(1) + x(2) + x(3) + x(4) - 1;
Z(1) * x(1) + Z(2)* x(2) + Z(3) * x(3)];
end

카테고리

Help CenterFile Exchange에서 Power and Energy Systems에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by