Matlab - tabla de datos en funcion

 
Vista:
sin imagen de perfil

tabla de datos en funcion

Publicado por esteban (3 intervenciones) el 06/12/2016 05:24:42
Hola. Soy un tanto nuevo en matlab pero por un trabajo de la universidad me han encargado hacer algo que sencillamente no se como hacer.

Tengo una columna de datos en un bloc de notas, son muchisimos datos (solo numeros)

Estos datos los necesito poner en un programa del matlab, para comenzar, de una forma eficiente.

La idea, luego de eso, es que mediante una funcion logre hacer que a cada dato que tengo en el bloc de notas, le haga una operacion de paso a paso, es decir por ejemplo:

kn = k + g/(b*dt)*c + 1/(b*dt^2)*m;
u(1) = 0;
v(1) = 0;
a(1) = (p(1) - v(1)*c - u(1)*k)/m;
n1=((1/b*dt^2)*m + (g/(b*dt))*c);
n2=((1/(b*dt))*m + ((g/b)-1)*c);
n3=((1/(2*b))-1)*m + dt*((g/(2*b))-1)*c;
%las variables que aparecen arriba, estan definidas en otra parte del programa, que no vi necesario poner aqui
%como por ej m, c, b, dt, etcc
for i=1:n-2
dp(i)=p(i)+(u(i).*n1)+(v(i).*n2);
u(i+1) = dp(i)./kn + u(i);
v(i+1) = (((u(i+1)-u(i))).*(g/(b*dt))+ v(i).*(1-(g/b)) + a(i).*dt*(1 - (g/(2*b)))) + v(i);
a(i+1) = ((u(i+1) - u(i)).* 1/(b*dt^2) - (v(i).* 1/(b*dt)) - (a(i).*1/(2*b))) + a(i);

la idea que tengo con esa funcion es que parta calculando el dp(1) para luego calcular el u(2) v(2) y a(2), luego pase a calcular el dp(2) con el nuevo valor que "debiese tomar" del p(2) el u(2) el v(2) y el a(2), luego el dp(2), dp(3) y etc, pero al final la funcion no hace eso, ya que los resultados que da son totalmente elevados.
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

tabla de datos en funcion

Publicado por Royeth (1818 intervenciones) el 06/12/2016 18:02:29
puede ser un problema de lectura de tus datos , verifica que los datos que esté leyendo estén de forma correcta ,
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

tabla de datos en funcion

Publicado por esteban (3 intervenciones) el 06/12/2016 20:44:29
Lo que pasa es que tengo un bloc de notas con datos asi:
1
2
3
4
5
6
7
0,2323
0,2454
0,5432
0,6534
0,5432
0,5458
0,6334
Es decir una columna de datos, esa columna de datos la paso al matlab. y la guardo como p
es decir p(1)=0,2323 para este ejemplo

Luego necesito que mediante la funcion que defini, tome el primer valor y calcule, luego tome los valores calculados y repita el proceso pero esta vez con el segundo valor de la tabla, y asi.. No entiendo si la funcion esta mal definida o que..

Saludos!
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

tabla de datos en funcion

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 08/12/2016 17:38:45
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
clear all
clear
clc
fid=fopen('tabla_de_datos.txt');
 i=1;
 while 1
 linea = fgetl(fid);
 t=strfind(linea,',');
 linea(t)='.';
 if ~ischar(linea),
     break,
 end
  p(i,1)=str2double(linea);
 i=i+1;
 end
k=rand; g=rand; dt=rand; c=rand; m=rand;
b=rand;
kn = k + g/(b*dt)*c + 1/(b*dt^2)*m;
u(1) = 0;
v(1) = 0;
a(1) = (p(1) - v(1)*c - u(1)*k)/m;
n1=((1/b*dt^2)*m + (g/(b*dt))*c);
n2=((1/(b*dt))*m + ((g/b)-1)*c);
n3=((1/(2*b))-1)*m + dt*((g/(2*b))-1)*c;
n=length(p);
for i=1:n-2
dp(i)=p(i)+(u(i).*n1)+(v(i).*n2);
u(i+1) = dp(i)./kn + u(i);
v(i+1) = (((u(i+1)-u(i))).*(g/(b*dt))+ v(i).*(1-(g/b)) + a(i).*dt*(1 - (g/(2*b)))) + v(i);
a(i+1) = ((u(i+1) - u(i)).* 1/(b*dt^2) - (v(i).* 1/(b*dt)) - (a(i).*1/(2*b))) + a(i);
end
dp
u,v,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
dp =
 
   1.0e+05 *
 
    0.0000   -0.0007    0.0103   -0.1727    2.8450
 
 
u =
 
         0    0.0002   -0.0738    1.0100  -17.1468  281.9588
 
 
v =
 
   1.0e+04 *
 
         0   -0.0000    0.0006   -0.0100    0.1642   -2.7097
 
 
a =
 
   1.0e+05 *
 
    0.0000   -0.0000    0.0007   -0.0111    0.1826   -3.0137

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]


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

tabla de datos en funcion

Publicado por esteban (3 intervenciones) el 08/12/2016 20:23:10
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