why cant I see any lines on the graph

2 views (last 30 days)
Kasper Wallenius
Kasper Wallenius on 28 Feb 2024
Answered: Sibghat on 28 Feb 2024
% 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

Answers (2)

Chunru
Chunru on 28 Feb 2024
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 on 28 Feb 2024
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

Categories

Find more on Nonlinear Analysis in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!