Trying to make the plot of potency along Z that is a decaying exponential but it goes straight to zero

20 visualizaciones (últimos 30 días)
I tried altering values and at low values it gets similar to how it should be but with the real values it goes straight to zero.
I believe the problem may be in trying to add alpha_p and alpha_s to use in the integral but I am unsure whats wrong with it and how to fix.
clc;
clear;
% Parâmetros
lambdL = 1550e-9; % Comprimento de onda do laser
z = linspace(0, 10000, 1000); % Posições (m)
T = 25 * ones(size(z)); % Temperatura inicial
T(z >= 1500 & z <= 1600) = T(z >= 1500 & z <= 1600) + 25; % Degrau de temperatura
% Funções
alpha_as = @(z) 0.21 * z; % Exemplo de função para alpha_as
alpha_s = @(z) 0.216 * z; % Exemplo de função para alpha_s
alpha_p = @(z) 0.2 * z; % Exemplo de função para alpha_p
alpha_ras = @(z) z*0.2; % Exemplo de função para alpha_ras
B_as = 0.25; % Exemplo de constante
Ep0 = 10;
% Velocidade de grupo
V_g = 1.4682; % m/s
% Vetorizando o cálculo de eta_as
eta_as = (1/2) * alpha_ras(z) .* V_g * B_as; % Multiplicação elemento a elemento
% Inicializando o vetor de potência Pas
Pas = zeros(size(z));
% Cálculo da potência com decaimento exponencial
for i = 1:length(z)
% Função integrando
fun = @(u) (alpha_p(u) + alpha_as(u)); % Somatório de absorção
% Cálculo da integral numérica de 0 até z(i)
integral_value = integral(fun, 0, z(i));
% Verificar a integral e decaimento
% Modificar o decaimento para ser mais gradual
Pas(i) = Ep0 * eta_as(i) * exp(-0.1 * integral_value); % Fator de decaimento mais controlado
end
% Plotando o resultado
figure;
plot(z, Pas);
xlabel('Posição (m)');
ylabel('Potência \(P_{as}\)');
title('Perfil de \(P_{as}\) com Decaimento Exponencial Controlado');
grid on;

Respuestas (2)

Abhas
Abhas el 28 de Nov. de 2024 a las 15:43
The problem might be with how the exponential decay is being computed, especially if the integral values become too large, which can cause the exponential function to approach zero very quickly. We might need to adjust the decay factor to 0.001 instead of 0.1.
Here's an updated code to fix the issue:
clc;
clear;
% Parameters
lambdL = 1550e-9; % Wavelength of the laser
z = linspace(0, 10000, 1000); % Positions (m)
T = 25 * ones(size(z)); % Initial temperature
T(z >= 1500 & z <= 1600) = T(z >= 1500 & z <= 1600) + 25; % Temperature step
% Functions
alpha_as = @(z) 0.21 * z; % Example function for alpha_as
alpha_s = @(z) 0.216 * z; % Example function for alpha_s
alpha_p = @(z) 0.2 * z; % Example function for alpha_p
alpha_ras = @(z) 0.2 * z; % Example function for alpha_ras
B_as = 0.25; % Example constant
Ep0 = 10; % Initial potency
% Group velocity
V_g = 1.4682; % m/s
% Pre-calculate eta_as
eta_as = (1/2) * alpha_ras(z) .* V_g * B_as; % Element-wise multiplication
% Initialize the potency vector Pas
Pas = zeros(size(z));
% Calculate potency with exponential decay
for i = 1:length(z)
% Integrating function
fun = @(u) (alpha_p(u) + alpha_as(u)); % Sum of absorption
% Calculate the numerical integral from 0 to z(i)
integral_value = integral(fun, 0, z(i));
% Check the integral and decay
% Modify decay to be more gradual by adjusting the factor
decay_factor = 0.001; % Adjust this factor as needed
Pas(i) = Ep0 * eta_as(i) * exp(-decay_factor * integral_value);
end
% Plot the result
figure;
plot(z, Pas);
xlabel('Position (m)');
ylabel('Potency \(P_{as}\)');
title('Profile of \(P_{as}\) with Controlled Exponential Decay');
grid on;
Warning: Error in state of SceneNode.
String scalar or character vector must have valid interpreter syntax:
Potency \(P_{as}\)
I hope this helps!

Star Strider
Star Strider el 28 de Nov. de 2024 a las 16:04
I am not certain what you are calculating.
The ‘integral_value’ value gets very large very quickly, so ‘Pas’ decays quickly to zero.
My only suggestion is to check to be sure that ‘z’ is scaled correctly, or is scaled correctly in the calculations using it.
% clc;
% clear;
% Parâmetros
lambdL = 1550e-9; % Comprimento de onda do laser
z = linspace(0, 10000, 1000); % Posições (m)
T = 25 * ones(size(z)); % Temperatura inicial
T(z >= 1500 & z <= 1600) = T(z >= 1500 & z <= 1600) + 25; % Degrau de temperatura
% Funções
alpha_as = @(z) 0.21 * z; % Exemplo de função para alpha_as
alpha_s = @(z) 0.216 * z; % Exemplo de função para alpha_s
alpha_p = @(z) 0.2 * z; % Exemplo de função para alpha_p
alpha_ras = @(z) z*0.2; % Exemplo de função para alpha_ras
B_as = 0.25; % Exemplo de constante
Ep0 = 10;
% Velocidade de grupo
V_g = 1.4682; % m/s
% Vetorizando o cálculo de eta_as
eta_as = (1/2) * alpha_ras(z) .* V_g * B_as; % Multiplicação elemento a elemento
% Inicializando o vetor de potência Pas
Pas = zeros(size(z));
% Cálculo da potência com decaimento exponencial
for i = 1:3%length(z)
% Função integrando
fun = @(u) (alpha_p(u) + alpha_as(u)); % Somatório de absorção
% Cálculo da integral numérica de 0 até z(i)
integral_value = integral(fun, 0, z(i));
% Verificar a integral e decaimento
% Modificar o decaimento para ser mais gradual
Pas(i) = Ep0 * eta_as(i) * exp(-0.1 * integral_value); % Fator de decaimento mais controlado
end
Pas
Pas = 1×1000
0 0.4711 0.0020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
% Plotando o resultado
figure;
plot(z, Pas);
xlabel('Posição (m)');
ylabel('Potência \(P_{as}\)');
title('Perfil de \(P_{as}\) com Decaimento Exponencial Controlado');
grid on;
Warning: Error in state of SceneNode.
String scalar or character vector must have valid interpreter syntax:
Potência \(P_{as}\)
.

Categorías

Más información sobre Get Started with MATLAB en Help Center y File Exchange.

Productos


Versión

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by