Está en la página 1de 6

INGENIERA MCANICA

Informtica Aplicada
Trabajo Prctico: N 1
Integrantes:

Introduccin
Para realizar este trabajo utilizamos el software Matlab con el objetivo de
suavizar las grficas de la distribucin de temperaturas de un problema fsico
dado.
Creamos una funcin en Matlab (tpM.m) que recibe como parmetro el nombre
del archivo donde se encuentra la matriz con los valores de temperaturas y un
valor h (<1) que indica la separacin de los puntos pertenecientes a la placa
donde se quiere obtener el valor de temperatura.
Recurrimos al mtodo de los Splines Cbicos para suavizar la grfica, y para
resolver la matriz de coeficientes utilizamos el mtodo GaussSeidell. Este nos
pareci el mtodo mas apropiado, ya que tenamos una matriz tridiagonal y
diagonalmente dominante y este converge con mayor rapidez que otros
mtodos iterativos dados.
La funcin devuelve tres grficas, en las cuales podemos ver los resultado
obtenidos.

Grficas

Algoritmo en Matlab
function tpM = tpM(archivo,h1)
% ****** TRABAJO PRACTICO DE INFORMATICA APLICADA ******
%
tpM(archivo,h1)
%Donde h1 es la separacion de los puntos, que tiene que ser <1 y
mod(1/h1)=0 (resto de la division = 0)
%Donde archivo es el nombre de archvo a cargar EJ: teperatura.txt
h=1;
des = load(archivo);
%matriz de datos desordenados cargados
for i=1:length(des)
%arma la malla
z(des(i,1),des(i,2))= des(i,3);
%z matriz de datos ordenados
end
[m,n]=size(z); % m filas y n columnas
y=1;
%recorriendo por filas
for i = 1:m
%Calculamos los d(j)
for j= 1: n
d(j)= z(i,j);
end
b(1)=0;
%jac es la matriz a ser resuelta con el metodo de jacobi
jac= diag([ones(n-3,1).*h;h/3],-1) + diag([ones(n-2,1).*4*h;2*h/3]) +
diag([ones(n-2,1).*h],1);
for j= 2:n-1
T(j-1)= 3/h*(d(j+1)-d(j))-3/h*(d(j)-d(j-1));
end
T(n-1) = (d(n-1)-d(n))/h;
x0= T./[ones(n-2,1).*4*h;2*h/3]';
b(2:n) = gaussseidel(jac,T,x0,0.0001,12000); % pide a la funcion
gaussseidel que devuelva los coeficientes b
%determinamos a(j) y c(j)
for j= 2:n
a(j-1) = (b(j)-b(j-1))/(3*h);
c(j-1) = (d(j)-d(j-1))/h-(b(j)+2*b(j-1))*h/3;
end
%Armamos los polinomios para evaluarlos
cont = 1;
temp(y,1) = d(1);
for j = 1:n-1
for t = j+h1:h1:j+1
%evalua en h1 a los polinomios
cont = cont+1;
temp(y,cont) = a(j)*(t-j)^3+b(j)*(t-j)^2+c(j)*(t-j)+d(j); %crea la matriz
temperatura y la rellena
end
end
y = y + 1/h1;
end

jac = 0;
T = 0;
a=0; b=0; c=0; d=0;
x0=0;
y=1;
[mm,n]=size(temp); % m filas y n columnas
%recorriendo por columnas
for j = 1:n
%Calculamos los d(i)
w=1;
for i= 1:m
d(i)= temp(w,j);
w = w + 1/h1;
end
b(1)=0;
b(m)=0;
%jac es la matriz para que resuelva el jacobiano
jac= diag([ones(m-3,1).*h],-1) + diag([ones(m-2,1).*4*h]) + diag([ones(m3,1).*h],1);
for i= 2:m-1 %terminos independientes
T(i-1)= 3/h*(d(i+1)-d(i))-3/h*(d(i)-d(i-1));
end
x0=T./[ones(m-2,1).*4*h]';
b(2:m-1) = GaussSeidel(jac,T,x0,0.0001,500); % pide a la funcion
gaussseidel que devuelva los coeficientes b
%determinamos a(i) y c(i)
for i= 2:m
a(i-1) = (b(i)-b(i-1))/3/h;
c(i-1) = (d(i)-d(i-1))/h-(b(i)+2*b(i-1))*h/3;
end
%Armamos los polinomios para evaluarlos
cont = 1;
temp(1,j) = d(1);
for i = 1:m-1
for t = i+h1:h1:i+1
%evalua en h a los polinomios
cont = cont + 1;
temp(cont,j) = a(i)*(t-i)^3+b(i)*(t-i)^2+c(i)*(t-i)+d(i); %crea la matriz
temperatura y la rellena
end
end
y = y + 1/h1;
end
figure(1)
subplot(1,2,1)
mesh(z)
title('Superfice sin suavizar')
subplot(1,2,2)
mesh(temp)
title('Superfice suavizada')

figure(2)
surf(temp)
title('Superfice suavizada')
figure(3)
subplot(1,2,1)
contourf(z,max(z))
title('Superfice sin suavizar')
subplot(1,2,2)
contourf(temp,max(temp))
title('Superfice suavizada')

También podría gustarte