Ejercicios de MATLAB Resueltos

Published on December 2016 | Categories: Documents | Downloads: 106 | Comments: 0 | Views: 1313
of 20
Download PDF   Embed   Report

Ejercicios de MATLAB Resueltos

Comments

Content

14/8/2015

Inicio 

Ejercicios de MATLAB. Parte básica

MATLAB 

Básico

Ejercicios

Cálculos aritméticos
Variables escalares

1.­Variables

Vectores y matrices
Entrada/salida
Gráficos
bidimensionales
Funciones
Sentencias
condicionales

1.1.­Evaluar las siguientes expresiones para el valor dado de x
y =
y =
y =

1

5



x−3

2

x −x−6

tan x−sin x
x−sin x
1
2(1−√ x)

,  x = 2
π

,  x =



6

1
3

3(1−√ x)

,  x = 3

 Solución

Sentencias iterativas
Ejemplos

>> x=2;
>> y=1/(x­3)­5/(x^2­x­6)
y =    0.2500
>> x=pi/6;
>> y=(tan(x)­sin(x))/(x­sin(x))
y =    3.2777
>> x=3;
>> y=1/(2*(1­sqrt(x)))­1/(3*(1­nthroot(x,3)))
y =    0.0707

1.2.­La longitud del arco de parábola de la figura es

1
s =





−−


2
2
√b + 16a +

2





−−


2
2
4a + √b + 16a

2

b

ln (
8a

)
b

Calcular s para a=12 y b=8
 Solución
>> a=12; b=8;
>> s=sqrt(b^2+16*a^2)/2+b^2*log((4*a+sqrt(b^2+16*a^2))/b)/(8*a)
s =   25.9922

1.3.­Un proyectil se dispara con un ángulo θ y una velocidad inicial v0. Calcular el alcance horizontal, la altura
máxima y el tiempo de vuelo del proyectil, desde que sale hasta que impacta con el suelo
θ=60°, v0=600 m/s, g=10 m/s2.
v

xmax =

v

ymax =

2
0

g

sin(2θ)

2
0

2g

tvuelo = 2

2

sin
v0
g

θ

sin θ

 Solución
>> th=60; v0=600; g=10;
>> x_max=v0^2*sind(2*th)/g

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

1/20

14/8/2015

Ejercicios de MATLAB. Parte básica
x_max =  3.1177e+004
>> y_max=v0^2*sind(th)^2/(2*g)
y_max =  1.3500e+004
>> t_vuelo=2*v0*sind(th)/g
t_vuelo =  103.9230

1.4.­Ley del enfriamiento de Newton
T = T s + (T 0 − T s ) e

−kt

La temperatura ambiente es Ts=20, la temperatura inicial del cuerpo T0=5. Calcular la temperatura T del cuerpo
en el instante t=3, sabiendo que k=0.45.
 Solución
>> Ts=20; T0=5; k=0.45;
>> T=Ts+(T0­Ts)*exp(­k*3)
T =  16.111396090311629

2.­Vectores y matrices
2.1.­Crear el vector que contenga los números pares entre 10 y cero. Crear un vector que contenga los múltiplos
de 3 entre 6 y 36, ambos inclusive.
 Solución
>> x=10:­2:0
x =    10     8     6     4     2     0
>> x=6:3:36
x =     6     9    12    15    18    21    24    27    30    33    36

2.2.­Crear una matriz 3×2 y otra de 2×3con los vectores u=[1,0,­3]; v=[4,1,­2];
Calcular el producto u.*v y cociente u./v elemento a elemento de los dos vectores
Calcular el producto escalar de los dos vectores y el ángulo entre ellos
u ⃗ ⋅ v ⃗ = u⋅v⋅ cos θ

 Solución
>> u=[1,0,­3]; v=[4,1,­2];
>> A=[u',v']
A =
     1     4
     0     1
    ­3    ­2
>> A=[u;v]
A =
     1     0    ­3
     4     1    ­2
>> u.*v
ans =
     4     0     6
>> u./v
ans =   0.2500                   0   1.5000
>> p=u*v'
p =    10
>> th=acosd(p/(norm(u)*norm(v)))
th =  46.3647

2.3.­Sea el vector u=2:3:18;
Acceder a los tres primeros elementos del vector u
Acceder al segundo, cuarto y sexto elementos del vector u
Acceder al sexto, cuarto y sexto elemento del vector u
Acceder a los tres últimos elementos del vector u
Acceder al primero, tercero y cuarto elementos del vector u
 Solución

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

2/20

14/8/2015

Ejercicios de MATLAB. Parte básica
>> u=2:3:18
u =     2     5     8    11    14    17
>> u(1:3)
ans =     2     5     8
>> u(2:2:6)
ans =     5    11    17
>> u(end­2:end)
ans =    11    14    17
>> u([1,3,4])
ans =     2     8    11

2.4.­Crear la matriz A=[10:­1:4;ones(1,7);2:2:14;zeros(1,7)] con lápiz y papel y luego, comprobar con MATLAB
Obtener la matriz B=A([1,3],[1,3,5:7]) con lápiz y papel y luego, comprobar con MATLAB
 Solución
>> A=[10:­1:4;ones(1,7);2:2:14;zeros(1,7)]
A =
    10     9     8     7     6     5     4
     1     1     1     1     1     1     1
     2     4     6     8    10    12    14
     0     0     0     0     0     0     0
>> B=A([1,3],[1,3,5:7])
B =
    10     8     6     5     4
     2     6    10    12    14

2.5.­Crear estas dos matrices A y B sin inicializar cada elemento de la matriz, en una sola línea en la ventana de
comandos
1

0

−6

⎜2


⎜3

⎜4

0

−4 ⎟


−2 ⎟

0 ⎟







0
0

5

0



1

3

5

7

9

0

5

10

15

20

20

30

40

50

−6

−4

−2

0

2



⎜ 10


2



11



25 ⎟

60 ⎟
4



Eliminar la última fila de la primera matriz y la tercera columna de la segunda matriz
 Solución
>> A=[(1:5)',zeros(5,1),(­6:2:2)']
A =
     1     0    ­6
     2     0    ­4
     3     0    ­2
     4     0     0
     5     0     2
>> B=[1:2:11;0:5:25;10:10:60;­6:2:4]
B =
     1     3     5     7     9    11
     0     5    10    15    20    25
    10    20    30    40    50    60
    ­6    ­4    ­2     0     2     4
>> A(end,:)=[]
A =
     1     3     5     7     9    11
     0     5    10    15    20    25
    10    20    30    40    50    60
>> B(:,3)=[]
B =
     1     3     7     9    11
     0     5    15    20    25
    10    20    40    50    60
    ­6    ­4     0     2     4

2.6.­Crear la matriz B de 5×6 a partir de un vector A de 30 elementos utilizando el comando reshape, y acceder a
los elementos marcados en color rojo

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

3/20

14/8/2015

Ejercicios de MATLAB. Parte básica

Nota: reshape(A,m,n) crea una matriz m×n a partir de los elementos de la matriz A que debe tener mÂ∙n
elementos.
 Solución
>> A=1:30;
>> B=reshape(A,5,6)
B =
     1     6    11    16    21    26
     2     7    12    17    22    27
     3     8    13    18    23    28
     4     9    14    19    24    29
     5    10    15    20    25    30
>> B([3,4,5],[4,5])
ans =
    18    23
    19    24
    20    25
>> B(2:4,3:5)
ans =
    12    17    22
    13    18    23
    14    19    24
>> B(2:end,end)
ans =
    27
    28
    29
    30
>> B(end,3:5)
ans =
    15    20    25

2.7. Sea la matriz


0

⎜ −2


0

2

3

4

2

3

−1

5

1⎟

2

−4

−3

1





Crear un vector columna de nueve elementos que contenga los elementos de la primera, tercera y cuarta
columna
Crear un vector fila de ocho elementos, que contenga los elementos de la sugunda fila y de la tercera columna
Crear un vector fila de cinco elementos que contenga los dos últimos elementos de la última columna y los tres
primeros elementos de la primera fila.
 Solución
>> A=[0,2,3,4,2;­2,3,­1,5,1;0,2,­4,­3,1]
A =
     0     2     3     4     2
    ­2     3    ­1     5     1
     0     2    ­4    ­3     1
>> u=[A(:,1);A(:,3);A(:,4)]
u =
     0
    ­2
     0
     3
    ­1
    ­4
     4
     5
    ­3
>> u=[A(2,:),A(:,3)']
u =
    ­2     3    ­1     5     1     3    ­1    ­4
>> u=[A(end­1:end,end)',A(1,1:3)]

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

4/20

14/8/2015

Ejercicios de MATLAB. Parte básica
u =     1     1     0     2     3

2.8.­ Crear una tabla de valores del coseno de los ángulos comprendidos entre 0 y 180, de 30 en 30 grados
ángulo
0
30
60
...

coseno
 
 
 
 

 Solución
>> ang=0:30:180;
>> y=cosd(ang);
>> [ang',y']
ans =
         0    1.0000
   30.0000    0.8660
   60.0000    0.5000
   90.0000         0
  120.0000   ­0.5000
  150.0000   ­0.8660
  180.0000   ­1.0000

2.9.­Sean las matrices
A = (

1

0

−1

4

−2

−3

)  B = (

1

−2

3

1

−1

2

)

Realizar las siguientes operaciones con lápiz y papel y comprobar luego con MATLAB
A*BT(el superíndice T indica traspuesta)
AT*B
A.*B (producto elemento a elemento)
A./B
 Solución
>> A=[1,0,­1;4,­2,­3]
A =
     1     0    ­1
     4    ­2    ­3
>> B=[1,­2,3;1,­1,2]
B =
     1    ­2     3
     1    ­1     2
>> A*B'
ans =
    ­2    ­1
    ­1     0
>> A'*B
ans =
     5    ­6    11
    ­2     2    ­4
    ­4     5    ­9
>> A.*B
ans =
     1     0    ­3
     4     2    ­6
>> A./B
ans =
    1.0000         0   ­0.3333
    4.0000    2.0000   ­1.5000

2.10 Sean las matrices
2

4

−1

−2

5

0

0

3

5

A = ⎜3

1

−5 ⎟  B = ⎜ −3

2

7 ⎟  C = ⎜ 2

1

0

6

9

6

−3





0

1

4









−1









4





Comprobar si son verdaderas o falsas estas afirmaciones:
A+(B+C)= (A+B)+C, propiedad asociativa
2(A+B)=2A+2B
http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

5/20

14/8/2015

Ejercicios de MATLAB. Parte básica

A*(B+C)=A*B+A*C, propiedad distributiva
A*B=B*A, propiedad conmutativa
(A*B)T=BT*AT
(A*B)*C=A*(B*C)
(A+B)T=AT+BT
 
2.11.­Resolver el sistema de tres ecuaciones mediante la operación X=A\b. donde A es la matriz de los
coeficientes, b es el vector de los términos indpendientes y X es el vector de las incógnitas.
⎧ 4x − 2y + 6z = 8

⎨ 2x + 8y + 2z = 4


6x + 10y + 3z = 0


4

⎜2


6

−2
8
10

6

⎞⎛

x





8



2⎟⎜y ⎟ = ⎜4⎟
3

⎠⎝

z





0



 Solución
>> A=[4,­2,6;2,8,2;6,10,3]
A =
     4    ­2     6
     2     8     2
     6    10     3
>> b=[8;4;0]
b =
     8
     4
     0
>> X=A\b
X =
   ­1.8049
    0.2927
    2.6341
>> A*X
ans =
    8.0000
    4.0000
         0

2.12. Dado el vector de datos u=[5, 9, 2, 4, 1, 12, 7, 6, 5, 8];
El valor máximo y el índice de dicho elemento en el vector u
El valor mínimo y el índice de dicho elemento en el vector u
La suma de todos los elementos
El producto de todos los elementos
El valor medio
Crear un vector v a partir del u pero con los elementos ordenados en orden ascendente, utilizando la función sort
 Solución
>> u=[5,9,2,4,1,12,7,6,5,8]
u =
     5     9     2     4     1    12     7     6     5     8
>> [m,k]=max(u)
m =    12
k =     6
>> [m,k]=min(u)
m =     1
k =     5
>> sum(u)
ans =    59
>> prod(u)
ans =     7257600
>> mean(u)
ans =    5.9000
>> v=sort(u)
v =     1     2     4     5     5     6     7     8     9    12

2.13. Crear una tabla de valores de la función
2

− 2
http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

6/20

14/8/2015

Ejercicios de MATLAB. Parte básica
2

x

− 2

y =
x + 4

para los siguientes valores de x: ­3, ­2, ­1, 0, 1, 2, 3
 Solución
>> x=­3:3;
>> y=(x.^2­2)./(x+4);
>> [x',y']
ans =
   ­3.0000    7.0000
   ­2.0000    1.0000
   ­1.0000   ­0.3333
         0   ­0.5000
    1.0000   ­0.2000
    2.0000    0.3333
    3.0000    1.0000

2.14. Comprobar que
sin x
lim

= 1
x

x→0

Establecer el formato largo para expresar los números con 15 decimales (format long)
Crear un vector x cuyos elementos son 1,0.1, 0.01,0.001,...y calcular el cociente sin(x)/x. Regresar al formato
por defecto( format short)
 Solución
>> format long
>> n=0:5;
>> x=1./10.^n;
>> y=sin(x)./x;
>> [x',y']
ans =
   1.000000000000000   0.841470984807897
   0.100000000000000   0.998334166468282
   0.010000000000000   0.999983333416666
   0.001000000000000   0.999999833333342
   0.000100000000000   0.999999998333333
   0.000010000000000   0.999999999983333
>> format short

2.15.­Comprobar que la suma


1


n=1

n

= 1

2

Establecer el formato, 15 decimales (format long). Calcular la suma (a) n=10, (b) n=20, (c) n=40.
Crear el vector n, luego el vector y=1/2n, y sumar los elementos del vector y con la función sum de MATLAB
Restaurar el formato por defecto
 Solución
>> format long
>> n=1:10;
>> y=1./2.^n;
>> sum(y)
ans =   0.999023437500000
>> format short

2.16. Comprobar que la suma


−n

(−3)


√ 12 ∑
2n + 1

= π

n=0

Calcular la suma (a) n=10, (b) n=20, (c) n=40.
 Solución
>> format long
>> n=0:10;
>> y=sqrt(12)*(­3).^(­n)./(2*n+1);
>> sum(y)

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

7/20

14/8/2015

Ejercicios de MATLAB. Parte básica
ans =   3.141593304503082
>> pi
ans =   3.141592653589793
>> format short

2.17.­Comprobar
π

1
= 1 −

4

1
+

3

1


5

1
+

7

+ ...
9

 Solución
>> n=1:4:10001;
>> sum(1./n­1./(n+2))
ans =    0.7853
>> pi/4
ans =    0.7854
>> n=1:2:10001;
>> sum((­1).^((n­1)/2)./n)
ans =    0.7854

3.­Gráficos
3.1 La población de Estados Unidos se puede modelar mediante la siguiente fñormula
y =

197273000
1 + e

−0.03134(t−1913.25)

donde t es el tiempo en años. Hacer un gráfico que muestre la población de USA cada 10 años desde el año 1790
hasta el 2000. Crear un script

 Solución
3.2 Dibujar la función y=3x3­26x+10, su derivada primera y su derivada segunda, en el intervalo ­2≤x≤4, en la
misma gráfica y con distintos colores y estilo de línea. Crear un script

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

8/20

14/8/2015

Ejercicios de MATLAB. Parte básica

 Solución
3.3 Dibujar una curva cicloide, que en ecuaciones paramétricas es
x=r(t­sint),
y=r(t­cost),
Tomar r=1.5 y 0≤t≤4π

 Solución
3.4. Dibujar la superposición x1+x2 de dos Movimientos Armónicos Simples de la misma dirección y distinta
frecuencia en el intervalo 0≤t≤4π,
x1=sin(t)
x2 =sin(2t)
Superponer en el mismo gráfico la amplitud modulada (envolvente) en color diferente y con grosor de línea1.5

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

9/20

14/8/2015

Ejercicios de MATLAB. Parte básica

 Solución
3.5.Tiro parabólico

Un cuerpo se lanza desde la altura y0con velocidad v0, que hace un ángulo θ con la horizontal.
Las ecuaciones del movimiento son:
x = v0 cos θ⋅t
y = y0 + v0 sin θ⋅t +

1
2

(−g)t

2

La ecuación de la trayectoria del móvil es
2

g
y = y0 + x tan θ −

x
2

2

2

2 v cos θ

= y0 + x tan θ − x

0

g

2

2

(1 + tan θ)

2v

0

Dados los datos de la altura inicial y0, la velocidad inicial v0 y el ángulo de tiro θ calcular el alcance horizontal y
el tiempo de vuelo del proyectil, cuando llega al suelo y=0.
Escribir el script parabolico que produzca una gráfica semejante a la de la figura (más abajo) y que realice las
siguientes tareas:
1.  Establezca mediante comandos input, los valores de la altura y0, velocidad inicial v0 y ángulo de tiro θ
2.  Determine el tiempo de vuelo calculando una de las raíces de la ecuación de segundo grado
3.  Calcular el alcance, conocido el tiempo de vuelo
4.  Represente la trayectoria y la decore con título, etiquetas en el eje X y en el eje Y. Utilice el comando axis para
estabecer nuevos valores máximos y mínimos para el eje X y para el eje Y distintos de los que MATLAB
establece por defecto
5.  Utilice el comando text, para que apareza en algún lugar de la gráfica, los datos del tiempo de vuelo y del
alcance
Ejemplo: Un cañón dispara una bala desde lo alto de un acantilado de 100 m de altura con una velocidad de 46
m/s haciendo un ángulo de 30° por encima de la horizontal. Tomar g=10 m/s2
http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

10/20

14/8/2015

Ejercicios de MATLAB. Parte básica
>> parabolico
altura: 100
velocidad inicial: 46
ángulo:30

 Solución
3.6.­Tiro parabólico 3D
Se dispara un proyectil con velocidad de 60 m/s haciendo un ángulo de 30°, desde la ventana del vagón de un tren
en movimiento a lo largo del eje X con velocidad de 20 m/s. Tómese g=10 m/s2
Representar la trayectoria del proyectil
Ecuaciones del movimiento
ay = 0



v = 20

⎪ y

y = 20t



⎨ ax = 0
 ⎨ vx = 30√ 3
 ⎨ x = 30√ 3⋅t






2
a z = −10
vz = 30 − 10⋅t
z = 30⋅t − 5⋅t

Comprobar que
El proyectil alcanza la máxima altura cuando vz=0, en el instante t=3 s, la altura es de zmax=45 m.
El proyectil impacta contra el suelo cuando z=0, en el instante t=6 s. En este instante las coordenadas del punto
de impacto son: x=120 m, y=311.8 m

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

11/20

14/8/2015

Ejercicios de MATLAB. Parte básica

 Solución
3.7.­Dibujar al función
z =

xy
2

2

x +y

2

−1 ≤ x ≤ 3 1 ≤ y ≤ 4

 Solución
3.8. Dibujar la función
z = rθ
0 ≤ θ ≤ 360 0 ≤ r ≤ 2

Utilizar la función pol2cart para convertir cocordendas polares a coordenadas rectangulares.

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

12/20

14/8/2015

Ejercicios de MATLAB. Parte básica

 Solución

4.­Funciones
4.1. Escribir una función que convierta grados F (Fahrenheit) a grados C (Celsius) de acuerdo con la siguiente
fórmula
5
C =

(F − 32)
9

>> gradosF_C(32)
ans =     0
>> gradosF_C(212)
ans =   100

La definición de la función gradosF_C es
 Solución
function gC = gradosF_C(gF )
    gC=5*(gF­32)/9;
end

Otra forma
>> gradosF_C=@(x) 5*(x­32)/9;
>> gradosF_C(32)
ans =     0
>> gradosF_C(212)
ans =   100

4.2. Las nuevas coordendas (X,Y) de un punto (x,y) del plano que es girado alrededor del eje Z un ángulo θ (en el
sentido de las agujas del reloj) viene dado por
X = x cos θ − y sin θ
{
Y = x sin θ + y cos θ
X
(

cos θ

− sin θ

sin θ

cos θ

) = (
Y

x
)(

)
y

Utilizar el comando compass para dibujar el vector posición r=xi+yj y correspondiente el vector girado R=Xi+Yj
un ángulo θ.
>> u=[sqrt(3);1];
>> ang=120;
>> v=rotacion(ang,u)
v =
   ­1.7321

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

13/20

14/8/2015

Ejercicios de MATLAB. Parte básica
    1.0000
>> hold on
>> compass(u(1),u(2))
>> compass(v(1),v(2))
>> hold off

Definimos la función rotacion
 Solución
function v = rotacion(ang,u)
    R=[cosd(ang),­sind(ang);sind(ang),cosd(ang)];
    v=R*u;
end

5.­Sentencias condicionales
5.1.­Sea el vector x=[­4,0,5,­3,0,3,7,­1,6];
Contar cuantos elementos del vector son positivos, negativos o nulos
 Solución
>> x=[­4,0,5,­3,0,3,7,­1,6];
>> ne=sum(x<0)
ne =     3
>> pos=sum(x>0)
pos =     4
>> cero=sum(x==0)
cero =     2

5.2.­Una empresa paga los siguientes tipos de salario anual: 12000, 15000, 18000, 24000, 35000, 50000 y 70000.
El número de empleados en cada una de las categorías es: 3000, 2500, 1500, 1000, 400, 100 y 25. Calcular:
El número total de empleados
El número de empleados de la empresa cuyos salarios son superiores a 32000 e inferiores a dicha cantidad
El salario medio por empleado en la empresa (media ponderada)
 Solución
>> salario=[12000,15000,18000,24000,35000,50000,70000];
>> empleados=[3000,2500,1500,1000,400,100,25];
>> n_empleados=sum(empleados)
n_empleados =        8525
>> u=salario>32000

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

14/20

14/8/2015

Ejercicios de MATLAB. Parte básica
u =     0     0     0     0     1     1     1
>> u.*empleados
ans =     0     0     0     0   400   100    25
>> n_alto=sum(u.*empleados)
n_alto =   525
>> n_bajo=n_empleados­n_alto
n_bajo =        8000
>> salario_medio=sum(empleados.*salario)/n_empleados
salario_medio =  1.7038e+004

5.3. Crear un script que realice la siguiente tarea: cuando se proporciona una medida de longitud expresada en
mm, cm, dm, m, km se obtiene la respuesta de dicha medida convertida a m (metros). Por ejemplo, medida=50 y
unidad='cm' aparece
0.5 m

El script es el siguiente
 Solución
medida=50;
unidad='cm';
switch (unidad)
    case {'km', 'kilómetro'}
        y=1000*medida;
    case {'m', 'metro'}
        y=medida;
    case {'dm', 'decímetro'}
        y=medida/10;
    case {'cm', 'centímetro'}
        y=medida/100;
    case {'mm', 'milímetro'}
        y=medida/1000;
    otherwise
        disp(['Unidad desconocida: ', unidad])
end
disp([num2str(y),' m'])

5.4. El recibo de la electricidad de los residentes en una determinada ciudad se calcula del siguinete modo:
1.  Si se consumen 500 Kwh o menos el coste es de 2 céntimos por Kwh
2.  Si se consumen más de 500 Kwh y pero no más de 1000 el coste es 10 euros por los primeros 500 Kwh y 5
céntimos por Kwh para el consumo que exceda los 500 Kwh
3.  Si se consumen más de 1000 Kwh el coste es 35 euros por los primeros 1000 Kwh y 10 céntimos por Kwh para
el consumo que exceda los 1000 Kwh
4.  La compañía eléctrica incluye un gasto fijo de 5 euros, independiente del consumo.
Las lecturas del contador de electricidad de cinco familias ha sido el siguiente: 200, 500, 700, 1000, 1500 Kwh,
respectivamente. Mostrar los resultados del cálculo en dos columnas, una del cosumo y la otra del coste de la
electricidad consumida.
         200           9
         500          15
         700          25
        1000          40
        1500          90

 Solución
consumo=[200,500,700,1000,1500];
coste=5+10*(consumo>500)+25*(consumo>1000);
coste=coste+0.02*(consumo<=500).*consumo;
coste=coste+0.05*(consumo>500 & consumo<=1000).*(consumo­500);
coste=coste+0.1*(consumo>1000).*(consumo­1000);
disp([consumo',coste'])

5.5. Escribir una función que convierta las coordendas rectangulares x e y a polares r, θ.
>> [r,ang]=r_polar(sqrt(3),1)
r =    2.0000
ang =    0.5236
>> [r,ang]=r_polar(­sqrt(3),­1)
r =    2.0000
ang =    3.6652
>> [r,ang]=r_polar(sqrt(3),­1)

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

15/20

14/8/2015

Ejercicios de MATLAB. Parte básica
r =    2.0000
ang =    5.7596

La definición de la función r_polar es
 Solución
function [r,ang] = r_polar(x,y)
    r=sqrt(x^2+y^2);
    ang=atan2(y,x);
    if ang<0
        ang=ang+2*pi;
    end
end

6.­Sentencias iterativas
6.1.­Comprobar, utilizando un bucle for
π
4

= 1 −

1

+

3

1



5

1

+

7

1

+ ...

9

 Solución
sgn=1;
s=0;
for n=1:2:99
    sgn=­sgn;
    s=s+sgn/n;
end
disp([pi/4,s])

6.2. Cálculo de raíz cuadrada de un número n, mediante el siguiente algoritmo
1.  Establecer el formato a 15 decimales, (long)
2.  Establecer el valor inicial de n
3.  Establecer el valor inicial de x en n/2
4.  Repetir seis veces
Reemplazar x por (x+n/x)/2
5.  Mostrar la raíz cuadrada de n y x.
6.  Restaurar el formato por defecto, (short)
 Solución
format long
n=2;
x=n/2;
for i=1:6
    x=(x+n/x)/2;
end
disp([sqrt(n),x])
format short

6.3.­El número irracional π
Para hallar la longitud de una circunferencia de radio R, primero se calcula el perímetro de un triángulo equilátero
(3 lados) inscrito en dicha circunferencia, luego, de un hexágono (6 lados), un dodecágono (12 lados) y así,
sucesivamente. El límite de la sucesión de perímetros es precisamente la longitud de la circunferencia 2πR.
Si tomamos una circunferencia de radio unidad, al dividir entre dos los valores de los perímetros iremos
obteniendo las sucesivas aproximaciones del número irracional π.

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

16/20

14/8/2015

Ejercicios de MATLAB. Parte básica

Podemos calcular la longitud del lado an un polígono regular de n lados inscrito en la circunferencia de radio R,
(en color rojo).
π
a n = 2R sin (

)
n

Del mismo modo, obtenemos la longitud del lado de un polígono regular inscrito de 2n lados (en color azul)
π
a 2n = 2R sin (

)
2n

Teniendo en cuenta que sin (

α


−−−
−−−−
1 − cos α

) = √

2

2

Establecemos la relación entre an y a2n y por tanto, entre el perímetro Pn del polígono regular de n lados y el
perímetro P2n del polígono regular de 2n lados.
P 2n


−−−−−−−−−−−−


−−−−−−−
2

Pn


= 2nR
2 −
4 −
2
2

R n

Tomando como radio R, la unidad
Para un triángulo, n=3, la longitud del lado es a3=2sin60°, y el perímetro  P

3

= 3√ 3

Para un hexágono, n=6, la longitud del lado es a6=2sin30°=1, y el perímetro P6=6.
y así, sucesivamente.
Para obtener las sucesivas aproximaciones del número irracional π mediante la fórmula anterior procedemos del
siguiente modo:
1.  Partimos del valor del perímetro P de un triángulo equilátero inscrito en una circunferencia de radio unidad, el
valor de n es 3.
2.  Calculamos el perímetro P de un polígono de 2n lados a partir del valor del perímetro de un polígono regular
de n lados.
3.  El valor obtenido P será el valor del perímetro de un polígono regular de n=2n lados.
4.  Se imprime el valor de P dividido entre dos (aproximación de π)
5.  Se vuelve al paso 2.
6 lados, aproximación de pi: 3.00000000
12 lados, aproximación de pi: 3.10582854
24 lados, aproximación de pi: 3.13262861
48 lados, aproximación de pi: 3.13935020
96 lados, aproximación de pi: 3.14103195

El script es el siguiente
 Solución
perimetro=3*sqrt(3);      
n=3;    
iter=5;
for i=1:iter
    perimetro=2*n*sqrt(2.0­sqrt(4.0­(perimetro/n)*(perimetro/n)));
    n=2*n;
    fprintf('%i lados, aproximación de pi: %1.8f\n',n,perimetro/2)
end

6.4­Desarrollo en serie
El desarrollo en serie de sin(x) es
sin(x) ≈ x −

1
3!

3

x

+

1
5!

5

x

N

sin(x) =

lim
N →∞

∑ (−1)
n=0

− ...
2n+1

n

x

(2n + 1)!

Comparar el valor dado por la función MATLAB sin(x) con el valor obtenido al sumar un número determinado
de términos (5, 10, 15..) del desarrollo en serie para un argumento dado, por ejemplo, x=π/6 (30 grados).
Definir una función denominada serie_sin que admita como parámetros el número n de términos de la serie y el
argumento x (radianes) de la función sin.
>> format long
>> serie_sin(2,pi/6)
ans =   0.499674179394364
>> serie_sin(5,pi/6)

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

17/20

14/8/2015

Ejercicios de MATLAB. Parte básica
ans =   0.500000000020280
>> sin(pi/6)
ans =   0.500000000000000
>> format short

La definición de la función serie_sin es la siguiente
 Solución
Repetir este ejercicio pero con la función coseno
N

cos(x) =

lim
N →∞

∑ (−1)
n=0

2n

n

x

(2n)!

6.5.­Generar un número aleatorio entero entre 1 y 10 mediante la función randi. Este es el número secreto que
hay que adivinar. Utilizar el bucle while del que se sale cuando el usuario introduce mediante el comando input el
número correcto. Orientar al usuario si el número que prueba es mayor o menor que el número secreto
¿Cuál es el número secreto?: 3
Es más pequeño
¿Cuál es el número secreto?: 2
Es más pequeño
¿Cuál es el número secreto?: 1
Has acertado

El script es el siguiente:
 Solución
6.6.­Ordenar una lista de números

Para ordenar una lista de números emplearemos el método de la burbuja, un método tan simple como poco eficaz.
Se compara el primer elemento, índice 0, con todos los demás elementos de la lista, si el primer elemento es
mayor que el elemento j, se intercambian sus valores, siguiendo el procedimiento explicado en la figura. Se
continua este procedimiento con todos los elementos del array menos el último. La figura explica de forma
gráfica este procedimiento.
Crear una función denominada ordenar que devuelva un vector ordenado en orden ascendente cuando se le pasa
un vector de datos desordenado
Llamamos a la función ordenar y le pasamos el vector de datos desordenados: 1.65 1.82 1.72 1.75 1.73 1.85 1.90
1.74 1.76 1.77
>> ordenar([1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77])
ans = 1.6500   1.7200   1.7300   1.7400   1.7500   1.7600   1.7700   1.8200   1.8500   1.9000
      

La definición de la función ordenar es
 Solución
MATLAB dispone de una función denominada sort que realiza la misma tarea
>> sort([1.65 1.82 1.72 1.75 1.73 1.85 1.90 1.74 1.76 1.77])

En el caso de tablas bidimensionales o multidimensionales, podemos elaborar nuestra propia versión de la
función ordenar, pero MATLAB dispone de la función sortrows que realiza esta tarea. Por ejemplo, queremos
odenar la siguiente tabla primero por días y después por temperaturas
Día
15

Temperatura
21

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

18/20

14/8/2015

Ejercicios de MATLAB. Parte básica

3
17
21
8

32
15
19
35

>> a=[15 21; 3 32; 17 15; 21 19; 8 35]
a =
    15    21
     3    32
    17    15
    21    19
     8    35
>> sort(a,1)
ans =
     3    15
     8    19
    15    21
    17    32
    21    35
>> sortrows(a,1)
ans =
     3    32
     8    35
    15    21
    17    15
    21    19
>> sortrows(a,2)
ans =
    17    15
    21    19
    15    21
     3    32
     8    35

Fijarse en la importante diferencia entre los resultados de las llamadas a sort(a,1) y sortrows(a,1)
6.7.­Los primeros polinomios de Legendre y la fórmula de recurrencia son, respectivamente
P 0 (x) = 1
P 1 (x) = x
P 2 (x) =
P 3 (x) =
P 4 (x) =
P 5 (x) =
P 6 (x) =

1
2
1
2
1
8
1
8

2

(3x

− 1)

3

(5x

− 3x)
4

(35x

5

(63x

1
16

2

− 30x

3

− 70x
6

(231x

+ 3)
+ 15x)
4

− 315x

2

+ 105x

− 5)

...
(n + 1)P n+1 = (2n + 1)xP n − nP n−1

Define una función recursiva legendre(n,x) para representar gráficamente los cinco primeros polinomios de
Legendre para ­1≤x≤1.
Utilizar la función plot para representar cada uno de los polinomios con la siguientes opciones
plot(x,y,color(n),'displayName',num2str(n))
....
legend('­DynamicLegend','location','Best')
Definir un vector de cinco colores, color(n) es el elemento n de dicho vector. Los otros dos parámetros nos
permiten identificar cada una de las curvas mediante el comando legend.

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

19/20

14/8/2015

Ejercicios de MATLAB. Parte básica

 Solución
function res=legendre(n, x)
    if n==0
        res=1;
    elseif n==1
        res=x;
    else       
        res=((2*(n­1)+1)*x*legendre(n­1,x)­(n­1)*legendre(n­2,x))/n;
    end
end

El script para representar los polinomios de Legendre
x=­1:0.05:1;
 y=zeros(length(x),1);
 color=['b' 'g' 'r' 'm' 'k'];
 hold on
 for n=1:5
     for i=1:length(x)
        y(i)=legendre(n,x(i));
     end
     plot(x,y,color(n),'displayName',num2str(n))
 end
title('Polinomios de Legendre')
xlabel('x')
ylabel('y')
legend('­DynamicLegend','location','Best')
grid on
hold off 

Energías Renovables ©EUITI de Eibar

http://www.sc.ehu.es/sbweb/energias­renovables/MATLAB/basico/ejercicios/basico/ejercicios_1.html

20/20

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close