Está en la página 1de 8

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P.

. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01


PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

Implementar un programa en Matlab para resolver lo siguiente: 1) Hacer un programa que genere una matriz cuadrado mgico de nxn elementos y que la guarde en un archivo de datos magico_n.txt. Modificar el programa para que lea dicho archivo y calcule el valor mximo de la matriz y la posicin correspondiente.
>> % usamos la sentencia "magic(n)", para obtener una matriz cuadrada nxn. >> %Donde n, nos indica el orede de la matriz cuadrada. >> n=4; >> A=magic(n) A= 16 2 5 11 9 7 4 14 3 13 10 8 6 12 15 1

>> %guardamos la matriz como "magico_n.txt" >> save magico_n.txt ans -ascii >> % Ahora abriremos el archivo guardado y lo modificaremos para >> %para encontrar su mximo valor con su posicin >> type magico_n.txt 1.6000000e+001 5.0000000e+000 9.0000000e+000 4.0000000e+000 >> max(max(A)) ans = 16 >> [a b]=find(A==16) a= 1 b= 1 >> % a ==>Fila >> % b ==>Columna >> % Por lo tanto el mximo valor de la matriz A estar en la Primera >> %fila y la primera columna 2.0000000e+000 1.1000000e+001 7.0000000e+000 1.4000000e+001 3.0000000e+000 1.0000000e+001 6.0000000e+000 1.5000000e+001 1.3000000e+001 8.0000000e+000 1.2000000e+001 1.0000000e+000

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01
PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

2) Hacer un programa para resolver la ecuacin de 2do grado: = 0. Los parmetros a, b y c sern introducidos desde el teclado. Debe tener en cuenta las races reales y complejas. Las races deben aparecer en la pantalla con 6 decimales.
Para implementar este programa usaremos es editor de Matlab. Para ejecutar el editor se Matlab hacemos los siguiente: >> edit Una vez en el editor de texto de Matlab, escribimos el siguiente cdigo: % Encontrar las raices de una ecuacion de segundo grado (ax2+bx+c). % Declaramos nuestras variables fprintf('ingrese los coeficientes de: ax2+bx+c\n'); a=input('ingrese a='); b=input('ingrese b='); c=input('ingrese c='); d=b*b-4*a*c; if d >= 0 x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); fprintf('x1=') fprintf ('%8.4f\n',x1); fprintf('x2=') fprintf ('%8.4f\n',x2); else fprintf ('d<0\n') fprintf ('Por lo tanto no existen soluciones reales'); end % Finalmente guardamos el archivo con el nombre de: ecuacion % Para despues ejecutar nuestro programa ecuacion, asignando valores % de los coeficientes a,b,c. >> a=1; >> b=4; >> c=2; >> ecuacion x1= -0.5858 x2= -3.4142 >>

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01
PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

3) Hacer un programa para resolver un sistema de ecuaciones lineales: A X = B, donde A es una matriz cuadrada, B es un vector columna y X es un vector columna. Los datos sern ledos desde un archivo. Las incgnitas deben aparecer en la pantalla con 4 decimales. Debe grabar las incgnitas en un archivo solucion.txt.
Para implementar este programa usaremos es editor de Matlab.

Para ejecutar el editor se Matlab hacemos los siguiente: >> edit Una vez en el editor de texto de Matlab, escribimos el siguiente cdigo: %Soluciones de un sistema de ecuaciones lineales. % Para 3 ecuaciones lienales de tres incognitas. fprintf ('Ingrese los elementos de la matriz A\n\n'); a11=input('ingrese a11='); a12=input('ingrese a12='); a13=input('ingrese a13='); a21=input('ingrese a21='); a22=input('ingrese a22='); a23=input('ingrese a23='); a31=input('ingrese a31='); a32=input('ingrese a32='); a33=input('ingrese a33='); fprintf ('\n\nIngrese los elementos de la matriz B\n\n') b11=input('ingrese b11='); b21=input('ingrese b21='); b31=input('ingrese b31='); A=[a11 a12 a13;a21 a22 a23;a31 a32 a33] B=[b11;b21;b31] det(A); C=inv(A); if det(A)<0 || det(A)>0 X=C*B; fprintf('%8.4f\n',X); else fprintf ('det(A)=0\n') fprintf (' el sistema no tiene soluciones ') end

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01
PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

4) Hacer un programa para calcular la distancia entre dos puntos geogrficos de latitud y longitud determinados. Considerar que la Tierra tiene una forma esfrica y que la distancia NO es una lnea recta, sino una longitud de arco esfrica. Sugerencia: L = R , donde es el ngulo formado por los vectores que van del centro a los puntos geogrficos. Los conceptos matemticos y fsicos usados son:

1(1, 1)

2(2, 2)

( ) ( ) ( ) ( ) ( )

% Calcula la longitud de arco entre dos puntos de una esfera fprintf ('Ingrese las coordenadas de P1:\n'); lat1=input('ingrese latitud 1 = '); lon1=input('ingrese longitud 1 = '); fprintf ('\n\nIngrese las coordenadas de P2:\n'); lat2=input('ingrese latitud 2 = '); lon2=input('ingrese longitud 2 = '); r=6378 ; c=(sin((lat1)*pi/180)*cos((lon1)*pi/180)*sin((lat2)*pi/180)*cos((lon2)*pi /180)+sin((lat1)*pi/180)*sin((lon1)*pi/180)*sin((lat2)*pi/180)*sin((lon2) *pi/180)+cos((lat1)*pi/180)*cos((lat2)*pi/180)); B=acos(c); D=r*B; fprintf ('La distancia en Km de P1 a P2 es:\n'); fprintf ('D ='); fprintf ('%8.4f\n',D);

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01
PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

5) El da juliano es el nmero de orden que le corresponde a una fecha dada; por ejemplo, el 01 de enero sera el da juliano 1 y el 31 de diciembre sera el da juliano 365. Hacer un programa para convertir de da juliano a fecha. A qu fecha corresponde el da juliano 220? Variar el programa para tener en cuenta los aos bisiestos: mltiplos de 4, excepto los que terminen en 00, como el ao 2000.
fprintf ('Ingrese da juliano:\n'); n=input('d='); if n<=365 if 0<n & n<=31 fprintf('Enero'); disp(p); else if 31<n & n<=59 fprintf ('Febrero'); p=n-31; disp(p); else if 59<n & n<=90 fprintf('Marzo'); p=n-59; disp(p); else if 90<n & n<=120 fprintf('Abril'); p=n-90; disp(p); else if 120<n & n<=151 fprintf('Mayo'); p=n-120; disp(p); else if 151<n & n<=181 fprintf('Junio'); p=n-151; disp(p); else if 181<n & n<=212 fprintf('Julio'); p=n-181; disp(p); else if 212<n & n<=243 fprintf('Agosto'); p=n-212;

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01
PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

disp(p); else if 243<n & n<=273 fprintf('Septiembre'); p=n-243; disp(p); else if 273<n & n<=304 fprintf('Octubre'); p=n-273; disp(p); else if 304<n & n<=334 fprintf('Noviembre'); p=n-304; disp(p); else if 334<n & n<=365 fprintf('Diciembre'); p=n-334; disp(p); end end end end end end end end end end end end end % Indica si el ao es o no es bisiesto i=input('ingrese el ao: '); if rem(i,4)==0 fprintf('Es ao Bisiesto\n') else fprintf('No es ao Bisiesto\n') end

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01
PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

6) Mtodo de Montecarlo. Se tiene un cuadrado de lado L y una circunferencia inscrita en el cuadrado. Supongamos que lanzamos pequeos dardos a gran distancia. Muchos caern dentro y otros caern fuera de la circunferencia. Sea: n = dardos que caen dentro del circulo N = dardos que caen dentro del cuadrado. La razn de estas dos cantidades ser proporcional a la razn de las reas del cuadrado y de la circunferencia. Hallar una aproximacin de pi en funcin de n y N. Hacer un programa para hallar el valor de pi para un valor de N introducido por el usuario.
fprintf ('Ingrese el numero de dardos\n'); k=input('\n #dardos= '); cir=0; for i=1:k r=-1+2*rand(1); s=-1+2*rand(1); q=r*r+s*s; if q<=1 cir=cir+1; end end u=4*cir/k; fprintf('\nObtendremos el valor aproximado:\n '); fprintf ('\npi='); fprintf ('%8.6f\n',u); %%%Resultados:

Ingrese el numero de dardos #dardos= 1001 Obtendremos el valor aproximado: pi=3.116883

7) Hacer una grfica en 3 dimensiones de la curva gaussiana:


( )

Donde:

1 es la amplitud de la curva. Utilice una grilla para el dominio: 1

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Per, Decana de Amrica) FACULTAD DE CIENCIAS FSICAS E.A. P. DE FSICA PROCESAMIENTO DE DATOS DIGITALES - LABORATORIO 01
PROFESOR ALUMNO : : LIC. CSAR JIMNEZ VCTOR RAL ROJAS POZO

a. Considere que la dimensin de la grilla es unitaria.


>>[x,y]=meshgrid(-10:1:10); >> r=x.*x+y.*y; >> z=10*exp(-r); >> mesh(x,y,z),title('z=f(x,y)'),xlabel('x'),ylabel('y'),zlabel('z')

b. Considere que la dimensin de la grilla es

>> [x,y]=meshgrid(-10:0.2:10); >> r=x.*x+y.*y; >> z=10*exp(-r); >> mesh(x,y,z),title('z=f(x,y)'),xlabel('x'),ylabel('y'),zlabel('z')

c. Modifique el programa para visualizar las curvas de nivel.


>> x=0; >> y=0; >> p=0; >> z=0; >> for w=1:100 r=sqrt(-log(p))+eps; for k=1:20 t=2*pi*k/20; x=[x;r*cos(t)]; y=[y;r*sin(t)]; z=[z;p]; end p=p+0.1; end >> plot3(x,y,z),grid on,title('Curvas Nivel'),xlabel('x'),ylabel('y'),zlabel('z'),xlim([-3 3]),ylim([-3 3])

de

>> [w,q]=meshgrid(-10:0.2:10); >> f=w.*w+q.*q; >> m=10*exp(-f); >>contour3(m,100),title('Curvas de Matlab'),xlabel('x'),ylabel('y'),zlabel('z')

Nivel

con

subrutina

de

También podría gustarte