Matlab - crear un archivo .dat

 
Vista:

crear un archivo .dat

Publicado por theoretical (1 intervención) el 11/08/2014 14:28:33
Hola todos, estoy confrontando algunos problemas con este código fuente. El mismo muestra la solución numérica de un sistema de ecuaciones por medio del análisis modal. El programa corre perfectamente bien. El problema que presento y no puedo resolver es, que me gustaría crear un archivo de datos .dat que registre los valores que finalizan en la construcción del gráfico que aparece. El código es el siguiente:

% Código fuente: sistema_dos_amortiguado.m

% ***************************************************
% *** El código fuente determina los eigenvalores ***
% *** y eingenvectores de un sistema mecánico de ***
% *** dos grados de libertad. ***
% ***************************************************
clear all;
clc;
format short
global x;

name01 = input('Ingrese el nombre del archivo para la posicion:','s');
[pos,texto] = fopen(name01, 'w');

% ******************************
% *** Parámetros de entrada. ***
% ******************************
m1 = input('La masa combinada es: ');
m2 = input('La masa 2 es: ');
k1 = input('La primera constante elástica es: ');
k2 = input('La segunda constante elastica es: ');
c1 = input('El primer amortiguador es: ');
c2 = input('El segundo amortiguador es: ');
x2 = input('Condición inicial para x2: ');

% Identifica tanto la matriz de masa como la de rigidez.
M = [0,0,m1,0;0,0,0,m2;m1,0,c1,-c1;0,m2,-c1,c1+c2];
K = [-m1,0,0,0;0,-m2,0,0;0,0,k1,-k1;0,0,-k1,k1+k2];

% Cálculo de los eigenvalores y eigenvectores
C = inv(M) * K;
[V,D] = eig(C);

% Condiciones iniciales:
disp('Despliega condiciones iniciales:');
x0 = [x2;0;0;0]

disp('Despliega eigenvalores');
D
disp('Despliega eigenvectores');
V
disp('Despliega constante de integración.');
S = inv(V)*x0
tk = linspace(0,3,101);

% Evaluación de la respuesta en el tiempo.
for k = 1:101
t = tk(k);
for i = 3:4
x(k,i-2) = 0;
for j = 1:4
x(k,i-2)=x(k,i-2)+(real(S(j))*real(V(i,j))-imag(S(j))*imag(V(i,j)))*cos(imag(D(j,j))*t);
x(k,i-2)=x(k,i-2)+(imag(S(j))*real(V(i,j))-real(S(j))*imag(V(i,j)))*sin(imag(V(i,j))*t);
x(k,i-2)=x(k,i-2)*exp(-real(D(j,j))*t);
end
end
end
plot(tk,x(:,1),'-',tk,x(:,2),':')
title('Solucion del problema')
xlabel('tiempo(seg)')
ylabel('x(m)')
legend('x1(t)','x2(t)')

tk1 = linspace(0,3,101);

for k = 1:101
t = tk1(k);
fprintf('%4.1f ',t);
fprintf('%8.4i ',x(k,1));
fprintf('%8.4i\n ',x(k,2));
end
********************************
NO TENGO IDEA DE DONDE NI COMO COLOCAR LAS INSTRUCCIONES PARA HACER QUE ME GRAVE LOS DATOS DEL GRÁFICO QUE APARECE. LES AGRADECERÍA CUALQUIER AYUDA...
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 Jorge De Los Santos
Val: 30
Ha disminuido su posición en 12 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

crear un archivo .dat

Publicado por Jorge De Los Santos (213 intervenciones) el 12/08/2014 06:37:03
Hola Theoretical.

Creo que lo que necesitas es algo cómo lo siguiente:

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
59
60
61
62
63
64
65
66
67
68
69
70
% Código fuente: sistema_dos_amortiguado.m
 
% ***************************************************
% *** El código fuente determina los eigenvalores ***
% *** y eingenvectores de un sistema mecánico de ***
% *** dos grados de libertad. ***
% ***************************************************
clear all;
clc;
format short
global x;
 
name01 = input('Ingrese el nombre del archivo para la posicion: ','s');
% ******************************
% *** Parámetros de entrada. ***
% ******************************
m1 = input('La masa combinada es: ');
m2 = input('La masa 2 es: ');
k1 = input('La primera constante elástica es: ');
k2 = input('La segunda constante elastica es: ');
c1 = input('El primer amortiguador es: ');
c2 = input('El segundo amortiguador es: ');
x2 = input('Condición inicial para x2: ');
 
% Identifica tanto la matriz de masa como la de rigidez.
M = [0,0,m1,0;0,0,0,m2;m1,0,c1,-c1;0,m2,-c1,c1+c2];
K = [-m1,0,0,0;0,-m2,0,0;0,0,k1,-k1;0,0,-k1,k1+k2];
 
% Cálculo de los eigenvalores y eigenvectores
C = inv(M) * K;
[V,D] = eig(C);
 
% Condiciones iniciales:
disp('Despliega condiciones iniciales:');
x0 = [x2;0;0;0]
 
disp('Despliega eigenvalores');
D
disp('Despliega eigenvectores');
V
disp('Despliega constante de integración.');
S = inv(V)*x0
tk = linspace(0,3,101);
 
% Evaluación de la respuesta en el tiempo.
for k = 1:101
    t = tk(k);
    for i = 3:4
        x(k,i-2) = 0;
        for j = 1:4
            x(k,i-2)=x(k,i-2)+(real(S(j))*real(V(i,j))-imag(S(j))*imag(V(i,j)))*cos(imag(D(j,j))*t);
            x(k,i-2)=x(k,i-2)+(imag(S(j))*real(V(i,j))-real(S(j))*imag(V(i,j)))*sin(imag(V(i,j))*t);
            x(k,i-2)=x(k,i-2)*exp(-real(D(j,j))*t);
        end
    end
end
plot(tk,x(:,1),'-',tk,x(:,2),':')
title('Solucion del problema')
xlabel('tiempo(seg)')
ylabel('x(m)')
legend('x1(t)','x2(t)')
 
tk1 = linspace(0,3,101);
 
%% Exportar datos ...
fid=fopen([name01,'.dat'],'w'); % Abrir archivo con el nombre dado 
for k=1:length(tk1)
    fprintf(fid,'%0.2f  %0.6f  %0.6f\n',tk1(k),x(k,1),x(k,2));
end
fclose(fid);



Si es necesario, puedes modificar los especificadores de conversión de la función "fprintf" para ajustarlos a la cantidad de decimales que necesitas.


Saludos.

Jorge De Los Santos.
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