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

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
où m, n, ..., h sont des variables (nb,1) provenant d'un fichier de données.

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 :
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
En solution je veux des matrices (4,4) (comme les matrices A(indice i)) pour tous les i allant de 1 à 35.

Cette fonction fonctionne (je ne demande pas de boucle) :
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
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
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
Mais impossible de le faire pour les 35 dates en même temps.

Merci pour votre aide !!!