0% ont trouvé ce document utile (0 vote)
15 vues4 pages

Code Matlab Excel 2

Le document présente une simulation de mouvement en utilisant deux méthodes numériques : les différences finies et Runge-Kutta d'ordre 4. Il calcule la position et la vitesse d'un objet soumis à une force variable sur une période de 2 secondes, puis exporte les résultats dans un fichier Excel. Enfin, il génère un graphique combiné montrant la force et les déplacements au cours du temps.

Transféré par

Luciano RAKOTOARISON
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues4 pages

Code Matlab Excel 2

Le document présente une simulation de mouvement en utilisant deux méthodes numériques : les différences finies et Runge-Kutta d'ordre 4. Il calcule la position et la vitesse d'un objet soumis à une force variable sur une période de 2 secondes, puis exporte les résultats dans un fichier Excel. Enfin, il génère un graphique combiné montrant la force et les déplacements au cours du temps.

Transféré par

Luciano RAKOTOARISON
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd

clear all; clc; close all;

%% Paramètres communs

h = 0.01; % Pas de temps

t_total = 2; % Durée totale étendue à 2s

t = (0:h:t_total)'; % Vecteur temps

n = length(t);

F = @(t_i) (t_i < 0.1).*(-500*t_i + 100) + ...

(t_i >= 0.1 & t_i < 0.2)*50 + ...

(t_i >= 0.2)*0; % Force nulle après 0.2s

F_vals = F(t); % Évaluation de la force pour tous les temps

%% ========== Méthode des Différences Finies ==========

x_df = zeros(n,1);

v_df = zeros(n,1); % Vitesse par différences finies

x_df(1) = 0; % Condition initiale x(0)

x_df(2) = x_df(1) + h*0.2; % Condition vitesse initiale

v_df(1) = 0.2;

for i = 2:n-1

if t(i) < 0.1

F_i = -500*t(i) + 100;

elseif t(i) < 0.2

F_i = 50;
else

F_i = 0;

end

x_df(i+1) = 2*x_df(i) - x_df(i-1) + h^2*(F_i/4 - 10*x_df(i) - 2000*x_df(i));

end

% Calcul de la vitesse (schéma centré)

for i = 2:n-1

v_df(i) = (x_df(i+1) - x_df(i-1)) / (2*h);

end

v_df(end) = (x_df(end) - x_df(end-1)) / h;

%% ========== Méthode Runge-Kutta d'ordre 4 ==========

x_rk = zeros(n,1);

y_rk = zeros(n,1); % y = dx/dt (vitesse)

x_rk(1) = 0;

y_rk(1) = 0.2;

for i = 1:n-1

[K1, L1] = rk_helper(x_rk(i), y_rk(i), t(i), F, h);

[K2, L2] = rk_helper(x_rk(i)+K1/2, y_rk(i)+L1/2, t(i)+h/2, F, h);

[K3, L3] = rk_helper(x_rk(i)+K2/2, y_rk(i)+L2/2, t(i)+h/2, F, h);

[K4, L4] = rk_helper(x_rk(i)+K3, y_rk(i)+L3, t(i)+h, F, h);

x_rk(i+1) = x_rk(i) + (K1 + 2*K2 + 2*K3 + K4)/6;


y_rk(i+1) = y_rk(i) + (L1 + 2*L2 + 2*L3 + L4)/6;

end

%% Export des données vers Excel

data_table = table(t, F_vals, x_df, v_df, x_rk, y_rk, ...

'VariableNames', {'Temps_s', 'Force_N', ...

'Deplacement_DF_m', 'Vitesse_DF_mps', ...

'Deplacement_RK4_m', 'Vitesse_RK4_mps'});

filename = 'resultats_jusqu_a_t2s.xlsx';

writetable(data_table, filename);

disp(['Fichier Excel "' filename '" généré.']);

%% Tracé combiné MATLAB

figure;

% Courbe de force

yyaxis left;

plot(t, F_vals, 'k--', 'LineWidth', 1.5);

ylabel('Force [N]');

ylim([-10 110]);

% Courbes de déplacement

yyaxis right;

plot(t, x_df, 'b-', 'LineWidth', 1.2); hold on;


plot(t, x_rk, 'r:', 'LineWidth', 1.5);

ylabel('Déplacement [m]');

% Mise en forme

title('Force et Déplacements jusqu''à t=2s');

xlabel('Temps [s]');

legend('Force F(t)', 'Différences Finies', 'Runge-Kutta 4', 'Location', 'northeast');

grid on;

set(gca, 'YColor', 'k');

xlim([0 t_total]);

%% Fonction helper pour Runge-Kutta

function [K, L] = rk_helper(x, y, t, F, h)

FT = F(t);

K = h * y;

L = h * (FT - 25*y - 7000*x)/2; % m = 2, c = 25, k = 7000

end

Vous aimerez peut-être aussi