ARCHIVOS TEÓRICOS DEL MUSEO MATEMÁTICO.
ÁREA- ANÁLISIS-
TEMA-SUPERFICIES MÍNIMAS Y CON CURVATURA PRESCRIPTA.
//////Superficie de área mínima en dominio
de contorno cuadrado de lado L , partido
en n partes////////////
Autor- Leonard Echagüe- Mate UBA Museum-
Dado un dominio cuadrado con valores predeterminados
de la función en su contorno, nulos en el caso plano y
de altura de un tetraedro en el caso de Schwarz, a partir
de una reticulación del dominio, se expresa el área de la
superficie por formulas en función de los valores de las funciones
en los puntos de la malla reticular, luego de lo cual se procede,
mediante un algoritmo de gradiente descendente ,a encontrar
discretamente los valores de las funciones que minimizan el área.
OBSERVAR LAS COINCIDENCIAS CON LO OBTENIDO EN
LOS OTROS ARCHIVOS DEL TEMA SUPERFICIES MÍNIMAS.
LAS ANIMACIONES DEL WORKSHEET ESTÁN ACTIVAS.
EN LOS ARCHIVOS COMPRIMIDOS HAY MÁS INFORMACIÓN DE RESULTADOS
inicial para todos los casos
Esquema de reticulado y cálculo de áreas
Dar entrada desde aqui hasta el aviso///////////////////////////////////////////
> restart;
> u:=L/n;
> with(linalg):
Warning, new definition for norm
Warning, new definition for trace
> n:=5;L:=5;u;
> h:=array(0..n,0..n,[]);
> for i from 0 by 1 to n do
> for j from 0 by 1 to n do
> A[i,j]:=[i*u,j*u,h[i,j]];
> od;od;
> Area:=0;
> for i from 0 by 1 to n-1 do
> for j from 0 by 1 to n-1 do
> pepe1:=crossprod((A[i,j+1]-A[i,j]),(A[i+1,j+1]-A[i,j]));
> pepe2:=crossprod((A[i+1,j]-A[i,j]),(A[i+1,j+1]-A[i,j]));
> Area:=0.5*sqrt(pepe1[1]^2+pepe1[2]^2+pepe1[3]^2)+0.5*sqrt(pepe2[1]^2+pepe2[2]^2+pepe2[3]^2)+Area;
> od;od;
> gradArea:=array(1..n-1,1..n-1,[]);
> for i from 1 by 1 to n-1 do
> for j from 1 by 1 to n-1 do
> gradArea[i,j]:=diff(Area,h[i,j]);
> od:od:
USAR EVAL PARA QUE EVALUE EN ARRAY
> matgrad:=eval(gradArea):
>
intermedio para plano
chequeo inicial
> h:=array(0..5,0..5,[[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1]]):
> evalm(convert(h,matrix));
> h[2,2];
> print(evalf(Area));
>
comienzo
> with(plots):
> h1:=array(1..6,1..6,[]);
> h:=array(0..5,0..5,[[1,1,1,1,1,1],[1,1,2,3,1,1],[1,-1,1,1,2,1],[1,2,1,1,4,1],[1,1,2,3,1,1],[1,1,1,1,1,1]]):
> evalm(convert(h,matrix));print(evalf(Area));
ver que aquí en lo ultimo sustituye bien el Area.
> for i from 0 by 1 to n do
> for j from 0 by 1 to n do
> h1[i+1,j+1]:=h[i,j]:
> od:od:
> evalm(h1);
> alpha:=0.5;
programa para plano
ojo al evalf necesario
> i:=1;j:=1;
> h[i,j]:=h[i,j]-alpha*matgrad[i,j];
> h1[i+1,j+1]:=h[i,j];
>
>
>
> for k from 1 by 1 to 80 do
> for i from 1 by 1 to n-1 do
> for j from 1 by 1 to n-1 do
> h[i,j]:=evalf(h[i,j]-alpha*matgrad[i,j]):
> h1[i+1,j+1]:=h[i,j]:
> od:od:
> print(evalf(Area)):
> convert(h1,matrix):
> p.k:=matrixplot(h1):
> #print(evalf(evalm(convert(h,matrix)))):
> convert(h,matrix):
> od:
> display([seq(p.k,k=1..80)],insequence=true);
>
intermedio para Schwarz
chequeo inicial
> h:=array(0..5,0..5,[[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1],[1,1,1,1,1,1]]):
> evalm(convert(h,matrix));
> h[2,2];
> print(evalf(Area));
>
comienzo
> with(plots):
> h1:=array(1..6,1..6,[]);
> h:=array(0..5,0..5,[[0,0.2,0.4,0.6,0.8,1],[0.2,0.4,0.6,0.8,1,0.8],[0.4,0.6,0.8,1,0.8,0.6],[0.6,0.8,1,0.8,0.6,0.4],[0.8,1,0.8,0.6,0.4,0.2],[1,0.8,0.6,0.4,0.2,0]]):
> evalm(convert(h,matrix));print(evalf(Area));
ver que aquí en lo ultimo sustituye bien el Area.
> for i from 0 by 1 to n do
> for j from 0 by 1 to n do
> h1[i+1,j+1]:=h[i,j]:
> od:od:
> evalm(h1);
> ps:=matrixplot(h1):matrixplot(h1);
> alpha:=0.5;
>
programa para Schwarz
>
> for k from 1 by 1 to 40 do
> for i from 1 by 1 to n-1 do
> for j from 1 by 1 to n-1 do
> h[i,j]:=evalf(h[i,j]-alpha*matgrad[i,j]):
> h1[i+1,j+1]:=h[i,j]:
> od:od:
> print(evalf(Area)):
> convert(h1,matrix):
> p.k:=matrixplot(h1):
> #print(evalf(evalm(convert(h,matrix)))):
> convert(h,matrix):
> od:
> display([ps,seq(p.k,k=1..40)],insequence=true);
>