Matlab - Problema al escribir en Matriz (Postprocesado Datos FEM)

 
Vista:
sin imagen de perfil

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por Pablo (6 intervenciones) el 23/02/2014 17:46:33
Buenas tardes,

estoy desarrollando un script para calcular los tensiones principales y sus vectores directores a partir de los tensores de tensiones calculados en NXNASTRAN de un modelo FEM.
Mi script tiene el siguiente algoritmo:

function [] = programa()
clear all;clc
A=csvread('tensor_1.csv');
[r,c]=size(A);
for i=1:1:r
nelemento = A(i,1);
T = crea_matriz_T(A,i)
[V,D]=calc_eigen(T)
S = genera_S(V,D,i,nelemento)

end
escribir_archivo(S);
end

Como podeis ver lo primero que hago es leer los tensores de un archivo y generar una matriz A con todos los datos.
Como los datos los tengo por filas, la siguiente instruccion crea una matriz T a partir de cada fila.
Cuando tengo la matriz T , calculo los valores y vectores propios.
Por ultimo , escribo en la matriz S los datos (tensiones principales y sus vectores) para cada elemento.
Lo ultimo sera escribir la matriz S en un fichero.

Hasta aqui todo correcto , el problema es que cuando hace la primera iteracion la funcion genera_S, escribe los resultados correctamente , pero en la segunda iteracion, al escribir los resultados en la segunda linea ; la primera , que la habia escrito correctamente, me la deja con ceros.
En resumen, si realizo 10 iteraciones solo me escribe resultados en la ultima fila, las anteriores me las deja con 0.
He corrido el programa pidiendoles las salidas en cada paso y he comprobado que en la primera pasada escribe la primera fila de S correctamente el problema estas a partir de la segunda.

Os adjunto el codigo de la funcion genera_S:
function [S] = genera_S (V,D,i,nelemento)

S(i,1)=nelemento;
S(i,2)=D(1,1);
S(i,3)=D(2,2);
S(i,4)=D(3,3);
S(i,5)=V(1,1);
S(i,6)=V(2,1);
S(i,7)=V(3,1);
S(i,8)=V(1,2);
S(i,9)=V(2,2);
S(i,10)=V(3,2);
S(i,11)=V(1,3);
S(i,12)=V(2,3);
S(i,13)=V(3,3);

end

Gracias de antemano, por vuestra ayuda y sugerencias.

Un saludo
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/02/2014 23:39:24
sube tu archivo 'tensor_1.csv'

¿crea_matriz_T es una función, si la respuesta es afirmativa, donde se define?
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
sin imagen de perfil

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por Pablo (6 intervenciones) el 24/02/2014 00:04:23
hola
la funciones las tengo en otros archivos:

A partir de las filas de la atriz A, creo el tensor de cada elemento:

function [T] = crea_matriz_T(A,i)

T(1,1)=A(i,5);
T(1,2)=A(i,8);
T(1,3)=A(i,10);
T(2,1)=A(i,8);
T(2,2)=A(i,6);
T(2,3)=A(i,9);
T(3,1)=A(i,10);
T(3,2)=A(i,9);
T(3,3)=A(i,7);
end

Un vez tengo el tensor en forma de matriz , calculo los valores y vectores propios:

function [V,D] =calc_eigen(T)

[V,D] = eig(T);

% D matriz diagonal con los valores propios de T
% V matriz cuyas columnas corresponden con los vectores propios que satisfacen T*V=V*D
end

La funcion donde genera_S es donde quiero ir almacendo los datos de cada elemento.

Por ultimo , la idea es escribir toda la funcion S con la siguiente funcion:

function[] = escribir_archivo(S)

dlmwrite('tensiones_principales.txt',S)

end

No suelo trabajar con Matlab, por eso puede que alguna de las funciones que he desarrollado no sean todo lo eficiente que deberian, o algun comando puede tener mejores opciones.

Gracias otra vez.

Un saludo
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
sin imagen de perfil

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por Pablo (6 intervenciones) el 23/02/2014 23:58:12
Hola,

adjunto el archivo que estoy utilizando como ejemplo, solo tiene dos tensores.

Como veras, el primer dato corresponde con el numero de elemento, a continuacion hay 3 datos con las coordenadas X,Y, Z y por ultimo estas los valores del tensor (XX, YY, ZZ, XY, YZ, ZX)

Un saludo
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 24/02/2014 00:16:02
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
function post_procesad_datos_fem(archivo_csv)
if nargin<1
    A=round(10*rand(10));
else
 A=csvread(archivo_csv);
end
 
 r=size(A,1);
 for i=1:r
    nelemento=A(i,1);
    T=crea_matriz_T(A,i);
    [V,D]=calc_eigen(T);
    s= genera_S(V,D,nelemento);
    S(i,:)=s;
 end
 escribir_archivo(S);
 open('post_procesad_datos_fem.txt')
end
 
 
function S=genera_S(V,D,nelemento)
 S(1,1)=nelemento;
 S(1,2)=D(1,1);
 S(1,3)=D(2,2);
 S(1,4)=D(3,3);
 S(1,5)=V(1,1);
 S(1,6)=V(2,1);
 S(1,7)=V(3,1);
 S(1,8)=V(1,2);
 S(1,9)=V(2,2);
 S(1,10)=V(3,2);
 S(1,11)=V(1,3);
 S(1,12)=V(2,3);
 S(1,13)=V(3,3);
end
 
 
function T = crea_matriz_T(A,i)
 T(1,1)=A(i,5);
 T(1,2)=A(i,8);
 T(1,3)=A(i,10);
 T(2,1)=A(i,8);
 T(2,2)=A(i,6);
 T(2,3)=A(i,9);
 T(3,1)=A(i,10);
 T(3,2)=A(i,9);
 T(3,3)=A(i,7);
end
 
 function [V,D] =calc_eigen(T)
 [V,D] = eig(T);
 % D matriz diagonal con los valores propios de T
 % V matriz cuyas columnas corresponden con los vectores propios que satisfacen T*V=V*D
 end
 
 function escribir_archivo(S)
    dlmwrite('post_procesad_datos_fem.txt',S)
 end


formas de ejecutar

1
2
>> post_procesad_datos_fem
>> post_procesad_datos_fem('tensor_1.csv')



Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


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
sin imagen de perfil

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por Pablo (6 intervenciones) el 24/02/2014 00:22:28
Muchas gracias!

la idea es que el aspecto del archivo de salida sea "parecido" al de entrada, en cuanto a espaciados en las filas.

Cuando tenga ambos ficheros (tensores (A) y tensiones principales con vectores (S)) realizare el procesado de datos con una macro de excel; para analizar fatiga.

En mi script estoy leyendo un csv y saco un txt, no se si es mejor algun formato en concreto.

Si tiene una sugerencia mejor, digamelo, de nastran puedo sacar un archivo csv, txt o excel.

un saludo
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
sin imagen de perfil

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por Pablo (6 intervenciones) el 24/02/2014 00:52:37
Muchas Gracias

casi lo tenia jejeje...

Un saludo
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
sin imagen de perfil

Problema al escribir en Matriz (Postprocesado Datos FEM)

Publicado por Pablo (6 intervenciones) el 25/02/2014 00:04:52
Buenas de nuevo,

estoy intentando realizar un ejecutable (via deploytool) , pero me encuentro con el siguiente error;

ant:
<ant>
<mkdir dir="C:\Users\Pablo\Documents\MATLAB\PROGRAMA_TENSORES\for_redistribution" />
<mkdir dir="C:\Users\Pablo\Documents\MATLAB\PROGRAMA_TENSORES\for_testing" />
</ant>
mcc -C -o PROGRAMA_TENSORES -W WinMain:PROGRAMA_TENSORES -T link:exe -d C:\Users\Pablo\Documents\MATLAB\PROGRAMA_TENSORES\for_testing -v C:\Users\Pablo\Documents\MATLAB\PROGRAMA_TENSORES.m
Test checkout of feature 'Compiler' failed.

mcc failed.

Le adjunto el archivo con las funciones que deseo compilar.

Un saludo
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