Subido por Rodrigo

Capitulo-7

Anuncio
CAPÍTULO 7
Programación en MATLAB
7.1 Operadores relacionales y lógicos
Operadores relaciones
( >, < , <= , >= , = = ,~=)
•
Cuando se comparan dos números, el resultado es 1 si la comparación es
verdadera y 0 si es falsa.
•
Si se comparan dos arrays (sólo si tienen el mismo tamaño), la comparación se
llevará a cabo elemento a elemento, y el resultado será también un array del
mismo tamaño que los anteriores. Éste contendrá ceros y unos dependiendo del
resultado de la comparación.
•
Si se compara un número con un array, se comparará el número con todos los
elementos del array, de forma que el resultado será un array lógico, con unos y
ceros.
>> 5>8
ans =
0
>> a=5<10
a=
1
>> y=(6<10)+(7>8)+(5*3= =60/4)
y=
2
>> b=[15 6 9 4 11 7 14];c=[8 20 9 2 19 7 10];
>> d=c>=b
d=
0
1
1
0
1
1
0
>> b= =c % comprueba si los elementos de b son iguales a los de c.
ans =
0
0
1
0
0
1
0
>> b~=c % comprueba si los elementos de b son diferentes de los de c.
ans =
1
1
0
1
1
0
1
>> f=b-c>0 % Resta c a b y después comprueba qué elementos son mayores que 0.
f=
1
0
0
1
0
0
1
>> A=[2 9 4;-3 5 2;6 7 -1]
A=
2
9
4
-3
5
2
6
7
-1
>> B=A<=2 % Comprueba si los elementos de A son menores ó iguales que 2. Asigna
% el resultado a la matriz B.
B=
1
0
0
1
0
1
0
0
1
•
El resultado de una operación relacional con vectores será un vector con unos y
ceros, también llamado vector lógico. Estos vectores se pueden utilizar para
acceder a los elementos de un array.
>> r=[8 12 9 4 23 19 10]
r=
8
12
9
4
23
19
10
>> s=r<=10
s=
1
0
1
1
0
0
1
>> t=r(s) % Se utiliza para acceder a los elementos de r.
t=
8
9
4
10
>> w=r(r<=10) % Lo anterior en una sóla instrucción.
w=
8
9
4
10
>> 3+4<16/2 % + y / se ejecutan primero.
ans =
1
>> 3+(4<16)/2 % 4 < 16 se ejecuta primero. El resultado es 1, ya que es verdadero.
ans =
3.5000
Operadores lógicos
& Y
O
|
~ NO
>> 3&7 % 3 y 7 son números distintos de 0, luego se consideran verdaderos, por lo
tanto el resultado de operación lógica es 1.
ans =
1
>> a=5|0 % El resultado es 1 porque al menos uno de los dos números es
verdadero(distinto de cero).
a=
1
>> ~25 % El resultado es 0(falso), ya que 25, al ser un valor distinto de 0, se
considera verdadero, y el opuesto es, por tanto falso.
ans =
0
>> t=25*((12|0)+(~0)+(0/5))
t=
50
>> t=25*((12&0)+(~0)+(0/5))
t=
25
>> x=[9 3 0 11 0 15];y=[2 0 13 -11 0 4];
>> x&y
ans =
1
0
0
1
0
1
1
1
0
1
>> a=x|y
a=
1
1
>> ~(x+y) % La salida es un vector con cero en cada posición donde el resultado de
x+y sea verdadero(valores distintos de cero), y unos en cada posición
donde el resultado de x+y sea falso(elementos iguales a 0).
ans =
0
0
0
1
1
0
Orden de precedencia:
1 (la mayor)
Paréntesis
2
Exponenciación
3
NO
4
* ,/
5
+,-
6
op. Relacionales
7
Y
8
O
>> x=-2;y=5
y=
5
>> x=-2;y=5;
>> -5<x & x<-1
ans =
1
>> ~(y<7) % y<7 se ejecuta primero, dando verdadero(1), por tanto ~1 es falso(0).
ans =
0
>> ~y<7 % ~y se ejecuta primero, y es verdadero(1), ya que es un valor distinto de
cero, ~1 es 0, y 0<7 es verdadero (1).
ans =
1
>> ~((y>=8)|(x<-1)) % y>=8 (falso), y x<-1(verdadero) se ejecutan primero. El
operador O se ejecuta después (verdadero). ~ se ejecuta al
final, dando como resultado falso(0).
ans =
0
>> ~(y>=8)|(x<-1) % y>=8(falso), y x<-1(verdadero) se ejecutan primero. La
negación de (y>=8) se ejecuta después (verdadero). El
operador O se ejecuta al final, dando como resultado
verdadero (1).
ans =
1
Funciones lógicas predefinidas:
And(A,B)
Equivale a A&B
Or(A,B)
Equivale a A| B
Not (A)
Equivale a ~A
Funciones: all(A), any(A), find(A), find(A>4)
7.2 Sentencias condicionales
if-end, if-else-end, if-elseif-else-end
Ejemplo:C7salario.m
%
%
%
%
%
(if – end)
Un trabajador cobra un determinado salario por hora hasta 40 horas
semanales. Además, si hace horas extras(más de 40 horas
semanales),esas horas se pagan un 50% más. Escribir un
programa(script) que calcule % la paga semanal del trabajador.
Nombre fichero: C7salario.m
t=input('Introduzca el número de horas trabajadas: ');
h=input('Introduzca el salario por hora en euros: ');
PagaSemanal=t*h;
if (t>40)
PagaSemanal=PagaSemanal+(t-40)*0.5*h;
end
fprintf('La paga semanal del trabajador es de %5.2f
Euros',PagaSemanal);
>> C7salario
Introduzca el número de horas trabajadas: 35
Introduzca el salario por hora en euros: 8
La paga semanal del trabajador es de 280.00 Euros
Ejemplo: C7mayor.m
(if – else - end)
%Realizar un programa(script) que lea dos valores numéricos distintos
%X e Y y determine cual es el mayor, dejando el resultado en una
%tercera variable llamada Z.
% Nombre fichero: C7mayor.m
x=input('Introduce primer número: ');
y=input('Introduce segundo número: ');
if (x>y)
z=x;
else
z=y;
end
fprintf('El mayor es : %i',z);
>> C7mayor
Introduce primer número: 2
Introduce segundo número: 3
El mayor es : 3
7.3 La sentencia switch-case
Ejemplo C7semana.m
%Realizar un programa que nos indique el día de la semana(literal) a
%partir de un número(1..7)
% Nombre del fichero: C7semana.m
dia=input('Introduce un dia(1 al 7): ');
switch dia
case 1
fprintf('Lunes');
case 2
fprintf('Martes');
case 3
fprintf('Miércoles');
case 4
fprintf('Jueves');
case 5
fprintf('Viernes');
case 6
fprintf('Sábado');
case 7
fprintf('Domingo');
otherwise
fprintf('Número incorrecto')
end
>> C7semana
Introduce un dia(1 al 7): 4
Jueves
7.4 Bucles
7.4.1
For-end
% Ejemplo C7exponente.m
for k=1:3:10
x=k^2
end
% 1 valor inicial, 3 incremento, 10 valor final
>>C7exponente
x=
1
x=
16
x=
49
x=
100
Bucle for-end y las operaciones elemento a elemento:
En ciertas ocasiones se puede obtener el mismo resultado aplicando un bucle
for-end o realizando operaciones elemento a elemento sobre arrays. Las operaciones
elemento a elemento con arrays son una de las características más notables de
MATLAB, ya que ofrece una método de cálculo que en ciertas circunstancias evita la
utilización de bucles. En general, las operaciones elemento a elemento son más rápidas
que los bucles, y se recomiendan en aquellas situaciones en las que se pueden utilizar
ambos métodos.
%C7ForEnd.m
n=input('Introduzca el número de términos:');
S=0;
for k=1:n
S=S+(-1)^k*k/2^k;
end
fprintf('El valor(suma) de la serie es:%f\n',S)
>> C7ForEnd
Introduzca el número de términos:4
El valor(suma) de la serie es:-0.125000
% C7Elemento.m
n=input('Introduzca el número de términos:');
S=0;
k=1:1:n;
S=S+(-1).^k.*k./2.^k;
fprintf('El valor(suma) de la serie es:%f\n',sum(S))
>> C7Elemento
Introduzca el número de términos:4
El valor(suma) de la serie es:-0.125000
Modificación de los elementos de un vector.
Ejemplo C7Exp75.m
Sea el vector V=[5, 17,-3,8,0,-1,12,15,20,-6,6,4,-7,16]. Escribir un programa, en forma
de fichero script, que multiplique por dos los elementos de V positivos y divisibles por
3 o por 5, y eleve al cubo los elementos negativos pero mayores que -5.
V=[5, 17,-3,8,0,-1,12,15,20,-6,6,4,-7,16];
n=length(V);
for k=1:n
if V(k)>0 && (rem(V(k),3)==0||rem(V(k),5)==0) %rem resto divisón
V(k)=2*V(k);
elseif V(k)<0&&V(k)>-5
V(k)=V(k)^3;
end
end
>> C7Exp75
V =
10 17 -27
8
0 -1 24 30 40 -6 12 4 -7 16
7.4.2 While – end
Ejemplo C7expox.m
La función f(x)=ex se puede representar mediante la siguiente serie de Taylor:
x
e=
∞
∑
n = 0
x n
n!
Escribir un programa script en MATLAB que calcule ex utilizando la serie de Taylor
indicada anteriormente. El programa debe calcular ex sumando los términos de la serie
en un proceso iterativo que se detenga cuando el valor absoluto del último término
sumado sea inferior a 0.0001. Utilizar para ello un bucle de tipo while-end, limitando el
número de iteraciones a 30.Si en la iteración número 30 el valor del término sumado no
es inferior a 0.0001, el programa deberá parar y visualizar un mensaje que diga que se
necesitan más de 30 términos.
Utilizar el programa para calcular e2,e-4 y e21.
x=input('Introduzca el valor x:');
n=1;an=1;S=an;
while abs(an)>=0.0001 && n<=30
an=x^n/factorial(n);
S=S+an;
n=n+1;
end
if n>=30
disp('Se necesitan más de 30 términos')
else
fprintf('exp(%f)=%f',x,S)
fprintf('\nEl número de términos utilizados es %i',n)
end
>> C7expox
Introduzca el valor x:2
exp(2.000000)=7.389046
El número de términos utilizados es 12
>> C7expox
Introduzca el valor x:-4
exp(-4.000000)=0.018307
El número de términos utilizados es 18
>> C7expox
Introduzca el valor x:21
Se necesitan más de 30 términos
7.5 Bucles anidados y sentencias condicionales anidadas.
Ejemplo C7anidados.m
Escribir un programa(fichero script) que cree una matriz de dimensión n x m cuyos
elementos sean los que a continuación se detallan. El valor de los elementos de la
primera fila deberá ser el número de la columna correspondiente. El valor de los
elementos de la primera columna será el número de la fila correspondiente. El valor del
resto de los elementos es igual a la suma del valor del elemento que se encuentra por
encima de él y el valor que se encuentra a su izquierda. Cuando se ejecuta, el programa
debe pedir al usuario que introduzca la dimensión(n y m) de la matriz en cuestión.
n=input('Introduzca el número de filas: ');
m=input('Introduzca el número de columnas: ');
A=[];
for k=1:n
for h=1:m
if k==1
A(k,h)=h;
elseif h==1
A(k,h)=k;
else
A(k,h)=A(k,h-1)+A(k-1,h);
end
end
end
A
>> C7anidados
Introduzca el número de filas: 3
Introduzca el número de columnas: 4
A=
1
2
3
4
2
4
7
11
3
7
14
25
EJERCICIOS
EJERCICIO-1
Escribir un programa que sume dos números si son pares y repita el
proceso n veces (ese dato se introducirá por teclado). Los resultados
obtenidos se guardarán en un vector.
Salida por pantalla
>> C7pares
Introduce número de repeticiones: 3
Introduce el primer número: 2
Introduce el segundo número: 4
Introduce el primer número: 1
Introduce el segundo número: 2
Introduce el primer número: 4
Introduce el segundo número: 6
En la posición 1 valor 6
En la posición 2 valor 0
En la posición 3 valor 10
EJERCICIO-2
Realizar un programa que escriba en orden descendente los 10 primeros
números impares.
Salida por pantalla
>> C7impares
19 17 15 13 11 9 7 5 3 1
EJERCICIO-3
Realizar un programa que pida por teclado 5 números y escriba el menor
y mayor de todos ellos.
Salida por pantalla
>> C7maymen
Introduce número: 2
Introduce número: 1
Introduce número: 3
Introduce número: 6
Introduce número: 7
El número mayor es 7
El número menor es 1
EJERCICIO-4
Generar números enteros de tres en tres desde el 2 hasta un valor
menor que 30.Posteriormente calcular la suma de los enteros generados
que sean divisibles por 5.
Salida por pantalla
>> C7divisibles
La suma de los números divisibles por 5 es: 25
EJERCICIO-5
Realizar un programa que pida dos números por teclado y nos devuelva
el menor. Se realizará una función para obtener el número menor.
>> C7menor
Introduce primer valor: 3
Introduce segundo valor: 7
El menor es 3
EJERCICIO-6
Realizar un programa que sume dos números si son pares y repita el proceso diez veces.
Se creará una función que indique si un número es par ó impar.
Descargar