Salut

J'ai un souci avec l'utilisation de fmincon

voici mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
clear all
clc;
 
%%             LECTURA DE LOS DATOS
 
%Leyendo los nodos con sus respectivas coordenadas
 
%        fich=fopen('jano1.1.node');      % 128  elementos
        fich=fopen('malla1.node');
 
  nnum=fscanf(fich,'%i',3);
  Nnodos=nnum(1);
 datoscompletos=fscanf(fich,'%f',[5,Nnodos]);
 datoscompletos=datoscompletos';
 fclose(fich);
 
coordinate=[datoscompletos(:,2) datoscompletos(:,3)];
 
X=coordinate(:,1);
Y=coordinate(:,2);
Z=datoscompletos(:,4);
 
 tri=delaunay(X,Y);
 element=tri;
 trisurf(tri,X,Y,Z)
 
 
 for j=16 %1:1%size(element,1)
 
%     syms x y;
%     cp=[x  y];
    x1=coordinate(element(j,1),1);y1=coordinate(element(j,1),2);z1=Z(element(j,1));
    x2=coordinate(element(j,2),1);y2=coordinate(element(j,2),2);z2=Z(element(j,2));
    x3=coordinate(element(j,3),1);y3=coordinate(element(j,3),2);z3=Z(element(j,3));
 
    %x=coordinate
 
    cl=coordinate(element(j,1),: );
    cm=coordinate(element(j,2),: );
    cn=coordinate(element(j,3),: );
 
    v0 = cn - cl;
    v1 = cm - cl;
    %v2 = cp - cl; % variable
 
    dot00 = dot(v0, v0);
    dot01 = dot(v0, v1);
    %dot02 = dot(v0, v2);
    dot11 = dot(v1, v1);
    %dot12 = dot(v1, v2);  % variable
 
    K = 1 / (dot00 * dot11 - dot01 * dot01);
 
    a= [(dot(v1,v1)*(x3-x1)- dot(v0,v1)*(x2-x1))/K];
    b= [(dot(v1,v1)*(y3-y1)- dot(v0,v1)*(y2-y1))/K];
    c= [(dot(v0,v0)*(x2-x1)- dot(v0,v1)*(x2-x1))/K];
    f= [(dot(v0,v0)*(y2-y1)- dot(v0,v1)*(y2-y1))/K];
 
    c1=(x1^2-x1*x3)+(y1^2-y1*y3);
    c2=(x1^2-x1*x2)+(y1^2-y1*y2);
 
    D1= ((dot(v1,v1)*c1-dot(v0,v1)*c2))/K;
    D2= ((dot(v0,v0)*c2-dot(v0,v1)*c1))/K;
 
    % plano ax+by+cz+d
 
    Pa=(y2-y1)*(z3-z1)-(z2-z1)*(y3-y1);
    Pb=-(x2-x1)*(z3-z1)-(z2-z1)*(x3-x1);
    Pc=(x2-x1)*(y2-y1)-(y2-y1)*(x3-x1);
    Pd=-(Pa*x1+Pb*y1+Pc*z1);
 
    pp1=Pa/Pc;
    pp2=Pb/Pc;
    pp3=Pd/Pc;
 
AA=[a  ,  b    ;
    c  ,  f    ;
    -(a+c),  -(b+f)  ];
 
BB=[-D1;
    -D2;
    (D1+D2)-1];
 
 
options=optimset('MaxFunEvals',500)
 
partida= [x1;y1];
 
 [x,fval,flag,output]=fmincon(@(x)-dot(x,[pp1pp2])-pp3,partida,AA,BB,[],[],[],[],[],options)
 
end
L'idée est de lire dans un fichier texte certaines données. Ces données correspondent à des coordonnées de point. Ces points vont etre triangularisé (en deux dimensions) par la méthode de Delaunay. On va ainsi avoir un tableau qui decrit les points qui vont former les triangles (TRI).

Le but ensuite est de chercher un minimum dans chaque triangle. Pour l'instant , il est vrai que le minimum du triangle devrait etre un sommet (mais plus tard ce ne sera pas le cas, car je rajouterai une deuxieme partie à la formule), mais ce n'est pas le cas. Je dois avoir un probleme au niveau de la declaration de fmincon. Regardez en premier cette ligne pour voir si quelque chose vous choque. Je suis encore debutant matlab...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
[x,fval,flag,output]=fmincon(@(x)-dot(x,[pp1pp2])-pp3,partida,AA,BB,[],[],[],[],[],options)
Merci d'avance