Autor Tema: Guardar Variables en Matlab.

0 Usuarios y 1 Visitante están viendo este tema.

26 Septiembre, 2011, 12:21 am
Leído 1589 veces

Jorge quantum

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 120
  • Karma: +0/-0
  • Sexo: Masculino
Hola.

Tengo el siguiente problema: En una red cuadrada tridimensional necesito hallar la distancia de cada punto del espacio al origen. He hecho el siguiente código en Matlab para ello:

X=-1:0.5:1; Y=-1:0.5:1; Z=-1:0.5:1;

for i=1:2
        X1=X(i);
    for l=1:2
        Y1=Y(l);
        for m=1:2
            Z1=Z(m);
            A=[X1 Y1 Z1];
            R=sqrt(X1^2+Y1^2+Z1^2);     
           
    end
   
    end
end

La primera línea me da la región en donde deseo hallar las distancias. Los ciclos anidados hacen que varíen los puntos \( (x,y,z) \) y finalmente \( R \) me da la distancia del punto de coordenadas \( (x_0,y_0,z_0) \) con el origen. Mi problema radica en que quiero guardar cada distancia \( R \) en un vector aparte (necesito cada dato para hallar otra cosa), pero lo único que consigo es el último valor que me genera el programa.

Estaria muy agradecido de que alguien me ayudara con esto...

26 Septiembre, 2011, 02:13 am
Respuesta #1

mathtruco

  • Moderador Global
  • Mensajes: 5,598
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Hola Jorge quantum,

 en vez de que R sea un número puede ser un vector que se va llenando. Así cuando el programa termine de correr tendrás guardado todos los valores.


X=-1:0.5:1; Y=-1:0.5:1; Z=-1:0.5:1;

cont=1;

for i=1:2
        X1=X(i);
    for l=1:2
        Y1=Y(l);
        for m=1:2
            Z1=Z(m);
            A=[X1 Y1 Z1];
            R(cont)=sqrt(X1^2+Y1^2+Z1^2);
            cont=cont+1;

    end
   
    end
end



O quizás te conviene guardar R como matriz: R(i,l,m) para distinguir más fácil a qué valor corresponde cuando necesites usarlos.

26 Septiembre, 2011, 04:26 am
Respuesta #2

Jorge quantum

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 120
  • Karma: +0/-0
  • Sexo: Masculino
Ohh gracias...lo del contador un amigo  me lo dijo al rato, pero me gusta mucho más lo de la matriz..gracias.. :)

27 Septiembre, 2011, 04:16 am
Respuesta #3

Jorge quantum

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 120
  • Karma: +0/-0
  • Sexo: Masculino
Ahora tengo otro problema para guardar los datos de otra forma: Tengo tres vectores, a saber:
 
\( (x_1,x_2,x_3,\ldots,x_n) ; (y_1,y_2,y_3,\ldots,y_n) ; (z_1,z_2,z_3,\ldots,z_n) \) y quisiera organizarlos en una matríz de la forma:

\( \displaystyle  \begin{pmatrix}
x_1 & y_1 & z_1\\
 x_1&y_1  &z_2 \\
 x_1& y_1 &z_3 \\
x_1 &y_2  &z_1 \\
 x_1&y_2  &z_2 \\
 x_1&y_2  &z_3 \\
 x_1& y_3 &z_1 \\
 x_1& y_3 &z_2 \\
 x_1&y_3  &z_3 \\
x_2&y_1&z_1\\
x_2&y_1&z_2\\
x_2&y_1&z_3\\
\vdots &\vdots &\vdots
\end{pmatrix} \)

Lo que hago es volver a combinar las posiciones de cada vector, dejando algunos fijos, pero no se como hacer este arreglo en Matlab. Estaria agradecido a quien me colaborara...

27 Septiembre, 2011, 05:01 am
Respuesta #4

mathtruco

  • Moderador Global
  • Mensajes: 5,598
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Hola Jorge quantum,

 ¿seguro de lo que necesitas?

Ahora tengo otro problema para guardar los datos de otra forma: Tengo tres vectores, a saber:
 
\( (x_1,x_2,x_3,\ldots,x_n) ; (y_1,y_2,y_3,\ldots,y_n) ; (z_1,z_2,z_3,\ldots,z_n) \) y quisiera organizarlos en una matríz de la forma:

\( \displaystyle\begin{pmatrix}
x_1 & y_1 & z_1\\
x_1&y_1&z_2 \\
x_1& y_1 &z_3 \\
x_1 &y_2 &z_1 \\
x_1&y_2 &z_2 \\
x_1&y_2&z_3 \\
x_1& y_3 &z_1 \\
x_1& y_3 &z_2 \\
x_1&y_3&z_3 \\
x_2&y_1&z_1\\
x_2&y_1&z_2\\
x_2&y_1&z_3\\
\vdots &\vdots &\vdots
\end{pmatrix} \)

Lo que hago es volver a combinar las posiciones de cada vector, dejando algunos fijos, pero no se como hacer este arreglo en Matlab. Estaria agradecido a quien me colaborara...


Inspírate en lo siguiente (sería la forma de construir la segunda columna):

Código: [Seleccionar]
c2aux=[y(1)*ones(3,1);y(2)*ones(3,1);y(3)*ones(3,1)]

c2=[c2aux;c2aux;c2aux;c2aux;c2aux]   %(cuantas repericiones necesites)

La primera y tercera columnas c1aux y c3aux las puedes construir en forma análoga, y con eso tu matriz sería:

Código: [Seleccionar]
[c1aux c2aux c3aux]
Cuidando que las dimensiones de las tres columnas sea la misma (si no te dará error relacionado con la dimensión de las matrices).

Llenar matrices de esta forma suele funcionar mejor en matlab que usar ciclos for.  La ventaja de matlab (MATrix LABoratory) es que las variables son matrices que a su vez pueden tener como elementos otras matrices.