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 92 93 94 95 96 97 98
| %% Programa para el problema de Empresas
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=4 %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)*(x3-x1))*K];
f= [(dot(v0,v0)*(y2-y1)- dot(v0,v1)*(y3-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)*(y3-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;
1-(D1+D2)];
options=optimset('MaxFunEvals',500);
options = optimset('LargeScale','off');
partida= [x3;y3];
[x,fval,exitflag,output,]=fmincon(@(x)-dot(x,[pp1pp2])-pp3,partida,AA,BB,[],[],[],[],[],options)
end |
Partager