Matlab - duda en un código

   
Vista:

duda en un código

Publicado por Pili (3 intervenciones) el 20/07/2013 21:20:42
Hola chicos, cómo están? estoy haciendo un programa de elementos finitos (plane stress) y no encuentro la forma de generar una matriz en función de las variables 'r 'y 's' a las que luego las voy a evaluar en diferentes puntos. Yo lo había podido hacer denominándolas como simbólicas pero me pidieron que no lo haga asi.
Les copio una parte del código (como estoy intentanto hacerlo) a ver si me pueden ayudar:

clc
clear
%se definen las variables
char 'r', char 's'
%


%% DATOS DE ENTRADA:
%% Número de nodos
n=xlsread('planestress.xlsx',1,'C2');
%% Posición
coordenadas=xlsread('estado plano de tensión.xlsx',2);
%% Condiciones de vínculo
cv=xlsread('planestress.xlsx',3);
%% Se define el arreglo matricial de condiciones de vínculo:
for i=1:n
CV((2*i)-1)=cv(i,1);
CV((2*i))=cv(i,2);
end
%% Número de elementos
nE=xlsread('planestress.xlsx',1, 'C4');
%% nodos por elemento
conectividad=xlsread('estado plano de tensión.xlsx',4);

%% vector de cargas concentradas
Rc=xlsread('planestress.xlsx',5);
%% Se define el arreglo matricial de cargas concentradas:
for i=1:n
RC((2*i)-1)=Rc(i,1);
RC((2*i))=Rc(i,2);
end

%% Las funciones de forma asiciadas con elemento
% (Figura 5.4 Bathe)
h9='(1-(r^2))*(1-(s^2))'
h8='(1/2*(1-(s^2))*(1+r))-(1/2*h9)'
h7='1/2*(1-(r^2))*(1-s)-(1/2*h9)'
h6='1/2*(1-(s^2))*(1-r)-(1/2*h9)'
h5='1/2*(1-(r^2))*(1+s)-(1/2*h9)'
h1='1/4*(1+r)*(1+s)-1/2*(h5+h8)-(1/4*h9)'
h2='1/4*(1-r)*(1+s)-1/2*(h5+h6)-(1/4*h9)'
h3='1/4*(1-r)*(1-s)-1/2*(h6+h7)-(1/4*h9)'
h4='1/4*(1+r)*(1-s)-1/2*(h7+h8)-(1/4*h9)'

%% Se define la matriz de interpolación, H
H=[h1 h2 h3 h4 h5 h6 h7 h8 h9]


%% Interpolación de la geometría del elemento.
x=0;
y=0;

for i=1:n
x=x+H(i)*coordenadas(i,1);
y=y+H(i)*coordenadas(i,2);

end

%% Se define la matriz Jacobiana, J,
J=[diff(x,r) diff(y,r);
diff(x,s) diff(y,s)]

Ahí por ejemplo, no logro que la 'x' y la 'y' sean funciones de 'r' y 's'

Beso y gracias!
Pili
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

duda en un código

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 21/07/2013 01:09:06
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
syms r s
 h9=(1-(r^2))*(1-(s^2));
 h8=(1/2*(1-(s^2))*(1+r))-(1/2*h9);
 h7=1/2*(1-(r^2))*(1-s)-(1/2*h9);
 h6=1/2*(1-(s^2))*(1-r)-(1/2*h9);
 h5=1/2*(1-(r^2))*(1+s)-(1/2*h9);
 h1=1/4*(1+r)*(1+s)-1/2*(h5+h8)-(1/4*h9);
 h2=1/4*(1-r)*(1+s)-1/2*(h5+h6)-(1/4*h9);
 h3=1/4*(1-r)*(1-s)-1/2*(h6+h7)-(1/4*h9);
 h4=1/4*(1+r)*(1-s)-1/2*(h7+h8)-(1/4*h9);
 
 %% Se define la matriz de interpolación, H
 H=[h1 h2 h3 h4 h5 h6 h7 h8 h9]
 %% Interpolación de la geometría del elemento.
 x=0;
 y=0;
n=9;
coordenadas=rand(n,2);
 for i=1:n
 x=x+H(i)*coordenadas(i,1);
 y=y+H(i)*coordenadas(i,2);
 
 end
 %% Se define la matriz Jacobiana, J,
 J=[diff(x,r) diff(y,r);
 diff(x,s) diff(y,s)]




1
2
3
4
5
6
7
8
9
10
11
>> humps
 
H =
 
[ (r/4 + 1/4)*(s + 1) + ((r^2/2 - 1/2)*(s + 1))/2 + ((s^2/2 - 1/2)*(r + 1))/2 + ((r^2 - 1)*(s^2 - 1))/4, ((r^2/2 - 1/2)*(s + 1))/2 - (r/4 - 1/4)*(s + 1) - ((s^2/2 - 1/2)*(r - 1))/2 + ((r^2 - 1)*(s^2 - 1))/4, (r/4 - 1/4)*(s - 1) - ((r^2/2 - 1/2)*(s - 1))/2 - ((s^2/2 - 1/2)*(r - 1))/2 + ((r^2 - 1)*(s^2 - 1))/4, ((s^2/2 - 1/2)*(r + 1))/2 - ((r^2/2 - 1/2)*(s - 1))/2 - (r/4 + 1/4)*(s - 1) + ((r^2 - 1)*(s^2 - 1))/4, - (r^2/2 - 1/2)*(s + 1) - ((r^2 - 1)*(s^2 - 1))/2, (s^2/2 - 1/2)*(r - 1) - ((r^2 - 1)*(s^2 - 1))/2, (r^2/2 - 1/2)*(s - 1) - ((r^2 - 1)*(s^2 - 1))/2, - (s^2/2 - 1/2)*(r + 1) - ((r^2 - 1)*(s^2 - 1))/2, (r^2 - 1)*(s^2 - 1)]
 
 
J =
 
[  (1386131993280269*s)/18014398509481984 - (522056547558449*r*(s^2 - 1))/9007199254740992 - (2068115445889859*r*(s - 1))/18014398509481984 + (8821760464396399*r*(s + 1))/18014398509481984 - (564338282953639*s^2)/9007199254740992 - 98539192206079/2251799813685248, (11294889942423463*s)/36028797018963968 - (171784168540493*r*(s^2 - 1))/18014398509481984 + (4505805893391413*r*(s - 1))/9007199254740992 - (7651488912480889*r*(s + 1))/18014398509481984 - (9398150476226835*s^2)/36028797018963968 + 7319871579800339/18014398509481984]
[ (1386131993280269*r)/18014398509481984 - (522056547558449*s*(r^2 - 1))/9007199254740992 + (5656354784113369*s*(r - 1))/18014398509481984 - (7913707915927925*s*(r + 1))/18014398509481984 + (1688411254626635*r^2)/9007199254740992 + 86242750385061/2251799813685248,   (11294889942423463*r)/36028797018963968 - (171784168540493*s*(r^2 - 1))/18014398509481984 - (4607951185602741*s*(r - 1))/18014398509481984 - (2395099645312047*s*(r + 1))/9007199254740992 + (1360122874301937*r^2)/36028797018963968 + 842117358386995/9007199254740992]



Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

duda en un código

Publicado por Pili (3 intervenciones) el 21/07/2013 20:03:27
Claro!! Yo lo pense asi tambien, pero me pidieron que no lo hiciera definiendo a las variables sym :S
Se te ocurre otra manera?

Muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

duda en un código

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 21/07/2013 22:46:26
EL diff es aplicable para variables vectores y simbólicas.
Además lo que te están pidiendo es; como que te mandan comprar un auto de ultima generación cuya velocidad máxima es 400km/h pero sin embargo te dicen que a los mas puedes correr 20km/h.
¿Entonces tendrá sentido comprarte el auto de ultima generación.?
Me hace recodar una vez cuando fui a enseñar a una facultad nueva, el curso de matlab, encontré un matlab ya pasado de versión, por lo tanto yo cambié por otra nueva versión mejorada, pero sin embargo había profesores que se habían quedado en matlab con la versión en la versión antigua y querían seguir trabajando con esa versión y por eso motivos tuvimos discrepancias.

bueno tendrías que crear los archivos de function en forma manual como se solía hacer en la versión 3 de matlab, allí si se haría modalidad string, pero es tedioso hacerlo de esa forma.
http://es.wikipedia.org/wiki/Anexo:Versiones_de_MATLAB

Pero mi opinión personal no es lo más adecuado, ya que estamos ahora en la versión 8.1 de matlab.


[url]Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com[/url]
http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

duda en un código

Publicado por Pili (3 intervenciones) el 22/07/2013 00:09:54
jaja, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

duda en un código

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3440 intervenciones) el 22/07/2013 04:07:51
para mi opinión personal no es lo más adecuado la forma como quieres hacer, ya que estamos ahora en la versión 8.1 de matlab.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Dave

duda en un código

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 22/07/2013 05:34:41
Hola Pili;

Creo que estás confundiendo dos métodos de solución, lo que aparentemente deseas solucionar es un sistema de ecuaciones formado por un conjunto de puntos, bajo ciertas condiciones iniciales y de frontera. Este tipo de problemas se podría desarrollar de forma simbólica o iterativa-mente en forma numérica, y al parecer te dijeron que no uses la forma simbólica, quedando como alternativa la forma numérica.

Entonces, lo primero que debes hacer es formar el sistema de ecuaciones basado en todos los puntos de evaluación, asignar las condiciones de frontera y C.I. y luego usar un método de solución matricial (numérico).

La solución numérica, es independiente de la versión del software, podrías usar hasta la versión más antigua, lo único que necesitas es traducir correctamente tu algoritmo.

Espero que sea de alguna ayuda.

Saludos
Dave Correa
correa.dave30@gmail.com
Servicios de Programación Matlab
http://fismatlab.blogspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar