Effacer les filtres
Effacer les filtres

why cant I see any lines on the graph

3 vues (au cours des 30 derniers jours)
Kasper Wallenius
Kasper Wallenius le 28 Fév 2024
Réponse apportée : Sibghat le 28 Fév 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

Réponses (2)

Chunru
Chunru le 28 Fév 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 le 28 Fév 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

Catégories

En savoir plus sur Nonlinear Analysis dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by