Académique Documents
Professionnel Documents
Culture Documents
Input: nos permite solicitar datos empleando un texto (entre comillas simples) de la siguiente manera:
variable = input (‘mensaje para solicitud de datos’);
% Publicación de resultados:
% Método 1:
disp('la hipotenusa es: ')
hipotenusa
% Método 2:
disp(['La hipotenusa es: ', num2str(hipotenusa)]);
Método 2:
DEBER:
DOS MANERAS ADICIONALES PARA PUBLICAR RESULTADOS
1.- El comando fprintf se utiliza para visualizar salidas de programas (texto y datos) en Ia
pantalla, o bien para almacenarlas en un archivo, a diferencia de disp, Ia salida puede
tener un formato preestablecido. Gracias a su expresividad, el comando fprintf es útil en
Ia visualización de salidas, pero esta misma razón hace que este comando sea un tanto
complejo y con una sintaxis larga en algunos casos. Pero nos permitirá visualizar
mensajes de texto, números y cadenas en la salida, dar formato a la visualización y
almacenar datos en disco.
Para visualizar texto y datos (valores de variables) juntos, el comando fprintf debe
utilizarse siguiendo la sintaxis:
2.- Con el comando fprintf es posible insertar tantos valores numéricos (variables) como
se quiera dentro del texto. Es necesario teclear % (seguido del formato del elemento) en
tantos sitios como se desee dentro de la cadena de texto, poniendo además después de Ia
cadena, y separadas por comas, las variables a las que se hacen referencia. Debe haber
una por cada %, ordenadas de izquierda a derecha por orden de aparición en el texto.
fprintf('...texto...%f...%f...%f...', variable1, variable2, variable3).
El comando fprintf permite vectorización. Esto significa que cuando se introduce una
variable de tipo array para ser visualizada, el comando muestra tantos elementos como
haya en el array, utilizando incluso una visualización apropiada, en forma de columnas y
filas, para el caso de las matrices. Ejemplo:
OPERADORES RELACIONALES
OPERADORES LÓGICOS
Como vemos en la tabla de verdad anterior, si cualquier operando de una expresión AND es falso, toda la
expresión debe ser falsa. Por lo tanto, si (Exp1) se evalúa como falso, toda la expresión es falsa y se ahorra
tiempo y recursos.
En el caso de OR, si una de las expresiones es verdadera, toda la expresión es verdadera de modo que ya
no hace falta evaluar la otra expresión.
Con el cortocircuito, el segundo operando expr2 es evaluado solamente cuando el primer operando expr1
no determina completamente el resultado.
Sintaxis y descripción
Expr1 && Expr2 representa una operación AND lógica que emplea comportamiento de cortocircuito.
Expr1 || Expr2 representa una operación lógica OR que emplea un comportamiento de cortocircuito.
Sin embargo, se recomienda emplear paréntesis para especificar explícitamente las operaciones que se
desea realizar. Por ejemplo:
1.-
if (notaMedia >= 5) | (examenFinal >= 5)
disp('Aprobado');
end
2.-
if (edad>=18&edad<=20)|(edad==21&edad<=23)
disp('No puede pasar.');
else
disp('Puede pasar.');
end
ans =
1 1 1
1 1 0
0 0 0
Operación Resultado
S1 & S2 R = S1 & S2
S&A R(1) = S & A(1); ...
R(2) = S & A(2); ...
A1 & A2 R(1) = A1(1) & A2(1);
R(2) = A1(2) & A2(2); ...
S1 | S2 R = S1 | S2
S|A R(1) = S | A(1);
R(2) = S | A(2); ...
A1 | A2 R(1) = A1(1) | A2(1);
R(2) = A1(2) | A2(2); ...
Operación Resultado
~S R = ~S
~A R(1) = ~A(1);
R(2) = ~A(2), ...
Genere una matriz 3x5 cuyos elementos estén entre 0 y 50. Después encuentre una matriz en la que 1
indique que el elemento respectivo es > 40, de lo contrario muestre 0.
R = 50* rand(3,5)
R > 40
Resultados:
R=
ans =
1 1 0 1 1
1 0 0 0 0
0 0 1 1 1
Genere una matriz 3x5 cuyos elementos estén entre 0 y 50. Después encuentre una matriz en la que 1
indique que el elemento respectivo está entre 25 y 35, de lo contrario muestre 0.
Resolución:
R = 50* rand(3,5)
(R > 25) & (R < 35)
Resultados:
R=
ans =
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
INSTRUCCIÓN FIND
Es muy útil para encontrar la ubicación, es decir, los índices de los elementos que cumplan una
determinada condición:
Ejemplo 1:
Genere una matriz 3x5 cuyos elementos estén entre 0 y 100. Después encuentre la ubicación de los
elementos mayores que 25 y menores que 35.
Resolución:
clc, close all, clear all
R = 100* rand(3,5)
[fila, columna] = find (R > 25 & R < 35)
Resultados:
R= fila = columna =
34.9984 61.6045 83.0829 91.7194 75.3729 1 1
19.6595 47.3289 58.5264 28.5839 38.0446 3 1
25.1084 35.1660 54.9724 75.7200 56.7822 2 4
Es decir, los elementos mayores que 25 y menores que 35 están ubicados en (1,1), en (3,1) y en
(2,4).
BUCLES ANIDADOS
Se puede tener tantos bucles anidados como se desee. NO HAY LIMITE.
Ejemplo: Dado la matriz A, sin emplear el operador (:), pasar a vector barriendo a) por filas de derecha a
izquierda, b) por columnas de arriba abajo.
Resolución:
ANIMACIONES:
Con el objetivo de dar vida a nuestros ejemplos posteriores, nos interesa tener un método para poder
realizar animaciones, es decir, una secuencia de gráficos de modo que se vea la evolución de los resultados
dependiendo de la variación de algún parámetro. Para cumplir con este objetivo emplearemos la instrucción
pause que permite detener el proceso en tantos segundos, dentro de un lazo for, por ejemplo. Si se desea
que el resultado actual se superponga con el anterior, emplearemos la instrucción hold on antes de la
instrucción plot.
pause:
- Sin parámetros de entrada: Hace que la función en ejecución se detenga y espere a que presione
cualquier tecla antes de continuar.
- pause (n): Hace que la función en ejecución se detenga y espere durante n segundos antes de
continuar. La resolución del reloj es específica de la plataforma. Una pausa de 0.01 segundos
debería ser soportada en la mayoría de las plataformas.
Ejemplo: realizar la animación de una onda sinusoidal variando su fase.
Si además nos interesa grabar esta secuencia de imágenes en un archivo (avi), se debe capturar cada una
de las gráficas como fotogramas por medio de la instrucción getframe. Todas estas se almacenan en un
arreglo que se puede convertir en archivo avi empleando la instrucción movie2avi.
getframe:
La función getframe devuelve un vector columna con la información necesaria para reproducir la imagen
que se acaba de representar en la figura o ventana gráfica activa. El tamaño de este vector columna
depende del tamaño de la ventana, pero no de la complejidad del dibujo. Generalmete getframe se usa
dentro de un ciclo FOR para crear un arreglo con varios cuadros de una película.
movie2avi:
Crear una película entrelazada de audio / vídeo (AVI) de la película de MATLAB, su sintáxis es:
movie2avi(mov,filename)
movie2avi(mov,filename,param,value,param,value...)
Ejemplo: Determinar la ecuación de una recta que pasa por un punto (x1, y1) y que tenga una pendiente
conocida m. Después, si (x1, y1) es (1,2) realizar la animación de esta recta girando desde 0 a 360 grados.
Resolución:
La ecuación de una recta que pasa por un punto (x1, y1) y tiene una pendiente m=tan α es la siguiente:
𝑦 = m(𝑥 − 𝑥1 ) + 𝑦1 = tan 𝛼(𝑥 − 𝑥1 ) + 𝑦1
𝑦 = tan 𝛼 (𝑥 − 1) + 2
Ya que necesitamos que la recta gire desde 0 hasta 360, el ángulo alfa actuará como contador en el lazo
for:
clc, close all, clear all
for angulo =1:360
x=-50:0.1:50;
y=tan(angulo*pi/180)*(x-1)+2;
plot (x,y);
grid on;
axis ([-50,50,-50,50]);
xlabel ('x');
ylabel('y');
M(angulo) = getframe
end
DEBER:
Realizar DOS aplicaciones libres sobre animación que tengan una complejidad considerable.
Código:
clear,close all,clear all
figure(1)
%variables
x=[];
v=[];
F=[];
%parametros
m=1;
g=[0;-9.81];
h=0.01;
%condiciones iniciales
x=[0;0];
v=[0.1;4];
%variable externa
F=m*g;
for step=1:100
plot(x(1),x(2),'ob');
title(['step :',num2str(step)]);
axis([-0.2 0.2 -1 1]);
pause(0.01);
%guardar valor anterior
xa=x;
va=v;
%paso integración
vpm = va + (h/2)*(F/m);
xpm = xa + (h/2)*va;
v = va + h*(F/m);
x = xa + h*vpm;
end
2.- Órbita de una partícula alrededor de otra estática.
Código:
clear,clear all,close all
figure(1)
%variables
x=[];
v=[];
F=[];
%parametros
m=1;
M=1e20;
G=6.67e-11;
h=0.01;
%condiciones iniciales
x=[-1e3;0];
v=[0;-2e3];
%variable externa
F=-G*(m*M/norm(x)^2)*(x/norm(x));
for step=1:500
hold off;
scatter(x(1),x(2), 'black','filled');
hold on
scatter(0,0,'black','filled');
title(['step : ', num2str(step)]);
axis([-1.5e3 1.5e3 -1.5e3 1.5e3]);
pause(0.01);
%guardar valor anterior
xa=x;
va=v;
%paso integración
F=-G*(m*M/norm(xa)^2)*(xa/norm(xa));
vpm = va + (h/2)*(F/m);
xpm = xa + (h/2)*va;
F=-G*(m*M/norm(xpm)^2)*(xpm/norm(xpm));
v = va + h*(F/m);
x = xa + h*vpm;
end