why cant I see any lines on the graph

조회 수: 1 (최근 30일)
Kasper Wallenius
Kasper Wallenius 2024년 2월 28일
답변: Sibghat 2024년 2월 28일
% Initialvillkor för koldioxid (C), väte (H), metan (M), vatten (W), och temperatur (T)
n0 = [0.2, 0.8, 0, 0, 373]; % Molandel för CO2 och H2, inget metan och vatten initialt, starttemperatur 373K
tauSpan = [0, 100]; % Rymdtidspann, exempelvärde
% Lös ODE
[tau, n] = ode45(@reactor, tauSpan, n0);
% Plotta koncentrationer
figure(1);
plot(tau, n(:,1), 'r-', 'DisplayName', 'CO2'); % Röd linje för CO2
hold on
plot(tau, n(:,2), 'g--', 'DisplayName', 'H2'); % Grön streckad linje för H2
hold on
plot(tau, n(:,3), 'b-.', 'DisplayName', 'CH4'); % Blå prickad linje för CH4
hold on
plot(tau, n(:,4), 'm:', 'DisplayName', 'H2O'); % Magenta prickad linje för H2O
hold on
xlabel('Rymdtid τ');
ylabel('Molandel');
legend();
title('Koncentrationsprofiler');
hold off;
% Plotta temperaturprofil
figure(2);
plot(tau, n(:,5), 'k-', 'DisplayName', 'Temperatur'); % Svart linje för temperatur
hold on
xlabel('Rymdtid τ');
ylabel('Temperatur (K)');
title('Temperaturprofil');
legend();
hold off
function dn_dtau = reactor(tau, n)
% Deklarera konstanter
k0 = 0.5e-4; % m^3/(mol s)
Ea = 50000; % J/mol
DeltaHr = -165000; % J/mol
cPrho0 = 32; % J/(m^3 K)
Tref = 400; % K
R = 8.314; % J/(mol K)
V0_prime = 1e-3; % m^3/s vid 293 K
UAVR = 45; % Exempelvärde för UA/VR
% Extrahera nuvarande tillstånd
CO2 = n(1);
H2 = n(2);
CH4 = n(3);
H2O = n(4);
T = n(5);
% Beräkna reaktionshastigheten
r = k0 * exp(-Ea / (R * (1/T - 1/Tref))) * CO2 * H2^4;
% Ämnesmängdbalanser
dCO2_dtau = -r;
dH2_dtau = -4 * r;
dCH4_dtau = r;
dH2O_dtau = 2 * r;
% Energibalans
dT_dtau = (DeltaHr * r - UAVR * (T - Tref)) / cPrho0 / V0_prime;
% Samla derivator
dn_dtau = [dCO2_dtau; dH2_dtau; dCH4_dtau; dH2O_dtau; dT_dtau];
end

답변 (2개)

Chunru
Chunru 2024년 2월 28일
It seems that the solution is not converging. Try setting an appropriate step size or other options to make it converging.
% Initialvillkor för koldioxid (C), väte (H), metan (M), vatten (W), och temperatur (T)
n0 = [0.2, 0.8, 0, 0, 373]; % Molandel för CO2 och H2, inget metan och vatten initialt, starttemperatur 373K
tauSpan = [0, 100]; % Rymdtidspann, exempelvärde
% Lös ODE
opts = odeset("InitialStep", 1e-5);
[tau, n] = ode45(@reactor, tauSpan, n0, opts);
n
n = 77×5
0.2000 0.8000 0 0 373.0000 0.2000 0.8000 0 0 373.0948 0.2000 0.8000 0 0 373.1892 0.2000 0.8000 0 0 373.2833 0.2000 0.8000 0 0 373.3770 0.2000 0.8000 0 0 373.8409 0.2000 0.8000 0 0 374.2967 0.2000 0.8000 0 0 374.7446 0.2000 0.8000 0 0 375.1847 0.2000 0.8000 0 0 377.2727
% Plotta koncentrationer
figure(1);
plot(tau, n(:,1), 'r-', 'DisplayName', 'CO2'); % Röd linje för CO2
hold on
plot(tau, n(:,2), 'g--', 'DisplayName', 'H2'); % Grön streckad linje för H2
hold on
plot(tau, n(:,3), 'b-.', 'DisplayName', 'CH4'); % Blå prickad linje för CH4
hold on
plot(tau, n(:,4), 'm:', 'DisplayName', 'H2O'); % Magenta prickad linje för H2O
hold on
xlabel('Rymdtid τ');
ylabel('Molandel');
legend();
title('Koncentrationsprofiler');
hold off;
% Plotta temperaturprofil
figure(2);
plot(tau, n(:,5), 'k-', 'DisplayName', 'Temperatur'); % Svart linje för temperatur
hold on
xlabel('Rymdtid τ');
ylabel('Temperatur (K)');
title('Temperaturprofil');
legend();
hold off
function dn_dtau = reactor(tau, n)
% Deklarera konstanter
k0 = 0.5e-4; % m^3/(mol s)
Ea = 50000; % J/mol
DeltaHr = -165000; % J/mol
cPrho0 = 32; % J/(m^3 K)
Tref = 400; % K
R = 8.314; % J/(mol K)
V0_prime = 1e-3; % m^3/s vid 293 K
UAVR = 45; % Exempelvärde för UA/VR
% Extrahera nuvarande tillstånd
CO2 = n(1);
H2 = n(2);
CH4 = n(3);
H2O = n(4);
T = n(5);
% Beräkna reaktionshastigheten
r = k0 * exp(-Ea / (R * (1/T - 1/Tref))) * CO2 * H2^4;
% Ämnesmängdbalanser
dCO2_dtau = -r;
dH2_dtau = -4 * r;
dCH4_dtau = r;
dH2O_dtau = 2 * r;
% Energibalans
dT_dtau = (DeltaHr * r - UAVR * (T - Tref)) / cPrho0 / V0_prime;
% Samla derivator
dn_dtau = [dCO2_dtau; dH2_dtau; dCH4_dtau; dH2O_dtau; dT_dtau];
end

Sibghat
Sibghat 2024년 2월 28일
In addition to the already provided solution by Chunru, you can also set the relative tolerance (RelTol) (here 1e-6 is used) and the absolute tolerance (AbsTol) (here it is set to 1e-9) to determine the desired accuracy.
% Initialvillkor för koldioxid (C), väte (H), metan (M), vatten (W), och temperatur (T)
n0 = [0.2, 0.8, 0, 0, 373]; % Molandel för CO2 och H2, inget metan och vatten initialt, starttemperatur 373K
tauSpan = [0, 100]; % Rymdtidspann, exempelvärde
% Set tolerances for the ODE solver
opts = odeset('RelTol', 1e-6, 'AbsTol', 1e-9);
% Lös ODE
[tau, n] = ode45(@reactor, tauSpan, n0, opts);
n
n = 117×5
0.2000 0.8000 0 0 373.0000 0.2000 0.8000 0 0 375.1911 0.2000 0.8000 0 0 377.2043 0.2000 0.8000 0 0 379.0541 0.2000 0.8000 0 0 380.7538 0.2000 0.8000 0 0 382.3157 0.2000 0.8000 0 0 383.7508 0.2000 0.8000 0 0 385.0693 0.2000 0.8000 0 0 386.2809 0.2000 0.8000 0 0 387.4993
% Plotta koncentrationer
figure(1);
plot(tau, n(:,1), 'r-', 'DisplayName', 'CO2'); % Röd linje för CO2
hold on
plot(tau, n(:,2), 'g--', 'DisplayName', 'H2'); % Grön streckad linje för H2
plot(tau, n(:,3), 'b-.', 'DisplayName', 'CH4'); % Blå prickad linje för CH4
plot(tau, n(:,4), 'm:', 'DisplayName', 'H2O'); % Magenta prickad linje för H2O
xlabel('Rymdtid τ');
ylabel('Molandel');
legend();
title('Koncentrationsprofiler');
hold off;
% Plotta temperaturprofil
figure(2);
plot(tau, n(:,5), 'k-', 'DisplayName', 'Temperatur'); % Svart linje för temperatur
xlabel('Rymdtid τ');
ylabel('Temperatur (K)');
title('Temperaturprofil');
legend();
function dn_dtau = reactor(tau, n)
% Deklarera konstanter
k0 = 0.5e-4; % m^3/(mol s)
Ea = 50000; % J/mol
DeltaHr = -165000; % J/mol
cPrho0 = 32; % J/(m^3 K)
Tref = 400; % K
R = 8.314; % J/(mol K)
V0_prime = 1e-3; % m^3/s vid 293 K
UAVR = 45; % Exempelvärde för UA/VR
% Extrahera nuvarande tillstånd
CO2 = n(1);
H2 = n(2);
CH4 = n(3);
H2O = n(4);
T = n(5);
% Beräkna reaktionshastigheten
r = k0 * exp(-Ea / (R * (1/T - 1/Tref))) * CO2 * H2^4;
% Ämnesmängdbalanser
dCO2_dtau = -r;
dH2_dtau = -4 * r;
dCH4_dtau = r;
dH2O_dtau = 2 * r;
% Energibalans
dT_dtau = (DeltaHr * r - UAVR * (T - Tref)) / cPrho0 / V0_prime;
% Samla derivator
dn_dtau = [dCO2_dtau; dH2_dtau; dCH4_dtau; dH2O_dtau; dT_dtau];
end

카테고리

Help CenterFile Exchange에서 Systems of Nonlinear Equations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by