clear all close all input = 'punch_ref.inp'; output = 'punch_ref.dat'; RunINP(input) [U,RF] = readAbaqusOutput(output); %U_exp = 30 ; RF_exp = -250 ; error = abs(RF_exp-RF); % Calculer error pour plusieurs valeurs de E n_samples = 10; E_min = 0.001 ; E_max = 1 ; %E_values = E_min + (E_max - E_min) * rand(n_samples, 1); E_values = linspace(E_min,E_max,n_samples); for i=1:n_samples filename = num2str(i); nom_fichier_out = append(filename,'_out'); nom_fichier_inp_out = append(nom_fichier_out,'.inp'); nom_fichier_dat_out = append(nom_fichier_out,'.dat'); nom_fichier_dat = append(filename,'.dat'); modify_INP(input, nom_fichier_inp_out,E_values(i)); RunINP(nom_fichier_inp_out); [U,RF] = readAbaqusOutput(nom_fichier_dat_out); u(i) = U ; rf(i) = RF ; end figure plot(E_values,rf,'bx') error_E = abs(RF_exp-rf); figure plot(E_values,error_E,'bx') % Apprentissage net = feedforwardnet(10); % 10 neurones dans la couche cachée net = train(net,E_values,error_E); %% Optimisation % Bornes inférieures et supérieures des paramètres lb = [E_min]; ub = [E_max]; % Paramètres initiaux pour l'optimisation init_params = [mean([E_min, E_max])]; % Options pour l'optimisation options = optimoptions('fmincon', 'Algorithm', 'sqp'); % Optimisation des paramètres E1, E2, E3 pour minimiser l'écart avec les données expérimentales [E_opt, fval] = fmincon(@(E) objective_function(E, net, 0), init_params, [], [], [], [], lb, ub, [], options); % Affichage des résultats fprintf('Le paramètre optimisé est : E = %f\n', E_opt(1));