Bonjour,
Je suis nouvelle sur ce forum. Jusqu'à présent je trouvais la solution à mes problèmes en parcourant les sujets des autres participants mais cette fois-ci, ce n'est pas le cas !
Mon problème est le suivant. Je dois résoudre un système d'équations non linéaires et je dois le faire plusieurs fois de suite.
J'ai d'abord créé des matrices contenant les variables utilisées dans la fonction
où m, n, ..., h sont des variables (nb,1) provenant d'un fichier de données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 nb=35; for i=1:nb eval(['A' num2str(i) '=[m(i,1),n(i,1),o(i,1),p(i,1); q(i,1),r(i,1),s(i,1),t(i,1); u(i,1),v(i,1),w(i,1),x(i,1); y(i,1),z(i,1),k(i,1),h(i,1)]']); end
Je veux faire appel à ces matrices pour résoudre le système à chaque date (1 à 35). Le problème est que je ne peux faire appel aux matrices avec un indice (ça ne fonctionne pas).
Ma fonction :
En solution je veux des matrices (4,4) (comme les matrices A(indice i)) pour tous les i allant de 1 à 35.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function F=fun(x) B = [x(1), x(2), x(3), x(4) ; x(5), x(6), x(7), x(8) ; x(9), x(10), x(11), x(12) ; x(13), x(14), x(15), x(16)]; C = [x(1), x(2), x(3), x(4) ; x(5), x(6), x(7), x(8) ; x(9), x(10), x(11), x(12) ; x(13), x(14), x(15), x(16)]; D = [x(1), x(2), x(3), x(4) ; x(5), x(6), x(7), x(8) ; x(9), x(10), x(11), x(12) ; x(13), x(14), x(15), x(16)]; F=(B*C*D)- A(indice i de 1 à 35); end
Cette fonction fonctionne (je ne demande pas de boucle) :
quand je la résouds comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function F=fun(x) global A1; B = [x(1), x(2), x(3), x(4) ; x(5), x(6), x(7), x(8) ; x(9), x(10), x(11), x(12) ; x(13), x(14), x(15), x(16)]; C = [x(1), x(2), x(3), x(4) ; x(5), x(6), x(7), x(8) ; x(9), x(10), x(11), x(12) ; x(13), x(14), x(15), x(16)]; D = [x(1), x(2), x(3), x(4) ; x(5), x(6), x(7), x(8) ; x(9), x(10), x(11), x(12) ; x(13), x(14), x(15), x(16)]; F=(B*C*D)- A1; end
Mais impossible de le faire pour les 35 dates en même temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 nb=35; for i=1:nb eval(['OQT' num2str(i) '=[PP(i,1),PT(i,1),PU(i,1),PI(i,1); TP(i,1),TT(i,1),TU(i,1),TI(i,1); UP(i,1),UT(i,1),UU(i,1),UI(i,1); IP(i,1),IT(i,1),IU(i,1),II(i,1)]']); end global A1; x0 = [25, 0.1, 0.2, 0.3 ; 1.6, 19.2, 2, 1.5 ; 1.5, 2.2, 15, 4 ; 0.15, 0.15, 0.55, 25]; % Make a starting guess at the solution options=optimset('Display','iter'); % Option to display output [x,fval,EXITFLAG] = fsolve(@fun,x0,options); % Call solver
Merci pour votre aide !!!
Partager