Matlab no muestra el gráfico de mi codigo
28 ビュー (過去 30 日間)
古いコメントを表示
Estoy usando matlab online y nunca he tenido problemas con las graficas ni codigo, todo me funcionaba perfecto, hace unos dias hice un codigo que me devuelve una grafica, pero hoy ejecute el mismo codigo sin ningun cambio y no me devuelve la grafica, solo me muestra el pnale de grafica pero en blanco
tengo el siguiente codigo:
close all
clear all
clc
% Duración y frecuencia de muestreo
duration = 5;
Fs = 44100;
t = linspace(0, duration, duration * Fs);
% crossfade con maximo de 1
crossfade = exponentialFunction(t, 1, 1);
% Señal generada aleatoriamente adicional para producir el efecto de crossfade
autoGeneratedSignal = cos(2 * pi * 1000 * t); % Ajusta la frecuencia y forma de la señal
% Aplicar crossfade a las dos señales
signal1 = autoGeneratedSignal .* crossfade(2, :);
signal2 = sin(2 * pi * 500 * t) .* crossfade(1, :); % Genera otra señal, puedes ajustar la frecuencia
% Sumar las señales para obtener el resultado del crossfade
result = signal2 + signal1;
% Visualizar el resultado
figure;
subplot(3, 1, 1);
plot(t, signal1, 'LineWidth', 2);
title('Señal Generada con Crossfade');
subplot(3, 1, 2);
plot(t, signal2, 'LineWidth', 2);
title('Otra Señal con Crossfade');
subplot(3, 1, 3);
plot(t, result, 'LineWidth', 2);
title('Resultado del Crossfade');
% Reproducir el resultado
sound(result, Fs);
function y = exponentialFunction(t, decayRate, growthRate)
% Genera una función exponencial decreciente y creciente con un valor máximo de 1.
% Parámetros:
% t: Vector de tiempo
% decayRate: Tasa de decrecimiento exponencial (debe ser un número positivo)
% growthRate: Tasa de crecimiento exponencial (debe ser un número positivo)
% Asegúrate de que los parámetros sean válidos
if decayRate <= 0 || growthRate <= 0
error('Las tasas de decrecimiento y crecimiento deben ser números positivos.');
end
% Genera las funciones exponenciales
decayFunction = exp(-decayRate * t);
growthFunction = 1 - exp(-growthRate * t);
% Normaliza las funciones para tener un valor máximo de 1
decayFunction = decayFunction / max(decayFunction);
growthFunction = growthFunction / max(growthFunction);
% Combina las funciones
y = [decayFunction; growthFunction];
end
1 件のコメント
Rik
2024 年 1 月 18 日
Other than the forum interface not supporting sound, there doesn't seem to be an issue with your code itself. Or were you expecting more graphics to show up?
回答 (2 件)
Loreto
2025 年 1 月 26 日 3:18
% Parámetros del reactor
beta = 0.0065; % Fracción total de neutrones retardados
Lambda = 1e-5; % Tiempo de generación de neutrones (s)
beta_i = [0.00025 0.00135 0.0012 0.0022 0.00085 0.00065]; % Fracción por grupo de neutrones retardados
lambda_i = [0.0124 0.0305 0.111 0.301 1.14 3.01];
% Condiciones iniciales
n0 = 1; % Densidad inicial de neutrones normalizada
C0 = beta_i ./ (lambda_i * Lambda); % Concentración inicial de precursores en estado estacionario
initial_conditions = [n0 C0]; % Estado inicial del sistema
% Tiempo de simulación
t_final = 100; % Tiempo final en segundos
tspan = [0 t_final]; % Vector de tiempo para la simulación
% Definir la reactividad (inserción repentina)
rho = @(t) 0.002 * (t >= 0); % Reactividad constante de 0.2% desde t = 0
% Resolver las ecuaciones diferenciales
[t, y] = ode45(@(t, y) reactor_ode(t, y, beta, Lambda, beta_i, lambda_i, rho(t)), tspan, initial_conditions);
% Extraer la solución de la densidad de neutrones y precursores
n = y(:,1); % Densidad de neutrones
C = y(:,2:end); % Concentraciones de precursores de neutrones retardados
% Graficar la evolución de la densidad de neutrones
figure;
plot(t, n, 'LineWidth', 2);
xlabel('Tiempo (s)');
ylabel('Densidad de neutrones normalizada');
title('Evolución de la densidad de neutrones durante un transitorio de reactividad');
grid on;
% Graficar las concentraciones de precursores de neutrones retardados
figure;
plot(t, C, 'LineWidth', 2);
xlabel('Tiempo (s)');
ylabel('Concentraciones de precursores');
title('Concentración de precursores de neutrones retardados por grupo');
legend('Grupo 1', 'Grupo 2', 'Grupo 3', 'Grupo 4', 'Grupo 5', 'Grupo 6');
grid on;
function dydt = reactor_ode(~, y, beta, Lambda, beta_i, lambda_i, rho)
n = y(1); % Densidad de neutrones
C = y(2:end); % Concentraciones de precursores de neutrones retardados
% Ecuación para la densidad de neutrones
dn_dt = ((rho - beta) / Lambda) * n + sum(lambda_i .* C);
% Ecuación para las concentraciones de precursores
dC_dt = (beta_i / Lambda) * n - lambda_i .* C;
% Derivada del sistema
dydt = [dn_dt; dC_dt];
end
1 件のコメント
Walter Roberson
2025 年 1 月 26 日 7:17
This is irrelevant to the original Question.
Your lambda_i is a row vector. Your input y is a column vector, which makes C = y(2:end) a column vector.
dn_dt = ((rho - beta) / Lambda) * n + sum(lambda_i .* C);
That involves row vector .* column vector, which gives a 2D array output. sum() of a 2D array is a 1 x N vector.
dC_dt = (beta_i / Lambda) * n - lambda_i .* C;
lambda_i is a row vector, so dC_dt is a row vector.
dydt = [dn_dt; dC_dt];
That is two row vectors horzcat'd together. The result is a 2 x N array.
However, the output dydt is required to be a column vector, not a 2D array.
埃博拉酱
2025 年 1 月 26 日 9:58
Su código no parece tener nada malo y lo estoy ejecutando bien en mi terminal. Es posible que deba considerar la posibilidad de instalar una versión más reciente de MATLAB para incluir posibles correcciones de errores, o ponerse en contacto con el soporte técnico.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Numerical Integration and Differential Equations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!