Matlab - For aninado en matlab

 
Vista:
sin imagen de perfil

For aninado en matlab

Publicado por allweb (5 intervenciones) el 22/10/2015 06:21:04
Estimados;
Expongo mi duda en busca de su ayuda.
Tengo definido 2 array en matlab. Lo que deseo es que cada elemento del primer array multiplique a cada uno de los elementos del segundo array y que en cada término del recorrido, guarde el nuevo array en un variable. Por ejemplo:
1
2
m = [ 1 2 3]
n = [ 4 5 6 7]
entonces obtenga como resultado esto:
1
2
3
t1 = [1*4 1*5 1*6 1*7]
t2 = [2*4 2*5 2*6 2*7]
t3 = [3*4 3*5 3*6 3*7]

He intentado hacerlo de la siguiente forma:
1
2
3
4
5
6
7
8
9
10
ed = [1 2 3]
nR = [ 4 5 6]
f = [];
i = 1;
j = 1;
for i = 1:length(ed)
  for j =1:length(nR)
  f = [ f ed(i)*nR(j) ];
  end
end

pero obtengo todo en uno sólo: f = [ 1*4 1*5 1*6 1*7 2*4 2*5 2*6 2*7 3*4 3*5 3*6 3*7].

Quisiera obtener 3 funciones separadas.

Espero su ayuda..

Gracias
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 Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

For aninado en matlab

Publicado por Royeth (1818 intervenciones) el 22/10/2015 06:55:11
Bueno para esto no es necesario dos for sino uno solo puedes hacerlo así :
1
2
3
4
5
m = [ 1 2 3];
n = [ 4 5 6 7];
for k=1:length(m)
eval(num2str(k,'t%d=m(k).*n;'))
end



pero bueno en caso tal de que quieras hacerlo con for anidado entonces sería así
1
2
3
4
5
6
7
m = [ 1 2 3];
n = [ 4 5 6 7];
for k=1:length(m)
for s=1:length(n)
eval(num2str(k,'t%d(s)=m(k).*n(s);'))
end
end


espero te sea de ayuda
saludos
https://www.facebook.com/royethmatlab/
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

For aninado en matlab

Publicado por allweb (5 intervenciones) el 22/10/2015 09:16:21
Muchas gracias por tu pronta ayuda. Me ha servido lo indicado.
Es posible meter un plot dentro del bucle para que me grafique los t(i) en funcion de los valores de m dentro de una sola figure?
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 Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

For aninado en matlab

Publicado por Royeth (1818 intervenciones) el 22/10/2015 16:51:07
lo que pasa es que los t siempre te van a dar del mismo tamaño de n y no de m así que si quieres graficarlos debe ser con respecto a n , y sería así :

1
2
3
4
5
6
m = [ 1 2 3];
n = [ 4 5 6 7];
hold on
for k=1:length(m)
eval(num2str(repmat(k,1,2),'t%d=m(k).*n; plot(n,t%d);'))
end

saludos
https://www.facebook.com/royethmatlab/
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

For aninado en matlab

Publicado por allweb (5 intervenciones) el 23/10/2015 02:44:11
Muchas gracias Royeth. Me ha servido 100% lo indicado.
Este el el código que estoy intentando hacer:
Graficar el Diagrama de Moody. Utiliza la ecuación de Haaland para hallar el coeficiente de fricción de un fluído en un régimen turbulento a través de una tubería.
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
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%%PROGRAMA QUE GRAFICA EL DIAGRAMA DE MOODY
%%SE CONSIDERA FLUJO TURBULENTO
%%SE ITERA CON DETERMINADOS VALORES DE RUGOSIDAD RELATIVA E/D.
%%SE ITERA CON DETERMINADOS VALORES DE NUMERO DE REYNOLDS.
%%EL NUMERO DE REYNOLDS SE CALCULA EN BASE A LA FORMULA:
%%     nReynolds = VELOCIDAD*DENSIDAD*DIAMETRO_TUBERIA/mu
%% LA RUGOSIDAD RELATIVA SE CALCULA EN BASE A LA FORMULA:
%%     e/DIAMETRO = ed
%% EL COEFICIENTE DE RUGOSIDAD (f) SE CALCULA EN BASE A LA FORMULA DE HAALAND:
%% 1/f^(1/2)=-1.8*log[(6.9/nReynolds)+(ed/3.7)^1.11]
clear all;
clc all;
close all;
nReynolds = [3000];
ed = [0.00001 0.00002 0.00005 0.0001 0.0002 0.0004 0.0006 0.0008 0.001 0.0015 \
0.002 0.003 0.004 0.006 0.008 0.01 0.0125 0.015 0.0175 0.02 0.025 0.03 0.035 \
0.04 0.045 0.05 0.06 0.07];
f = [];
hold on;
for i = 2:214
  nReynolds = [nReynolds 1.05015*nReynolds(i-1)];
end
%hold on;
for i = 1:length(ed)
  for j = 1:length(nReynolds)
  f = 0.30864/(log10((6.9/nReynolds(j))+(ed(i)/3.7)^1.11))^2;
%%%  eval(num2str(repmat(i,1,2),'f%d(j)=f;loglog(nReynolds,f%d);')); %% pensé que así podría plotear, pero no sale.
eval(num2str(i,'f%d(j)=f;'));
  end
end
No he podido meter el plot múltiple dentro del for. Lo que he hecho por el momento es plotear cada gráfica con:
hold on;
loglog(nReynolds, f1)
loglog(nReynolds, f2)
.
.
.
Lo que hace es graficar curvas por cada ed (rugosidad relativa) para un rango permanente de nReynolds (número de Reynolds)
En el eje Y (izquierdo) está el factor de fricción y en el eje X está el nReynolds. Quisiera que en el eje Y derecho se coloque cada ed en cada curva graficada. Por favor una mano que ya está casi terminada.

La gráfica de referencia es esta:
https://raulsmtz.files.wordpress.com/2011/03/moody.jpg
En la gráfica se puede apreciar que cada curva está referencia a cada ed (en el eje Y derecho) y es lo que quisiera lograr.
Sólo he intentado graficar las curvas logarítmicas que pertenecen al régimen turbulento, por lo que la primera recta no está considerada (que es para régimen laminar)
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

For aninado en matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/10/2015 15:18:15
El problema está en entender lo que deseas hacer, porque loglog() admite como entradas a vectores. Acabo de ver lo que haz puesto la gráfica pero hay mucha información y entender implica tiempo si es que no explicas en forma personal. Puede ser por asesoría online donde al parecer como máximo horas se puede hacer.

Saludos
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
[email protected]
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


http://matlabcaballero.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
sin imagen de perfil

For aninado en matlab

Publicado por allweb (5 intervenciones) el 24/10/2015 06:24:07
He logrado plotear dentro del for. Les paso mi código.
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
clear all;
clc all;
close all;
nReynolds = [3000];
ed = [0.00001 0.00002 0.00005 0.0001 0.0002 0.0004 0.0006 0.0008 0.001 0.0015 \
0.002 0.003 0.004 0.006 0.008 0.01 0.0125 0.015 0.0175 0.02 0.025 0.03 0.035 \
0.04 0.045 0.05 0.06 0.07];
f = [];
hold on;
for i = 2:214
  nReynolds = [nReynolds 1.05015*nReynolds(i-1)];
end
hold on;
for i = 1:length(ed)
  for j = 1:length(nReynolds)
  f = 0.30864/(log10((6.9/nReynolds(j))+(ed(i)/3.7)^1.11))^2;
 
  eval(num2str(i,'f%d(j)=f;'));
  end
end
figure (1)
hold on;
grid on;
for i=1:length(ed)
eval(num2str(i,'loglog(nReynolds,f%d)'))
end
title("Diagrama de Moody")
xlabel ("Number Reynolds")
ylabel ("Factor friction")
axis([20000 110000000 0.008 0.09])

Lo que aún no puedo es hacer que se imprima al costado de cada gráfica los valores de ed.
Pensé que con este código se podía, Pero no lo he logrado.
1
2
3
4
for i=1:length(ed)
VAL = ed(i);
text(nReynolds(214),eval(num2str(i,'f%d(214)')),'VAL');
end
Pero text no acepta 'VAL' como variable ya que según el help, ahí se coloca literalmente lo que va a ir escrito en cada gráfica.
Si lo ejecutamos, tendremos la palabra VAL en cada línea.
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

For aninado en matlab

Publicado por allweb (5 intervenciones) el 24/10/2015 08:21:00
Estimados Ya lo he conseguido.
Este es el código completo:
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
clear all;clc all;close all;
nReynolds = [3000];
ed = [0.00001 0.00002 0.00005 0.0001 0.0002 0.0004 0.0006 0.0008 0.001 0.0015 \
0.002 0.003 0.004 0.006 0.008 0.01 0.0125 0.015 0.0175 0.02 0.025 0.03 0.035 \
0.04 0.045 0.05 0.06 0.07];
f = [];
for i = 2:214
  nReynolds = [nReynolds 1.05015*nReynolds(i-1)];
end
hold on;
for i = 1:length(ed)
  for j = 1:length(nReynolds)
  f = 0.30864/(log10((6.9/nReynolds(j))+(ed(i)/3.7)^1.11))^2;
  eval(num2str(i,'f%d(j)=f;'));
  end
end
figure (1)
hold on;grid on;
for i=1:length(ed)
eval(num2str(i,'loglog(nReynolds,f%d)'))
end
title({'Diagrama de Moody - Seccion Flujo Turbulento'; ' '; \
'{f} ^{-1/2} = -1.8 * log10 [ ( 6.9 / nReynolds ) + ( ed / 3.7 ) ^{1.11}]'})
xlabel ("Number Reynolds"); ylabel ("Factor friction");
for i=1:length(ed)
VAL = ed(i);
str = ['ed = ',num2str(VAL)];
text(nReynolds(214),eval(num2str(i,'f%d(214)')),str);
end
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