Sie sind auf Seite 1von 12

Laboratorio #1 de Procesamiento de datos digitales

Problema1.

Hacer un programa que genere una matriz cuadrado mgico de nxn elementos y que la guarde en
un archivo de datos mgico_n.txt. Modificar el programa para que lea dicho archivo y calcule el
valor mximo de la matriz y la posicin correspondiente.

El primer programa sera:

n= input(ingrese el orden de la matriz cuadrada:);

A = magic(n);

save -ascii mgico_n.txt A

Aqu una captura de pantalla:

El segundo programa sera:


n=input('ingrese el orden de la matriz cuadrada:');
A = magic(n)
save -ascii magico_n.txt A;
B = load('-ASCII','magico_n.txt');
m=max(max(B)); %haya el valor mximo de B, y lo almacena en b
fprintf('%s %6.0f \n','El valor mximo es',m)
[x,y]=find(B==m); %Busca la fila y la columna de b, y
% las almacena en "x" y "y",respectivamente
fprintf('%s %6.0f \n','La fila del valor mximo es',x)
fprintf('%s %6.0f \n','La columna del valor mximo es',y)

Captura de pantalla:

Problema 2. Hacer un programa para resolver la ecuacin de segundo grado ax2 +bx+c =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.

Se propone el siguiente programa:


a=input('ingrese a:');
b=input('ingrese b:');
c=input('ingrese c:');
if (a == 0)
disp('ecuacion de 1er grado');
r=-b/c;
fprintf('%s %8.6f \n','r= ',r);
end
if (a ~= 0)
d=b*b-4*a*c;
p=-b/(2*a);
q=sqrt(d)/(2*a);

if (d >= 0)
disp('raices reales')
r1=p+q;
fprintf('%s %8.6f \n','r1= ',r1);
r2=p-q;
fprintf('%s %8.6f \n','r2= ',r2);
end
if (d < 0)
disp('raices complejas')
r1=p+q;
r2=p-q;
fprintf('%s %8.6f + %8.6f i\n','r1= ',real(r1),imag(r1));
fprintf('%s %8.6f - %8.6f i\n','r2= ',real(r2),imag(r1));
end

end

Captura de pantalla mostrando los resultados:

Problema 3. Hacer un programa para resolver un sistema de ecuaciones lineales AX=B. Hallar la
det(A) y decidir si existe o no solucin. Los datos deben ser ledos desde un archivo. Las incgnitas
deben aparecer en la pantalla con 4 decimales. Debe grabar las incgnitas en un archivo
solucin.txt.

Se implement el siguiente programa:


M = load('-ASCII','datosmatriz.txt');

% La matriz del archivo se separa en dos matrices:


b=M(:,4); %Esta es una matriz columna
A=M(:,1:3); %Esta es una matriz cuadrada
d=det(A); % Se halla la determinante de A
if (d~=0)
disp('El sistema tiene solucin')
x=inv(A)*b
save -ascii solucion.txt x;
else
disp('El sistema no tiene solucin')
end
% Si existe solucin, esta se muestra en pantalla y tambin se guarda
en el archivo solucion.txt

Captura de pantalla con los resultados:

Problema 4. Hacer un programa para calcular la distancia entre dos puntos geogrficos de latitud y
longitud determinados. Considerando que la Tierra tiene 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. Cul es la distancia en Km entre Lima y
New York?

El programa implementado es el siguiente:


fprintf('%s \n','Ingrese las coordenadas geogrficas en grados
decimales')
la1=input('*ingrese latitud 1: '); %se leen los ngulos medidos en
grados sexagecimales
lo1=input('*ingrese longitud 1: ');
la2=input('*ingrese latitud 2: ');
lo2=input('*ingrese longitud 2: ');
R= 6371; % radio de la Tierra medido en kilometros
x1=R*cosd(la1)*cosd(lo1); %Se calculan las coordenadas cartesianas del
primer punto geogrfico
y1=R*cosd(la1)*sind(lo1);
z1=R*sind(la1);

x2=R*cosd(la2)*cosd(lo2); %Se calculan las coordenadas cartesianas del


segundo punto geogrfico
y2=R*cosd(la2)*sind(lo2);
z2=R*sind(la2);

% Se calcularn los mdulos de los radio vectores determinados por


estos
% puntos, y se calcular el producto punto vectorial entre ellos
M1 = sqrt(x1.^2 + y1.^2 + z1.^2); %Mdulo del primer radio vector
M2 = sqrt(x2.^2 + y2.^2 + z2.^2); %Mdulo del segundo radio vector
PP = x1*x2 + y1*y2 + z1*z2; % roducto punto de los radio vectores

% El ngulo que forman estos vectores entre s, es


theta= acos(PP/(M1*M2)); %El ngulo est expresado en radianes

% La longitud de arco(en kilometros) de separacin ser


L = R*theta;

fprintf('%s %8.6f %s \n','La longitud de arco de separacion


es=',L,'Km');

Captura de pantalla de los resultados:


Se us Google Earth para verificar el resultado:

Problema 5. El da juliano es el nmero de orden que le corresponde a una fecha dada. 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.

Tomando en cuenta todas las consideraciones anteriores se implement el siguiente programa:


a=input('Ingrese ao a considerar:');
d=input('Ingrese da juliano:');

% Nos aseguramos de que el ao ingresado es bisiesto


if (rem(a,4) ==0)
if (rem(a,100)~=0)
feb=29;
else
feb=28;
end
else
feb=28;
end

% Calculamos los das acumulados hasta un respectivo


% mes. Por ejemplo, los das acumulados desde el primero
% de enero hasta el fin de mayo se denota hmay
hene=31;
hfeb=feb+hene;
hmar=31+hfeb;
habr=30+hmar;
hmay=31+habr;
hjun=30+hmay;
hjul=31+hjun;
hago=31+hjul;
hsep=30+hago;
hoct=31+hsep;
hnov=30+hoct;
hdic=31+hnov;

if (d>hdic)
disp('da juliano no vlido');
else

if (d-hene <= 0)
fprintf('%s %d %s %d \n','La fecha es ',d,'de enero de',a);
elseif (d-hfeb <= 0)
fprintf('%s %d %s %d \n','La fecha es ',d-hene,'de febrero de',a);
elseif (d-hmar <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hfeb,'de marzo de',a);
elseif (d-habr <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hmar,'de abril de',a);
elseif (d-hmay <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-habr,'de mayo de',a);
elseif (d-hjun <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hmay,'de junio de',a);
elseif (d-hjul <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hjun,'de julio de',a);
elseif (d-hago <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hjul,'de agosto de',a);
elseif (d-hsep <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hago,'de septiembre
de',a);
elseif (d-hoct <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hsep,'de octubre de',a);
elseif (d-hnov <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hoct,'de noviembre
de',a);
elseif (d-hdic <=0)
fprintf('%s %d %s %d \n','La fecha es ',d-hnov,'de diciembre
de',a);
end
end
Captura de pantalla con algunos resultados como ejemplo:

Problema 6.

A continuacin, se mostrar un programa que permite hallar el valor de pi mediante el mtodo


de Montecarlo. Del enunciado del problema se define N= dardos que caen dentro del cuadrado y
n= dardos que caen dentro del crculo.

Se implement el siguiente programa:


N=input('ingrese numero de dardos que caen al cuadrado:');
n = 0;
for i=1:N
x=rand;
y=rand;
r=sqrt(x.^2 + y.^2);
if (r <= 1)
n= n+1;
end
end
p= 4*(n/N);

fprintf('%s %8.6f \n','el valor de pi es =',p);


Captura de pantalla con los resultados:

Problema 7. Hacer una grfica en 3 dimensiones de la curva gaussiana: Z = Ae-(x^2+y^2) donde A=10
es la amplitud de la curva. Utilice una grilla para el dominio: -10<x<10 -10<y<10

a. Considerando que la dimensin de la grilla es unitaria se tiene el siguiente programa:


A=10;
x=-10:1:10;y=-10:1:10;
[X,Y]=meshgrid(x,y);
Z = A*exp(-(X.^2 + Y.^2));
mesh(X,Y,Z)

Captura de pantalla con los resultados:


b. Considerando que la dimensin de la grilla es 0.2 se tiene el siguiente programa:
A=10;
x=-10:0.2:10;y=-10:0.2:10;
[X,Y]=meshgrid(x,y);
Z = A*exp(-(X.^2 + Y.^2));
mesh(X,Y,Z)

Captura de pantalla con los resultados:


c. Se modific el programa para visualizar las curvas de nivel:

A=10;
x=-10:0.2:10;y=-10:0.2:10;
[X,Y]=meshgrid(x,y);
Z = A*exp(-(X.^2 + Y.^2));
contour(X,Y,Z)
colorbar

Captura de pantalla con los resultados:


iiihiuhi

Das könnte Ihnen auch gefallen