Matlab - Ayuda con Matlab

 
Vista:
sin imagen de perfil

Ayuda con Matlab

Publicado por Catalina (1 intervención) el 24/06/2016 06:58:13
Hola !
Estoy a prontas de un examen de ansisísmica y necesito con urgencia ayuda en la programación de el Método de Diferencias Centradas y el Método de Nemarks.

Estoy hace días haciendo un código y no se porqué me tira error al plotear, me sale un nan en varias variables
les dejo el código para ver si alguien me puede ayudar.

Además si alguno tiene un código con alguno de estos métodos que corra bien para poder ingresar valores de sismos reales, por favor enviar, estaría muy agradecida.

Saludos

Catalina Muñoz

Acá les dejo el código, los datos fueron sacados de http://terremotos.ing.uchile.cl/registros/164
40 Archivo Procesado Concepción.V2 (2,5 mb)


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
% Diferencias Centradas
clear all
close all
clc;
 
%DATOS DEL PROBLEMA ------------------------------------------------------
wn=pi; % wn = [1/s]
chi=0.02; % Adimencional
m=10602; % m = kg
k=(wn^2)*m; % k= [m/s^2]
c=2*chi*m*wn; % c=[kg/s], 
 
um1=0;
dt=0.005;
to=0;
uo=0; % uo = [m]
upo=0; % upo = [m/s]
 
 
%AGREGAR DATOS DE SISMO --------------------------------------------------
ugpp=xlsread('conce terremoto.xml',2); % colocar el nombre del archivo, hoja a usar. (el archivo debe estar guardado en la carpeta MATLAB)
 
[a,b]=size (ugpp);
 
c=a*b; % cantidad de aceleraciones que tiene el sismo
 
ugpp=reshape(ugpp',c,1); %Ordena los datos

t=(0:0.005:c*dt-dt); % tiene que restarse el dt para que así queden iguales y se pueda graficar.

plot (t,ugpp) %grafica el sismo con su respectivo tiempo


% 1.0 CÁLCULOS INICIALES -------------------------------------------------

kton = (m/(dt^2))+ (c/(2*dt));

a = (m/(dt^2))-(c/(2*dt));

b = k - (2*m/(dt^2));

% 2.0 CALCULOS CON TIEMPO i ----------------------------------------------

for i=1:length(t)
  p(i)= -m*ugpp(i);
end

p=[0,p];

up(2)= upo;
u(2)=uo;
upp(2)= (p(2) - c*up(2) - k*u(2))/m;
u(1)= u(2) - dt*up(2) + (((dt^2)*upp(2))/2);

for i=2:length(t)
  pton(i)= p(i) - a*u(i-1) - b*u(i);
  u(i+1)=pton(i)/kton;
end
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

Ayuda con Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/06/2016 06:56:58
podrías subir el archivo conce terremoto.xml'. Yo he probado con un dato aleatorio y no hay error.
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
%Diferencias Centradas
clear all
close all
clc;
 
%DATOS DEL PROBLEMA ------------------------------------------------------
wn=pi; % wn = [1/s]
chi=0.02; % Adimencional
m=10602; % m = kg
k=(wn^2)*m; % k= [m/s^2]
c=2*chi*m*wn; % c=[kg/s], 
um1=0;
dt=0.005;
to=0;
uo=0; % uo = [m]
upo=0; % upo = [m/s]
 
%AGREGAR DATOS DE SISMO --------------------------------------------------
%ugpp=xlsread('conce terremoto.xml',2); % colocar el nombre del archivo, hoja a usar. (el archivo debe estar guardado en la carpeta MATLAB)
ugpp=rand(5,5);
[a,b]=size (ugpp);
c=a*b; % cantidad de aceleraciones que tiene el sismo
ugpp=reshape(ugpp',c,1); %Ordena los datos
t=(0:0.005:c*dt-dt); % tiene que restarse el dt para que así queden iguales y se pueda graficar.
plot (t,ugpp) %grafica el sismo con su respectivo tiempo
 
% 1.0 CÁLCULOS INICIALES -------------------------------------------------
kton = (m/(dt^2))+ (c/(2*dt));
a = (m/(dt^2))-(c/(2*dt));
b = k - (2*m/(dt^2));

% 2.0 CALCULOS CON TIEMPO i ----------------------------------------------
for i=1:length(t)
  p(i)= -m*ugpp(i);
end
p=[0,p];
 
up(2)= upo;
u(2)=uo;
upp(2)= (p(2) - c*up(2) - k*u(2))/m;
u(1)= u(2) - dt*up(2) + (((dt^2)*upp(2))/2);
 
for i=2:length(t)
  pton(i)= p(i) - a*u(i-1) - b*u(i);
  u(i+1)=pton(i)/kton;
end


Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Programador en Matlab
Servicios de programación matlab
[email protected]
El correo es para servicios de 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