while expresión lógica A

Anuncio
function y=f(x)
Prácticas de Matemática Aplicada.
% una función que me devuelve el doble de x
y=2*x;
Introduccion a la programación (con MATLAB)
Guardaremos la función en nuestra carpeta con el nombre resto.m.
La primera línea del programa es la declaración de la función. Un fichero cuya
primera línea es una declaración de función se llama fichero de función. El
nombre de la función debe coincidir con el nombre del fichero sin la extensión .m.
Así pues el nombre que daremos al fichero que contiene el programa es doble.m.
En esta primera sentencia se declaran las variables de entrada, en este caso x, y la
variable de salida, en este caso y. Las variables que se crean en un fichero *.m de
función, pertenecen al espacio de trabajo de dicha función, por tanto las letras que
las designan pueden ser usadas de nuevo.
Estructuras de datos, vectores, matrices y cadenas de caracteres.
MatLab nos permite trabajar con diversos tipos de datos. De momento
introducimos variables que pueden ser escalares, vectores o cadenas de caracteres.
Cuando utilizamos alguna variable en Matlab ha de tener algún valor asignado o
nos dará error.
>>x
??? Undefined function or variable 'x'.
El signo % precede a los comentarios de ayuda. Indica que lo que le sigue será
ignorado cuando se ejecute el programa. MATLAB imprimirá en pantalla los
comentarios de ayuda que escribimos en el fichero, cuando se use el comando
help. De este modo contribuimos a la opción help que proporciona MATLAB.
Para asignar valor a las variables usamos =
por ejemplo un escalar x, un vector v y una matriz A
>>x=3
>>v=[2 3 21 2]
>>A=[2 4 5;3 3 5]
A continuación de los comentarios de ayuda se escribe el núcleo del programa. A
la variable y le asignamos el valor 2*x; Esta operación y el “; “ sirve para que no
aparezca en pantalla el resultado antes del final de la ejecución del programa.
Si queremos modificar el valor de una variable existente en función de su valor
actual lo haremos con una expresion del tipo x=f(x) por ejemplo si queremos
multiplicar el valor actual de x por 2 haremos:
>>x=2*x
Podemos leer esta expresion como:
valor nuevo de x=2*valor antiguo de x.
Para aumentar en 5 el valor de x escribimos
>>x=x+5
Veamos ahora un ejemplo de script que me da un numero al azar entre 1 y 10
>> edit
v=randperm(10); %esta instrucción me da una permutacion
%de los 10 primeros numeros
numero=v(1)
Guardamos este fichero en aleatorio.m y ejecutamos
Ficheros de función y scripts.
La diferencia entre las dos es que una función puede tener argumentos de entrada
salida y un script no. Comenzamos con un ejemplo sencillo que consiste en definir
una nueva función.
>> edit
>> aleatorio
Notar que no podemos utilizar la salida de aleatorio para asignar un valor
>> x=aleatorio
da un error porque el script no tiene un valor de salida.
1
CONSTRUCCIONES BÁSICAS DE PROGRAMACIÓN
Operadores relacionales
El lenguaje de programación de MATLAB dispone de los siguientes operadores
relacionales:
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que (el carácter ~ se consigue pulsando Alt 126, manteniendo pulsado
Alt hasta que se complete el 126).
En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices,
y eso hace que tengan un significado especial. Si una comparación se cumple el
resultado es 1 (cierto), mientras que si no se cumple es 0 (falso). Cuando los
operadores relacionales de MATLAB se aplican a dos matrices o vectores del
mismo tamaño, la comparación se realiza elemento a elemento, y el resultado es
otra matriz de unos y ceros del mismo tamaño, que recoge el resultado de cada
comparación entre elementos.
Considérese el siguiente ejemplo como ilustración de lo que se acaba de decir:
» A=[1 2;0 3]; B=[4 2;1 5];
» A==B
ans =
0 1
0 0
» A~=B
ans =
1 0
1 1
Operadores lógicos
Los operadores lógicos de MATLAB son los siguientes:
& “y”
| “o”
~ negación lógica
Los operadores lógicos se combinan con los relacionales para poder comprobar el
cumplimiento de condiciones múltiples.
La bifurcación “if”
Una bifurcación “if”(si) es una construcción de la forma
if condición
sentencias
end
Se puede interpretar como
Si se cumple condición hacer
sentencias
fin
Las sentencias se ejecutan en el caso de que la condición no sea 0 (falsa). Hay que
tener en cuenta que en MATLAB A==B, A<=B, etc. son funciones que toman el
valor 0 o 1. Frecuentemente una bifurcación se escribe
if condición
sentencias 1
else
sentencias 2
end
En este caso else se puede traducir como “en otro caso” es decir, si la condición se
cumple(1) se ejecutan las sentencias 1 y si no se cumple se ejecutan las
sentencias 2.
Podemos incorporar más condiciones con elseif
if condición A
sentencias 1
elseif condición B
sentencias 2
end
En este caso si la condición A no es 0 se ejecutan las sentencias 1 y si es 0 y la
condición 2 no es 0, se ejecutan las sentencias 2. Si las condiciones 1 y 2 son 0 la
bifurcación termina
2
>>edit
function r=g(y)
% g(y) es el vector que da las soluciones reales de
% la ecuación y=0,donde y es el vector de los
% coeficients de un polinomio de segundo
% grado y(1)*x^2+y(2)*x+y(3).
function f(x)
if
Ejemplos.
Vamos a diseñar una funcion que nos diga si un numero que introducimos es
mayor o menor que 0.
y(2)^2-4*y(1)*y(3) >=0
r(1)= (-y(2)+sqrt(y(2)^2-4*y(1)*y(3)))/(2*y(1));
r(2)= (-y(2)-sqrt(y(2)^2-4*y(1)*y(3)))/(2*y(1));
else
'la ecuación no tiene raices reales'
end
if x<0
'menor que 0'
elseif x>0
'mayor que 0'
else
'el numero es 0'
end
BUCLES
MATLAB dispone de dos comandos for (para) y while (mientras), para repetir la
ejecución de sentencias. Esto añade flexibilidad a la ejecución repetida de
sentencias, sujetas a un control lógico.
Guardar el fichero como escero.m
Ejecutar para varios numeros, por ejemplo
>>escero(3)
Bucles “for”
Básicamente, un bucle “for” es una construcción de la forma
Veamos como hacer algo similar con un script utilizando la entrada desde teclado
input.
for i=1:n,
sentencias
end
>>edit
x=input('introduce un numero ')
Se puede interpretar como desde i=1 hasta n hacer
sentencias
fin
if x<0
'menor que 0'
elseif x>0
'mayor que 0'
else
'el numero es 0'
Ejemplos
Vamos a hacer un script que nos de una cuenta atrás. Necesitaremos las funciones
strcat que une varias cadenas de caracteres y num2str que transforma un numero
en una cadena de caracteres (necesario para usar strcat). Pot ultimo pause hace una
pausa de 1 segundo para dar mas realismo a nuestro programa.
Resolver una ecuación de segundo grado.
3
Guardamos el fichero y ejecutamos:
>>recorrevector(V)
for i=1:9
strcat(num2str(11-i), ' segundos para el lanzamiento')
pause(1)
end
strcat(num2str(1), ' segundo para el lanzamiento')
pause(1)
'ignicion'
Ahora queremos que nos cuente el numero de doses que aparecen en el vector.
Para ello hacemos una nueva función:
>>cuentatras
function n=cuentadoses(V)
n=0; %antes de empezar a contar no tengo ningun dos
for i=1:length(V)
if V(i)==2
n=n+1; %si en la posicion en la que estoy
end
%hay un dos aumento en uno el valor
end
%de n.
Veamos como recorrer todos los elementos de un vector o matriz. Dado un vector
V podemos calcular su longitud con el comando length
Podemos hacer lo mismo que antes con matrices. En primer lugar dada la matriz A
el comando size me da un vector de 2 columnas con el numero de filas en la
primera componente y el numero de columnas en la segunda.
Guardamos en cuentatras.m y ejecutamos
Ejemplo:
>>V=[1 2 4 4 2 3 4];
>>length(V)
nos da la respuesta
ans=
7
>> A=[[1 2 2];[4 2 5]]
Ahora si queremos hacer un programa que dado el vector v nos escriba sus
elementos un por uno:
>> size(A)
ans =
>>edit
2
3
Ahora queremos escribir una funcion que escriba todos los elementos uno por uno:
A =
1
4
2
2
2
5
ya en el editor:
function recorrematriz(A)
[nfilas ncolumnas]=size(A);
for i=1:nfilas
for j=1:ncolumnas
A(i,j)
end
end
function recorrevector(V)
for i=1:length(V)
V(i)
end
4
Ejemplos:
finalmente una función que cuente cuantos doses hay:
Cuantos números pares hay debajo de uno dado.
function n=cuentadosmatriz(A)
[nfilas ncolumnas]=size(A);
n=0;
for i=1:nfilas
for j=1:ncolumnas
if A(i,j)==2
n=n+1;
end
end
end
function k=npares(x)
k=0;
while 2*k<x
k=k+1;
end
Ejemplo/Ejercicio
Combinar ejemplos anteriores y hacemos un juego en el que el ordenador genera
un numero aleatorio que nosotros habremos de adivinar y en cada intento nos diga
si nos hemos pasado o nos hemos quedado cortos.
Bucles “while”
El comando “while” repite las sentencias tantas veces como una expresión lógica
sea verdadera. En general un bucle while es de la forma:
while expresión lógica A
sentencias
end.
Se puede interpretar como
Mientras se cumple la condicion A hacer
Sentencias
Hasta que ya no se cumpla. Hay que tener aquí mucho cuidado con no hacer
bucles infinitos. Para ello es a veces util la siguiente sentencia:
Sentencia “break”
Hace que se termine la ejecución del bucle cuando se cumple una condición
lógica.
if condición
break
end
5
end
7. Examinar los siguientes bucles while y determinar el valor de la variable x al
final de cada uno de ellos. ¿Cuántas veces se ejecuta el bucle?
EJERCICIOS.
1.
2.
Escribir una funci\'on de MATLAB para calcular la media aritmética de n
datos.
a) x = 2;
while x <= 200
x = x^2;
end
b) x = 2;
while x > 200
x = x^2;
end
Escribir un programa en MATLAB que calcule la suma de los elementos de
una matriz nxn
3. Escribir un programa en MATLAB que determine si dados 4 números a, b, c,
d están en progresión aritmética
4.
5.
a)
b)
c)
d)
Escribir las sentencias de MATLAB necesarias para obtener los cuadrados de
los números pares entre 0 y 50. Crear una tabla con cada entero y su cuadrado.
8. Diseñar un programa que dado una cadena de caracteres con las letras ATCG,
cuente cuantas veces aparece la letra T y nos diga si aparece o no la secuencia
ATTC.
(por ejemplo probar con C1=’ATTACAATTTATATTATTAAAT’ y con la
secuencia C2=’ATTACAAACAATATATATATATTACAGATTA’, notar que
que C1(k) me da la letra en el lugar k de C1
Determinar cuantas veces se ejecutará un bucle for si escribimos:
for n = 7:10
for j = 7:-1:10
for i = 1:10:10
for –10:3:-7
6. Determinar el valor de x al final de los siguientes bucles:
a) x= 0;
for x = 1:10
x = x+1;
end
b) x = 0;
for x = 1:10
y = x + x;
end
c) x = 0;
for x1 = 1:10
for x2 = x1:10
if x2 >6
break;
end
x = x + 1;
end
6
Descargar