Está en la página 1de 61

MANEJO BASICO DE MATLAB

1. las ventanas en MATLAB


MATLAB es un programa para la realización de cálculos matemáticos y
generación de gráficas.
Cuenta, además, con un lenguaje de programación propio.

Esta práctica se desarrolla bajo el entorno de Windows 8 según abrimos


MATLAB, como en todos los programas que trabaja bajo Windows, nos
aparece en pantalla varias barras y ventanas. En la parte superior encontramos
la barra de menú al que se puede acceder fácilmente (la versión utilizada de
MATLAB R2014a).
Por ejemplo, al hacer clic en Help se accede a una información de documentos
y ejemplos de ayuda en el manejo del programa.
En esta versión se encuentra con iconos que indican diversas tareas que se
realizan con frecuencia debajo de este hay un recuadro con información sobre
el directorio del trabajo actual (Current Folder), es decir, el lugar donde
MATLAB buscara nuevos programas.

La distribución de ventanas en la pantalla depende de la configuración elegida


por el usuario. Si en el icono Layout se elige la opción Default aparecen en
pantalla cuatro subventanas. Ver figura 1, la ventana de mayor tamaño es
(Command Window) es la que utilizamos para escribir las instrucciones.

MATLAB es un programa diseñado especialmente para tratar datos


matemáticos y entre otras aplicaciones permite la programación, este es, la
creación de una serie de instrucciones que se ejecutaran cuando se las
invoque.
Escribir las siguientes instrucciones en la ventana de comandos:

La distribución

En la parte derecha (Workspace) aparece las variables que se utiliza. Al


trabajar en la ventana de comandos conviene tener en cuenta:
. La utilidad de las fechas situadas en el teclado entre el teclado numérico y
alfanumérico: las ordenes que vamos introduciendo en la ventana de
comandos se van almacenando y pueden recuperarse con la tecla “↑” y “↓”:
Una vez que tenemos la línea deseada, se modifica, desplazando el cursor
sobre ella con las teclas “←” y “→” para ejecutar de nuevo.
. El % sirve para insertar comentarios. Todo lo que se escribe detrás no sería
tenido en cuenta aquí unos ejemplos:
. La orden clc sirve para limpiar la pantalla, pero está en acción no borra de la
memoria nada que haya sido creado anteriormente, mientras clear all borra los
resultados almacenados en memoria virtual.
para realizar los cálculos numéricos elementados con MATLAB es suficiente
conocer la sintáis de las distintas operaciones:
 para realizar los cálculos numéricos elementales con MATLAB es
suficiente conocer la sintaxis de las distintas operaciones:

Suma Resta Multiplicación División Potenciacion


+ - * /

Las operaciones se evalúan de izquierda a derecha, la operación potencia tiene


el orden de prioridad más alto, seguida de la multiplicación y división, que se
encuentran en el mismo orden de prioridad y seguidas normalmente por la
suma y la resta, ambas con la misma prioridad.
Para alterar la ordenación se pueden utilizar paréntesis en la forma habitual.

1.2 almacenamientos de datos en MATLAB


Una variable es un nombre al cual se le asigna un valor. El símbolo = es
utilizado para la asignación de los valores a las variables. Por ejemplo:

a = 2 < enter>
b=3; < enter>

La expresión (;) hace que los valores de b no aparezcan en la ventana de


comandos. Para finalizar o separar ordenes se utiliza el salto de línea, el
símbolo (,).

El nombre de la variable siempre debe ir a la izquierda del símbolo = y el valor


a la derecha. Es muy importante tener en cuenta que el valor que se asigna a
las variables es permanente.
Se guardará hasta que la variable sea borrada o se le asigne un nuevo valor.
También es posible asignar una variable como se muestra:

Asignamos un nuevo valor a x:

x= 7 < enter>
x^2; < enter>

Hasta aquí los cálculos que habíamos hecho se realizaron como en una
calculadora. El hecho de poder introducir variables nos ofrece nuevas
posibilidades, entre otras:
Almacenar datos que podamos usar posteriormente:
69 4 69 69

3


Ejemplo 4. Hallar la expresión:   33 x + 33 x + 2 33 x
23 23 √
5

23
1.3 REGLAS PARA NOMBRAR LOS DATOS EN MATLAB

Las reglas que se utilizan para nombrar las variables son las siguientes:

- MATLAB distingue entre letras mayúsculas y minúsculas. Las variables


área, Area, AREA, arEa serían variables distintas
- El nombre de una variable puede contener un máximo de 31 caracteres
ignorándose los posteriores.
- El nombre de una variable debe empezar necesariamente por una letra,
aunque puede conteener letras números y el guion de subrayado, nunca
puede contener operadores (+,*,…), espacios en blanco ni signos de
puntuación.
- No deben nombrarse variables con nombres con significado
especificode funciones o variables predefinidas en MATLAB, por
ejemplo cos=3 construira una variable cos cuyo valor es 3, y a partir de
este momento no podríamos calcular el coseno de un angulo hasta que
no borrásemos la variable cos.
- Frecuentemente es necesario el uso de eps, es la precisión de la
maquina en análisis numérico es el máximo error relativo en la
representación de un numero real.
- Las variables realmin y realmax, muestran los valores reales mas
pequeños y mas grandes en MATLAB.

Obs: Se presenta algunas variables habituales

nombre significado
Ans alamcenael ultimo resultado no
  asignado a una variable
epsilon de la maquina: es el
Eps numero
más pequeño que sumado a 1
  genera un
número mayor que 1 en el
  ordenador
Pi п
iyj unidad imaginaria
Date fecha
Inf ∞
NAN no es un numero: representa una
  expresión detergida

1.4 Información de variables en MATLAB

Para obtener información sobre las variables definidas en una sesión de trabajo
se utilizan las ordenes who y whos. La primera muestra las variables que
tienen valores asignados, la segunda nos da además información sobre el
tamaño y el tipo de dato.

Ejemplo:

x = rand (100,100)
s= ‘ Hola mundo‘
t= 1 + 2 + 3 + ...
4 + 5 + 6 % .... continua la linea anterior
who x = rand (100,100)
s= ‘ Hola mundo‘
t= 1 + 2 + 3 + ...
4 + 5 + 6 % .... continua la linea anterior

Seguidamente escribir las órdenes.


>>who
>>whos

La orden clear all. Se utiliza para borrar todas las variables hasta el momento;
si a la orden se le añade una lista de variables (separada por espacios en
blanco) solo se borra las variables de la lista.

1.5 tipos y formato de datos en MATLAB


Tipos: Los tipos de datos que se almacenan en Matlab son variados. Los mas
básicos son:
 numéricos por defecto se trabaja con números reales. Si es necesario,
opera con números complejos que guarda como pareja de números
reales.
 Caracteres. Formado por cualquiera de los caracteres del código ASCII.
La forma de definir un carácter es encerrarlo entre comillas simples ´jose
´.
 Lógicos. Son los formados por los valores verdadero (1) y falso (0).

FORMATOS: los tipos de datos que se almacenan en Matlab son variados. Los
más básicos son:
En Matlab, la precisión con la que se presentan los números reales
internamente es siempre la misma y esta entre 15 o 16 dígitos. Esta precisión
se puede ver en la variable eps, nombrada anteriormente

El formato de presentación es modificable por el usuario a través de orden


format. Algunos más habituales son:
 Format long

>> format long  sirve para mostrar 16 dígitos


>> log10 (25)
Ans =
1.397940008672038
 Format rat

>> format rat  sirve para mostrar como fracción


>> log10(25)
Ans =
1493/1068
 Format short e
>>format short e  sirve para expresar en potencias de 10
>> log10(25)
Ans =
1.3979e+00
1.6 archivos de ordenes en MATLAB

Escribir los comandos directamente en los la ventana de comandos de Matlab


no resulta cómodo para ejecutar varias órdenes, sin embargo, existe
instrucciones que de forma consecutiva para lograrlo. Generalmente las
instrucciones y ordenes se escribe en un editor de texto (New script) y se
guarda con extensión (*.m) estos archivos son llamados script de matlab.

Para ejecutarlo basta con dar clic o escribir en la ventana de comandos el


nombre del script almacenado.

Cuando es necesario que los datos de entrada sean por pantalla, se debe
ordenar:

 Input (´mensaje´): almacena en un dato introducido por el teclado,


mostrando en pantalla.
 Dis (´mensaje´): presenta en pantalla la cadena de mensaje.

Ejemplo 1.

Ejemplo 1: constrúyase un fichero de nombre ejercicio, que pida por pantalla


dos números reales y devuelva su suma y su producto. Utilícese para calcular
la suma y el producto los números 4 y 9.

Solución:
Ejercicios:
1. Diseñe un programa que determine el cociente y el residuo de una
división entera.
Solución
2. Realizar un programa que obtengas las depreciaciones acumuladas y
los valores reales de cada año de un automóvil comprado en 18000
dólares, en 1996 durante los seis años siguientes suponiendo un valor
de recuperación a rescate de 1100 dólares, conociendo la fórmula de la
depreciación anual constante d para cada año de vida útil.

costo−valor de recuperacion
D=
vidautil

Solución

3. Calcular la paga neta de un trabajador conociendo el numero de horas


trabajadas, la tarifa horaria y la tasa de impuesto.
Solución

Horas=input(´ingreseel numero de horas trabajadas:´);


th=input(´ingrese la tarifa horaria:´);
s=horas*th;
im=0.05*s;
sueldo=s-im;
disp(´el sueldo neto es:´),sueldo
disp(´el impuesto es:´),im
4. Realizar la suma de todos los números pares entre 2 y 100

Solución

disp(´hallando la suma de pares consecutivos´);


n=input(ingrese la cantidad de pares consecutivos que serán sumados:´);
f=n*(n+1);
disp(´la suma de los:´),n
disp(´la suma de los pares consecutivos es:´),f
disp(´fue calculado con éxito´);

5. Diseñar un programa que calcule la velocidad (m/s) de los corredores de


una carrera de 1500 metros. Las entradas serán parejas de números
(minutos segundos) que darán el tiempo de cada corredor. Por cada uno
se imprimirá el tiempo en minutos y segundos, así como velocidad
media.
Solución

disp(‘ ingrese el tiempo primero en minutos luego en


segundos‘);
m=input(‘ ingrese el tiempo en minutos‘);
s=input (‘ y ingrese el tiempo en segudnos‘);
mm=m*60;
t=mm+s;
veloc=1500/t
disp(‘la velocidad media metros/seg. es: ‘),veloc
disp(‘el tiempo en segundos es: ‘),t
6. Calcular el área y el volumen de un cilindro, cuyo radio y altura se
ingresan desde el teclado.
Solución

disp(‘ hallando el area y volumen de un cilindro‘);


h=input(‘ ingrese el valor de la altura :‘);
r=input (‘ ingrese el valor del radio :‘);
vol=pi*(r^2)*h;
area=pi=pi*2*r*h;
disp(‘el area es: ‘),area
disp(‘el volumen es: ‘),vol

7. Calcular el área de un trapecio dado sus bases y su altura.


Solución

%este programa determina el


%area del trapecio
disp(‘ hallando la superficie de un trapecio‘);
a=input(‘ ingrese el valor de la base pequeña :‘);
b=input (‘ ingrese el valor de la base grande :‘);
h=input (‘ ingrese el valor de la altura :‘);
area=((a+b)/2)*h;
disp(‘el area es: ‘),area
8. Calcular la superficie de un circulo.

Solución
disp(‘ superficie de un cilindro‘);
r=input(‘ ingrese el valor del radio r :‘);
superf=pi*r^2;
disp(‘superficie es s: ‘),superf

9. Calcular la superficie y el perímetro de un cuadrado dada la longitud de


su lado.

Solución
disp(‘ hallando el perimetro y superficie de un
cuadrado‘);
r=input(‘ ingrese el valor del lado :‘);
l=a*a;
p=4*a;
disp(‘ el perimetro es:‘),l
disp(‘ la superficie es:‘),l

10. Determine la hipotenusa de un triángulo rectángulo conocidas las


longitudes de sus catetos
Solución
disp(‘ halla la hipotenusa de un triangulo
rectangulo‘);
a=input(‘ ingrese el valor cateato a:‘);
b=input(‘ ingrese el valor cateato b:‘);
hip=sqrt(a^2+b^2);
disp(‘ la hipotenusa es:‘),hip

11. Diseñar un programa que convierte grados Fahrenheit a grados Celsius.


Utilizar la formula

5
C= ( F−32)
9

Solución
disp(‘ convierte grados fahrenheit en celsius‘);
f=input(‘ ingrese el valor en grados fahrenheit:‘);
celsius=(5/9)*(f-32);
disp(‘ la temperatura en °C:‘),celsius

1.7 Análisis de datos en MATLAB

Matlab ejecuta análisis estadístico sobre conjuntos de datos. Estos conjuntos de datos
se almacenan en matrices orientadas por columnas. Matlab incluye, entre otras, las
siguientes funciones estadísticas:

funcion ¿Qué hace?


corrcoef(X) coeficientes de correlación
cov(X) matriz de covarianzas
comprod(X
) producto acumulativo de columnas
cumsum(X
) suma acumulativo de columnas
diferencias entre elementos adyacentes
diff(X) de X
hist(X) histograma o diagrama de barras
iqr(X) rango intercuartílico de la muestra
max(X) máximo de cada columna
media de los valores de vectores y
mean(X) columnas
mediana de los valores de vectores y
median(X) columnas
min(X) mínimo de cada columna
prod(X) producto de elementos en columnas
números aleatorios distribuidos
rand(n) uniformemente
números aleatorios distribuidos
randn(n) normalmente
range(X) rango de cada columna
sort(X) ordena columnas en orden ascendente
std(X) desviación estándar de la muestra
sum(X) suma de elementos en cada columna
tabulate(v) tabla de frecuencias del vector
var(X) varianza de la muestra

Ejemplos:

>> X =[1 2 3 4 5 6 ]
>>cumprod (X) %matriz de productos acumulados
>> cumsum (X) %sumas acumuladas
>> mean (X) % media
>> median (X) % mediana

>> prod(X) % producto de todos los elementos


Y=
1 6 34 5 6
>> sort (Y) %ordena los valores de cada columna

>>sum (Y) %suma de todos los elementos


>> var (Y) %varianza de elementos
>> max (Y) % valor máximo de los elementos
>> min (Y) % valor mínimo de los elementos
>> iqr (Y) % rango intercuartílico de los elementos

>> Z = [5 7 9 2 9 3 1 7 5 1 3 9 2 7 5 1 5 5 1 8];
>> tabulate (Z) % tabla de frecuencias genera a partir de una serie de valores
>> rango (Z) % rango de cada columna (diferencia entre el máximo y el minino)

ARREGLO DE MATRICES EN MATLAB


En MATLAB, el tipo básico de dato es la matriz, incluso los escalares son
considerados como matrices 1x1, por lo que es importante familiarizarse con
esta sección.

2.1 vectores en MATLAB


los vectores se introducen escribiendo cada una de sus coordenadas entre
corchetes, separadas por un espacio en blanco:
>>v= [1 3 4 8]

Escritos mediante punto y comas:


>>v=[1, 3, 4, 8]
Escritos mediante punto y coma, obtendremos un vector columna:
>>v=[1, 3, 4, 8]

Para incrementos es posible utilizar según sigue:


Salida
Función
[a:h:b] Es un vector según (a, a +h, a+2h……,,a+nh),donde h es el
incremento en el intervalo (a,b).
Linspace(a,b,n Vectores de n componentes con partición en el intervalo (a,b)
)
Linspace (a,b) Vector de 100 componentes con partición en el intervalo (a,b)

>> b=[1:0.2:2]

>> b=linspace(1,2,5)

>> b=linspace(1,2)

2.2 matrices en MATLAB

Para construir una matriz, se debe tener en cuenta las siguientes reglas:

 Los elementos se introducen entre corchetes.


 Los elementos de una misma fila se introducen como un vector fila,
separados por comas o por espacios en blanco.
 Para separar filas se utiliza el punto y coma o el cambio de línea:

>X = [5 7 9 2 9; 3 1 7 5 1; 3 9 2 7 5; 1 5 5 1 8]
X=
5 7 9 2 9
3 1 7 5 1
3 9 2 7 5
1 5 5 1 8
Una vez definida una matriz o un vector, se puede acceder a sus elementos o
sobmatrices con las ordenes:
Función Salida
V(i) Coordenada i del vector v
A(i,j) Elemento de la matriz A que ocupa la posición i, j
A(:,j) Columna j de la matriz A
A (:,end) Columna ultima de la matriz A
A (i,: ) Fila i de la matriz A
A (end,:) Fila ultima de la matriz A
A (v, w ) Submatriz de A que contiene las filas indicadas en las coordenadas
de v y las columnas indicadas en w
A (i,: ) = [ ] Elimina la fila i de la matriz A
A (:.j ) = [ ] Elimina la columna j de la matriz A
Nota: [ ] representa la matriz vacía (empty matrix )

Ejemplo 1.

Aquí tenemos las matrices:

3 4 1 2 3 5 6
A=
1 2 3
[
4 5 6 ]
7 8 [ ] [ ] [ ]
;B= 3 6 ;C= 4 5 6 ;D= 7 8
7 8 9 9 10

>> A = [ 1 2 3; 4 5 6 ];

>>B = [ 3 4 ; 3 6 ; 7 8 ];

>> C = [ 1 2 3; 4 5 6 ; 7 8 9 ] ;

>> D= [ 5 6 ; 7 8 ; 9 10 ] ;

>> pause

>> nd = [ ndims (A) , ndims (B) ]


>> E = [ C D ] , permite obtener la matriz ampliada

19 26 33
27 36 45
39 54 69

Aquí muestra un error porque la operación matemática no es A 2,3 * A2,3 y Matlab


muestra como error.

A2 = [ 14 2 3
5 6 ] = [ 161
2 4 9
25 36 ]

>> R= A. ^2

R=

1 4 9
16 25 36

|
Para la transpuesta es necesario aplicar

1 4
1 2 3
|
A= [
4 5 6
=2 5
3 6
]
>> R = A|

R=

1 4
2 5
3 6

Definición de matrices por bloques

Dadas dos matrices M y N con el mismo numero de filas, se puede dfinir una
matriz F formada por todas las columnas de M y N:
>>M=rand (3), N=eye (3,2), C= [M ; N]

También puede eliminarse filas y columnas de matrices dadas con las


siguientes expresiones.

>> diag (A) % crea un vector columna a partir de la diagonal de la matriz A

>>size (A) % devuelve las dimensiones de la matriz como un vector fila

>> length (A) % devuelve la mayor de las dos dimensiones de la matriz

>>trace (A) % traza de la matriz

>> rank (A) % rango de la matriz, el R de la matriz es el # de F o C linealmente independientes

>>rref (A) % reducción mediante gauss

>>l = tril (A) % convierte en ceros todos los elementos que quedan encima de
la diagonal principal

>> u =triu (A) %convierte en ceros todos los elementos que quedan debajo de
la diagonal principal

>> [ m n ]=max(A)%guarda en m el vector min(A) y en n un vector cuyos


elementos son las filas de A que contienen los elementos de m.

>>[ m n ]= min(A) % guarda en m el vector min(A) y en n un vector cuyos


elementos son las filas de A que contienen los elementos de m.

>>dot(A,A) %producto escalar

>>cross(A,A) % producto escalar

Operación de matriz

Para multiplicar matrices A y B son multiplicaciones compatibles, por ejemplo,


si A es nxm y B es mxl entonces se cumple el producto es nxl.

m
(A * B)I,J= ∑ AikBkj , 1≤i≤n , 1≤ j ≤l
k =1
3 4
A*B
1 2 3
[
4 5 6 ][
3 6 =
7 8 ]
3+¿ 6+¿ 21 4+ ¿12+¿ 24
[
12+ ¿15+ ¿ 42 16+¿ 30+¿ 48
=
30 40
69 94 ][ ]
>>R=A*B

R=

30 40
69 94

3 4 3+16 6+ 20 9+ 24 19 26 33
B*A= 3 6
7 8 [ ][ 1 2 3
4 5 6 ] [ ][
= 3+24 6+ 30 9+ 36 = 27 36 45
7+32 14+ 40 21+ 48 39 54 69 ]
>>R=B*A

R=

FUNCION SALIDA
ones (n) matriz cuadrada nxn de unos
ones (m,n)matriz mxn de unos.
zeros(n) matriz cuadrada nxn de ceros
zeros(m,n)matriz mxn de ceros.
eye(n) matriz identidad nxn.
eye(m,n) matriz mxn con unos en la diagonal principal y el resto ceros.
matriz cuadrada nxn de números aleatorios entre 0 y 1 y distribución
rand(n) uniforme
rand(mxn) matriz mxn de números aleatorios entre 0 y 1 y distribución uniforme
randn(n) matriz cuadrada nxn de números aleatorios, distribución N(0,1)
randn(m,n
) matriz mxn de números aleatorios, distribución N(0,1)
>>A=eye(5) % matriz identidad 5x5

>>A(3,4)=10, A(2,5)=1

>>B=A

>>B(:,2)=[]

OTRAS OPERACIONES CON MATRICES

Función ¿Qué hace?


find (A) devuelve los índices donde las entradas de A son distintos de cero
flilr (A) intercambia la matriz de izquierda a derecha
flipud (A) intercambia la matriz de arriba abajo
reshape (A,m,n) devuelve una matriz mxn cuyos elementos se toman por
  columnas de A, si A no contiene mxn elementos daria un error
rot90 (A) gira la matriz 90°en sentido contrario a las agujas del reloj
rot90 (A,n) gira la matriz n x 90°
expm(A) matriz exponencial
logm(A) matriz logarítmica
sqrtm (A) matriz de raíces cuadradas
funm(A,@Función
) evalúa la función que indiquemos en la matriz A
exp,log,sqrt… operan elemento a elemento
[VE,VA] = eig (A) VE son los vectores propios y VA son los valores propios
[L,U] = lu (A) factorización LU
[Q,R] = qr (A) factorización QR

(con A matriz, m y n naturales)

Ejemplos:

>>A =[pi 0; pi/4 pi/3]

>>find (A) % devuelve los índices como un vector columna

>> reshape (A,1,4)

>> rot90 (A) % gira la matriz 90°

>> rot90 (A,3) % gira la matriz 270° (90° x 3 = 270°)

>>funm (A,@sin) % calcula el seno de cada elemento de la matriz

>> expm (A)

Ejemplo 1. Constrúyase una matriz A, de orden 5x5, de unos. Cambia todos


los unos de la fila de la fila tres, por el numero 20.

Solución

>> A= ones (5)

>> A (3, : )= 20*A (3, : )

Ejemplo 2. Constrúyase una matriz A, de orden 5x7, de números aleatorios


entre 0 y 1 y distribución uniforme. Cámbiese la última fila por un vector cuyas
coordenadas sean los puntos de una distribución uniforme del intervalo [ 5 , 7 ]

Solución
>> A=rand (5 , 7)

>> V= linspace ( 5 , 7 , 7)

>> A(end , : ) =v

Para grabar las matrices y vectores temporales del espacio de trabajo

>> save matriz.dat A

>> sabe matriz.txt

>> sabe matriz A

Obs:. Considerese que las operaciones de matrices también se definen otras


operaciones a las que llamaremos operaciones elemento a elemento.

Ejemplo 2.5.1 (sistema compatible determinado con matriz cuadrada) dado el


sistema

2.3 solucion de sistemas lineales en MATLAB

Ejemplo 1. Sea la expresión

>> HM(:,:,1) =[ 1 2 3; 4 5 6 ]; % definimos la primera capa

>>HM(:,:,2= [ 7 8 9 ; 10 11 12 ] % definimos la segunda capa

HM(:,:,1) =

1 2 3

4 5 6

HM(:,:,2) =

7 8 9

10 11 12

OPERACIONES CON HIPERMATRICES


Algunas funciones para generar matrices admiten mas de dos subíndices y
pueden ser utilizadas para generar hipermatrices como rand, randn, zeros y
ones, también se pueden emplear con hipermatrices según las distintas
“dimensiones”.

Ejemplos:

>A = zeros (2,3); B = ones (2,3); % definimos dos matrices de las mismas
dimensiones cat (1,A,B) % las concatena una debajo de la otra

Ans =

0 0 0
0 0 0

1 1 1
1 1 1

>> cat (2,A,B) % las concatena una al lado de la otra

Ans =

0 0 0 1 1 1
0 0 0 1 1 1

>> cat (3, A,B) % las concatena como distintas capas de una hipermatriz

Ans(:,:,1)=

Hallar solución.

clc
clear all
a1= [1 2 3; 1 3 8; 5 6 4];
b1=[6;19;5];
r= rank(A1);
ra=rank([A1 b1]);
x=A1\B1;
disp('el resultado de la matriz es \'),x
pause
disp('Otra forma utilizando la funcion rref')
E=rref([A1 b1])
disp('el resultado de la matriz es \'),E

Ejemplo2. Sea la expresión

x + 2y + 3z = 6
x + 3y + 8y = 19
2x + 3y + z = -1
5x + 6y + 4z = 5

Hallar solución

x + 2y + 3z = 6

x + 3y + 8y = 19

2x + 3y + z = -1

5x + 6y + 4z = 5

x + 2y + 3z = 6

Error: Unexpected MATLAB expression

Ejemplo 3. Sea la expresión (sistema compatible indeterminado homogéneo):

0
{ x+ ¿2 y−¿ z=¿2 x−¿ y +¿ z=¿ 3 x +¿ y ¿ 0
0

Hallar solución
Sistema compatible indeterminado. Para obtener la solución general
calculamos una base del espacio de soluciones mediante la orden.

>>A3=[ 1 2 −1; 2 −1 1 ; 3 1 0 ];r=Rank(A3)

>>X=null(A3)

2.4 Hipermatrices en MATLAB

Matlab permite trabajar con matrices de mas de dos dimensiones. Los


elementos de una hipermatriz pueden ser números, caracteres, estructuras y
vectores o matrices de celdas. Las funciones que operan con matrices de mas
de dos dimensiones son análogas a las funciones vistas anteriormente aunque
con algunas diferencias, por ejemplo, a las hora de definirlas:

0 0 0
0 0 0

Ans(:,:,2)=

1 1 1
1 1 1

Respecto al resto de funciones debemos tener en cuenta que:

1. Las funciones que operan sobre escalares, como sin, cos, etc., se
aplican sobre sobre hipermatrices elemento a elemento (igual que ocurre
al aplicarlas sobre vectores y matrices).
2. Las funciones que operan sobre vectores, como sum, max, etc., se
aplican a matrices e hipermatrices según la primera dimensión,
resultando un array de una dimensión inferior.
3. Las funciones matriales propias del algebra lineal, como det, inv, etc.,
no se pueden aplicar a hipermatrices, para aplicarlas habría que extraer
las matrices correspondientes.
FUNCIONES BASICAS EN MATLAB
Obviamente, las funciones matemáticas habituales también están predefinidas
en matlab, con la única particularidad de que actúan sobre vectores o matrices
elemento a elemento.

MATLAB FUNCION MATLAB FUNCION


x
e
exp(x)   abs(x) |x|
log(x) ln(x) fix(x) redondeo hacia cero
log10(x) Log10(x) floor(x) redondeo hacia -
log2(x) Log2(x) ceil(x) redondeo hacia +
sqrt(x)   round (x) redondeo hacia el entero más próximo
    rem (m, N) resto de dividir m entre n

Y las funciones trigonométricas:

MATLAB fun. MATLAB fun. MATLAB func. MATLAB fun.


sin(x) sen (x) asin(x) asen(x) sinh(x) senh (x) asinh(x) asenh(x)
cos(x) cos (x) acos(x) acos(x) cosh(x) cosh (x) acosh(x) acosh(x)
tan(x) tan(x) atan(x) atan(x) tanh(x) tanh (x) atanh(x) atanh(x)
cot(x) cot(x) acos(x) acot(x) coth(x) coth (x) acosh(x) acoth(x)
sec(x) sec(x) asec(x) asec(x) sech(x) sech (x) asech(x) asech(x)
csc(x) csc(x) acsc(x) acsc(x) csch(x) csch (x) acsch(x) acsch(x)

Matlab, incluye una serie de funciones que permite las operaciones con
facilidad.

>> log(exp(3))

>>sin(2*pi/3)

>>sin(sym(´2*pi/3´)) % el argumento simbólico sym permite tener una


respuesta exacta. Para funciones en MATLAB 2014 es necesario expresar
según:

Sea f(x) =x3 +1


>>f =@(x) x2

>>f(4)

O también podría escribirse:

>>fl =inline(´x2´,´x´)

>>fl(4)

>>g =@(x,y) x2+y2;g(1,2)

>>gl = inline(´x2+y2´,´x´, ý´); gl (1,2)

>> f = @(t) exp(sin(2*t));

>>x = [0:0.2:1]; y = f(x)

Es posible evaluar el vector para los puntos (1,3) y (2,4).

>> g([1 2], [3 4])

las expresiones como encontrar la solución de una ecuación matemática se


utiliza las expresiones solve y fzero.

Sea x2-9 =0

symx
solve(x.^2-9)

solve ('x^2-2*x-15=0')

f=@(x)x^2-9
fzero(f,0.5)

f =

@(x)x^2-9

ans =

3
Ejemplo 1. Hallar elaborar el script para hallar la raíz de una expresión de la
forma: ax2 + bx + c = 0

Solución

elegir de la opción de matlab la opción (function) aparecerá una ventana como


muestra en la figura.

Escribir la siguiente expresión:

function [x1,x2] = quadform (a,b,c)


d = sqrt (b^2 - 4*a*c);
x1 = (-b + d) / (2*a);
x2= (-b - d) / (2*a);
end

Y grabar con el nombre quadform.m


Aperturar un nuevo scripty escribir la siguiente expresión.

clc
clear all
a=input('ingrese el valor de a:');
b=input('ingrese el valor de b:');
c=input('ingrese el valor de c:');
[x1,x2]=quadform (a,b,c);
fprintf('Las raices son:' )
fprintf('/t/t' % 10.6f/n/n' ,x1)
fprintf('/t/t' % 10.6f/n/n' ,x2)|

Hay otras formas de desplegar los resultados de las variables numéricas y


cadenas de caracteres, aquí mostramos algunos tipos y especificaciones
especiales usadas para fprintf ().

tipo a forma de impresión: carácter siggnificado


especificar fprintf(´formato string´, variable a imprimir ,…) especial  
%c tipo de carácter n nueva linea
%s tipo de cadena t tab
%d tipo de numero entero decimal b backspace
%f tipo de numero punto flotante r CR return
%e tipo exponencial decimal f form feed
%x numero entero hexadecimal %% %
%bx numero flotante en 16 digitos exadecimal (64bits) ´´ ´

Ejemplo 2. Calcular la conversión datos de temperatura de Fahrenheit a


Celsius.

Solución

%%
%
% <<FILENAME.PNG>>
%
solucion
clc
clear all
f = input ('Ingrese los datos de temperatura en
Fahrenheir [F] : ');
C = 5/9* (f-32);
fprintf('%5.2f (en Fahrenheit) es %5.2f (en Celsius) .
\n',f,c)
fid=fopen('temperatura.txt','w'); % almacena los datos
calculados
fprintf(fid, '%5.2f(Fahrenheit) es
%5.2f(celsius).\n',f,c);
fclose(fid);

Ejemplo 3 observe y analice el formato para la siguiente expresión.

clc
clear all
x=0.25; n=1:6; c=1./cumprod ([1 n]);
for n=1:7, T(n)=polyval (c(n:-1:1),x); end
fprintf('\n T_n(x) |T_n(x)-exp(x)|\n');
fprintf('--------------------------------------\n');
fprintf('%15.6f %8.3e\n', [T;abs(T-exp(x))])
%%
%
% <<FILENAME.PNG>>
%

3.2 cadena de caracteres en MATLAB

Matlab utiliza cadena de caracteres ciertos formatos para c mostrar salida y


conectar aquí se muestra algunos ejemplos.

str = 'hello world'


str(1:5)
double(str)
char(ans)
['hello ' ,' ' ,' world' ]
['hello ';'world' ]
strcmp(str,'hello world')
findstr('world';str)
%%
%
% <<FILENAME.PNG>>
%

Hay interés en algunas situaciones convertir números a cadenas de


caracteres a valores numéricos y viceversa para ello se utiliza las opciones
str2double.

Ejemplo1. Escribir 254, luego elevar al cuadrado y extraer 3 digitos de la


parte central, luego esta expresión dividir entre 1000 y mostrar el resultado
final.

Obs. Num2str convierte de numero aa cadena de caracteres y str2num


caracteres a números

Ejemplo 2. Analiza el script que a continuación que se muestra

clc
clear all
t= (0:.01:3)' ;
y=4+cos(t)-0.05*sin(t)+0.2*randn(size(t));% datos
A = [ones(size(t)) cos(t) sin(t) ]*c;
max( abs(f(t)-y) )
ezplot(f,[0 3]
hold on, plot(t,y,'r.')
%%
%
% <<FILENAME.PNG>>
%

GRAFICOS EN MATLAB
4.1 Gráficos en 2D
al realizar un gráfico con MATLAB se abre automáticamente una ventana
grafica o figura.

También se puede crear una figura que no contenga ningún grafico con la
orden:

función Salida
figure genera una ventana gráfica.
figure (n) genera la ventana grafica número n; si ya existe, la activa.

Para cerrar ventanas graficas se utilizan ordenes:

función Salida
close cierra la ventana grafica activada.
close (n) cierra ventana grafica número n.
close all cierra todas las ventanas graficas.

Es posible borrar el contenido de una ventana grafica sin cerrarla, utilizando


el orden:

función salida
Clf borra el contenido de una ventana grafica activada. Manteniendola abierta

Cada grafico se realiza por defecto en una ventana grafica diferente. En


ocasiones interesa superponer varios dibujos en una ventana gráfica, para
lo que se hace uso de las ordenes:

función Salida
hold on mantiene activa la ventana grafica actual.
hold off cada grafico se realiza en una ventana diferente. Es la opcion por defecto.
Hold intercambia hold on y hold off

La orden básica para trazar graficos bidimensionales es plot. Su sintaxis es


la siguiente:

función salida
plot (x,y) Sí x e y son numeros. Dibuja el punto de coordenadas (x,y). Si
  se trata de los vectores x= (x1, x2,… xn), y= (y1, y2, … , yn).
  dibuja el conjunto de puntos {(x1,y1)… (xn, yn)} y los enlaza
  con segmentos.
plot (x,y,s) hace lo mismo que plot (x,y) pero con las opciones
  especificadas en s. en s puede aparecer un simbolo de cada una
  de las columnas de la siguiente tabla, encerrados entre
  comillas simples.
plot (x1 , y1 ,s1 x2, y2 , s2 , … , ) Dibuja en una misma gráfica, los gráficos definidos por las ternas
  (xi , yi , si ) . Si no se especifican los parámetros si, el dibujo
  se realiza con trazo continuo y un color distinto para cada
  grafica. Utilizando los siete primeros colores de la tabla en el
  orden señalado. Si se necesitan más colores se repiten
  cíclicamente.

En S no es necesario especificar los tres símbolos, y el formato del grafico


es como sigue.

Color Marca Trazo


b azul . Punto _ continuo
g verde o circulo : discontinuo
r red x aspa -. Punto y guion
c cyan * asterisco  -- discontinuo
m magenta s cuadrado  
y amarillo d rombo  
k negro v triangulo (abajo)  
w blanco ^ triangulo (arriba)  
< triangulo
  (izquierda)  
  > triangulo (derecha)  
  p estrella 5 puntas  
  h estrella 6 puntas  

El título, así como las etiquetas MATLAB tiene el siguiente formato.

función salida
title (texto) sitúa el texto como título del grafico en la parte superior del mismo, en gráficos 2D
xlabel (´texto´) sitúa el texto al lado del eje x en gráficos 2D
ylabel (´texto´) sitúa el texto al lado del eje y en gráficos 2D
text (x,y,´texto´) sitúa el texto en el punto (x,y) en un gráfico 2D
gtext (´texto´) permite situar el texto en un punto seleccionado con el ratón en un gráfico 2D

Una figura se puede copiar, imprimir o guardar en un fichero utilizando las


opciones del menú de la ventana gráfica.

Ejemplo:

>> x = [ −2 −1 0 1 2 3 ]; y = [ 4 1 01 4 9 ];

>> plot (x,y)

La función plot nos permite otras opciones como superponer graficas sobre
los mismos ejes:

>> x=[ −2 −1 0 1 2 3 ]; y=[ 4 1 01 4 9 ]; z=[ 6 5 3 7 5 2 ] ;

>> plot (x,y,z)

También podemos usar distintos tipos de línea para el dibujo de la gráfica:

>> plot (x,y,´*´)

>> xlabel(´texto´)

>> ylabel(´texto´)

>> title(´texto´)

>> text(x,y, ´texto´)

>> gtext(´texto´)

>> grid

Otras funciones complementarias.

Fija valores máximo y mínimo de los eje: axis( [xmin xmax ymin ymax ] )

Fija que la escala en los ejes sea igual: axis equal

Fija que la grafica sea un cuadrado: axis square


Desactiva axis equal y axis square: axis normal

Abre una ventana de gráfico: hold on

Borra lo que hay en la ventana de gráfico: hold off

Todas estas órdenes se las podemos dar desde la propia ventana de la


gráfica una vez que hemos abierto las opciones con el botón indicado
anteriormente.

Otros comandos relacionados con las gráficas son las siguientes:

orden ¿qué hace? imagen


area colorea el área bajo la grafica  
Bar diagrama de barras (verticales)  
Barh Diagrama de barras (horizontales)  
Hist histograma  
Pie histograma polar  
Rose gráfico de escalera  
Stairs secuencia de datos discretos  
Stem como plot pero con escala logarítmica en ambos ejes  
Loglog como plot pero escala logarítmica en el eje x  
Semilogx como plot pero escala logarítmica en el eje y  
Semilogy    

Para obtener una información mas detallada se recomienda utilizar la ayuda


de Matlab:

>> help <orden>

Una ventana grafica se puede dividir en m particiones horizontales y en n


verticales, de modo que cada subventana tiene sus propios ejes, y para
hacer esto vamos a usar subplot (m,n,p) donde p indica la subdivisión que
se convierte en activa.

>> x = 1:360; y 1 =sind (x); y2 =cosd (x);y3 =exp (x); y4 =exp (-x);

>> subplot (2,2,1), plot (x,y 1), title (´seno´)

>>subplot (2,2,2), plot (x, y2), title (´coseno´)


>>subplot (2,2,3), plot (x, y3), title (éxponecial´)

>>subplot (2,2,4), plot (x, y4), title (´-exponecial´)

Para dibujar poligonos podemos usar la funcion plot pero teniendo en


cuenta que el ultimo punto de ambos vectores deben coincidir para que la
grafica quede cerrada. Pero si lo que queremos es que quede coloreado
todo el interior del polígono debemos usar mejor la funcion fill, tiene tres
argumentos, los dos vectores que forman los puntos y un tercer argumento
para indicar el color.

>> x =[ −2 0 2 0 −2 ]; y =[ 4 8 4 0 4 ];

>> plot (x,y)

>> x = [ −2 0 2 0 −2 ]; y = [ 4 8 4 0 4 ];

>> fill (x,y,´r´) % dibuja el polígono, ´r´indica el color rojo

Ejemplos:

clc
clear all
x=linspace(-pi;pi);y1=sin(x); y2=cos(x);
plop(x,y1,'r *',x,y2,' g o' )
xlabel(' ejex' )
ylabel(' ejey' )
gtext('sen x' )
gtext('cos x' )
title('Graficas del seno y del coseno')
grid on
%%
%
% <<FILENAME.PNG>>
%

También es posible hacer gráficos con la ezplot de MATLAB

El ezplot nos permite hacer un grafico en (2D) de funciones paramétricas de


forma implícita o explicita. Estos son representados matemáticamente por
y =f(x), f(x,y) =0, o en par x = f(t), y =g(t),

respectivamente

>> ezplot (´x2+ x +1´, [-2 2])

También utilizando la opción simbólica

>> syms x, explot(x2+x+1, [-2 2])

También se utiliza la función anónima

>> explot(@(x) x2+x+1. [-2 2])

>> axis([-1 2 0 3])

>> explot(´cos(t)´,´sin(t)´, [0 2* pi]); axis square

Ejemplos: en la ventana de comandos digitar las siguientes expresiones e


indicar de que función matemática se tarta.

a) Ezplot( @sin, [0 2*pi] )


b) Ezplot( @(x,y) x4+y4-1, [-1 1] ), axis equal
c) X = @(t) exp(-t).*cos(8*t);
Y = @(t) exp(-t).*sin(8*t):
Explot(x,y, [0 3])
d) Explot3( @cos, @sin, @(t) exp(-t/8), [0 40], ánimate´)
e) Excontour(@(x,y) 4*x2-x.*y+y2, [-1 1 -2 2] )
f) Excontourf(@(x,y) sin(3*x-y).*sin(x+2*y), [-pi pi])
g) Ezcontourf(´x2-y2´)

4.2 Gráficos en 3D
También podemos crear graficas en 3 dimensiones, se trata de extender la
orden de plot (2-D) a plot3 (3-D) donde el formato será igual pero los datos
estarán en tripletes

>> x = -720:720; y = sind (x); z = cosd (x);

>> plot3 (x,y,z)


Podemos hacer girar la grafica usando de la barra de herramientas el botón
o hacerla mas grande o mas pequeñas con. Al igual que ocurría con las
graficas en dos dimensiones podemos nombrar los ejes o hacer
modificaciones entrando en opciones con el botón.

Si queremos representar un polígono en 3 dimensiones lo aremos con la


funcion fill3 de forma similar a fill pero ahora con 4 argumentos, siendo el
cuarto el que indica el color.

>> x = [-2 0 2 0 -2];


>> y = [4 8 4 0 4];

>> z = [3 5 10 5 3];

>>fill3 (x,y,z.' b' ) % dibuja en 3-D,' b' indica el


color azul

La orden [X,Y]=meshgrid(x,y) crea una matriz X cuyas filas son copias del
vector x y una matriz Y cuyas columnas son copias del vector y. para
generar la grafica de malla se usa la orden mesh(X,Y,Z), mesh acepta un
argumento opcional para controlar los colores. Tambien puede tomar una
matriz como argumento: mesh(Z).

Ejemplo1: grafico en 3 dimensiones utilizando el mallado.

clc

Clear all

X =-10:0.5:10; y = -10:0.5:10;

[X,Y] = meshgrid (x,y); %crea matrices para hacer la malla

Z = sin (sqrt (X. ^2+Y. ^2))./ sqrt (X. ^2+Y. ^2+o.1);

Mesh (X,Y,Z) % dibuja la grafica


Ejemplo1. Grafico en 3 dimensiones utilizando superficies.

Es similar a la grafica de malla, pero aquí se rellenan los espacios entre


líneas. La orden que usamos es surf con los mismos argumentos que para
mesh.

Ejemplo2: las graficas de contorno en 2-D y 3-D se generan usando


respectivamente las funciones contour y contour3.

Ejemplo 2: la función pcolor transforma la altura a un conjunto de colores.


Ejemplo 5: observar los efectos al agregar la siguiente opcion.

Surf (X,Y,Z)

View (10,70)

Colorbar

Ejemplo 6: observar los efectos al agregar la siguiente opción.

Surf (X,Y,Z)

View ( [10, -12,2] )

Shading interp

Obs. Manipulación de gráficos:

Fija el ángulo de visión especificando el azimut y la elevación: >>


view(az,el) coloca su vista en un vector de coordenadas cartesiana (x,y,z)
en el espacio 3-D: >>view([x,y,z]) almacena en az y el los valores del
azimut y de la elevación de la vista actual: >> [az,el]=view

Añade etiquetas de altura a los gráficos de contorno: >> clabel(C,h) añade


una barra de color vertical mostrando las transformaciones: >>colorbar El
siguiente grafico en 3d, para diversos formatos con la opcion view.
Ejemplo 7: Observar los efectos al agregar la siguiente opción.
Surf (X, Y, Z)
[az, el] = view
[C, h] = contour (X, Y, Z);
Clavel (C, h)

Comprensión de los mapas de color:

COLOR NOMBRE CORTO ROJO/VERDE/AZUL


Negro K [0 0 0]
Blanco W [1 1 1]
Rojo R [1 0 0]
Verde G [0 1 0]
Azul b [0 0 1]
Amarillo Y [1 1 0]
magenta m [ 1 0 1]

La sentencia colormap (M) INSTALA A LA MATRIZ m como el mapa de color


a utilizar por la figura actual.
Cambiamos usando el comando colormap. Aquí tenemos algunas propiedades.
Ejemplo:
[X, Y, Z]= peaks; % conjunto de datos
Surf (X, Y, Z)
colorbar % MUESTRA LOS DATOS EN COLOR
CAXIS % NOS IDENTIFCA LOS VALORES MAXIMOS Y MINIMOS ANS =
-6.5466 8.0752
CAXIS ([-8,8]), colorbar % hace simétrico la etiqueta de datos
Colormap pink % cambia el color de la figura
Colormap gray % cambia el color de la figura
Colormap (flipud (gray)) % ordena invertir
Colormap hsv %
FUNCION COLORES
Jet
HSV
Hot
Cool
Spring
Summer
Autumn
Winter
Gray
Bone
Copper
Pink
Lines

Algunas propiedades
Grafique una función matemática de la forma: y = sen(x), x  [ 0; 5 ] con un
incremento de 0.5.

Podemos guardar nuestros gráficos con la opción.


 Saveas ( gcf,’ myfigue.jpg’)
 Saveas ( gcf,’ myfigue.fig’)
 Open myfigure.fig % abrir el graffito guardado

Ejercico 1. Representar la expresión x 2+ y 2+ z 2=1 Obs. x=√ 1−z2 −¿ cos ¿ o


y= √ 1−z 2−¿ sen ¿
Ejercicio 1. La solución puede ser extendido a la situación cuando la pluma es
transportado con el flujo de campo. Si el flujo se mueve con velocidad y en
dirección x, la solución es:
M
c ( x , t )= exp
¿
√ 4 nt √ D

M denota la masa total por unidad de área en sistema del fluido. La


concentración c es una solución de la ecuación de transporte. Mostrar en 3D.
clc
clear all
Dx=0.000625 %difusividad
v=0.1 %velocidad
M=1 %masa
xmin=-0.05 ; xmax=2.015 %intervalo en eje x
t=1:4:20

%.......proceso de ejecucion......
x=linspace(xmin,xmax,100);
[x,t] = meshgrid(x,t);

for i=size(t,2);
xx=x-v*t(i);
c=(M/sqrt(4*pi*Dx*t(i))).*exp(-
(xx.*xx)/4*Dx*t(i));
end
%..................salida....... .
surf(x,t,c)

Ejercicio 2. Cambiar el color de los cuadrantes del tablero.


clc
clear all
white = [1 1 1]; gray =0.7*white;
a= [0 1 1 0]; b = [0 0 1 1 ]; c = [1 1 1 1];
figure; hold on
for k = 0:1, for j = 0:2:6
fill(a‘*c+c‘*(0:2:6)+k;b‘*c+j+k; gray)
end, end
plot(8*a‘, 8*b‘, ‘k‘)
set(gca, ‘XtickLabel‘, [],‘YTickLabel‘, [])
set(gcf, ‘color‘, white); axis square

Animaciones en Matlab
La opción comet permite animaciones simples en la grafica.
clc
clear all
T= (0:0.01:2)*pi;
figure, axis equal, axis([-1 1 -1 1]) hold on
pause
comet(cos(T), sin(T))

clc
clear all
figure (‘doublebuffer‘, ‘on‘). flash-free redraws
t = linspace(0.8*pi,800)‘;
for s = 0:0.01:1
x=exp(-s*t).*cos(6*s*t+t);
y=exp(-s*t).*sin(6*s*t+t);
plot(x,y), axis([-1 1 -1 1])
pause (0.01)
end

La opción getframe permite la captura la gráfica activa en cada instante.


Mientras movieview muestra la animación en una ventana aparte.
clc
clear all
x = 0:0.01:1;
for n= 0:50
plot(x; sin(n*pi/5)*sin(pi*x)),axis([0, 1, -2, 2])
M(n+1) = getframe;

end
movieview(M)
podemos almacenar en formato de video *.avi con la
opcion:
movie2avi(M,‘video.avi‘)
tambien es posible incorporar un sonido:
clc
clear all
x = (0:0.1:250)*pi; y = zeros(1,200); z =
(0:0.1:1000)*pi;
sound([sin(x), y, sin(x), y, sin(z*4/5), y,...
sin(8/9*x), y, sin(8/9*x), y, sin(8/9*x), y,
sin(z*3/4)]);

OPCIONES ADICIONALES
Como ejemplo, considérese la función escalar de dos variables V =x 2 + y , la
gradiente de V esta definido como el vector campo.
∂V
∗∂ V
∂x
∇ V =( )
∂y
¿( 2 x∗1)

Graficar indicando la dirección de campo de ∇ V en el plano xy.


Solución
clc
clear all
x = 0:0.01:1;
[x y] = meshgrid(-2:.2:2);
V = x.^2 + y;
dx = 2*x;
dy = dx;
dy(:,:) = 1;
contour(x, y, V) hold on
quiver(x, y, dx, dy) hold off

Considérese una función utilizar la opción errorbar.


clc
Clear all
X = 0; 0.1; 1;
F = x,^3;
R = rand*f
Errorbar (x, f, r, ‘r’)

A partir de esta idea dibujar una carita feliz


t = 0: pi/20; 2*pi;
fill (cos(t), sin(t), ‘k’, 0.95*cos(t), 0.95*sin(t), ‘y’
axis square
Capitulo 6

PROGRAMANDO EN MATLAB

CREANDO PROGRAMAS EN MATLAB

 CONDICIONAL IF

Se ejecutan si se cumple la condición l, en caso contrario, si se cumple la condición 2 se


ejecutan las instrucciones 2, si no se cumple ninguna de estas condiciones se ejecutan
las instrucciones 3.

If condición I

Instrucciones I

Elseif

Instrucciones 2

Else

Instrucciones 3

End

Ejemplo 1:
Crea un programa en el que se introduzcan dos números por el teclado y que nos diga
cuál es el mayor.

>> a=input(’ Ingrese el primer Numero’)


a=input(’ Ingrese el primer Numero’)
if a >b
disp. (’ El primer numero es mayor que el segundo ’)
else
disp.( ’El segundo numero es mayor que el primero’)
end

Ejemplo 2:

Crea un programa tal que un usuario introduzca un número del 0 – 9 y un segundo


usuario tenga que acertarlo.

n=input(’dime un numero’)
if a>9| n<0
disp.( ’Intruduzca un numero correcto’)
return
end
clc
if g==n
disp(’correcto!!!!! ’)
else
disp.( ’no acertaste’)
end

 BUCLES
El control de flujo es extremadamente poderoso porque este hace que cálculos
pasados sirvan para realizar cálculos futuros. Matlab ofrece 3 estructuras para la toma
de decisiones o control de flujo.

 Loop FOR
En un Loop for un grupo un grupo de comandos es ejecutado un número
predeterminado de veces. La forma general es:

For X arreglo

Comandos

End

Ejemplo:
Programa que calcula el seno de x para x entre 0 y pi con intervalos de 1

%programa utilizado for


For n=1 :pi
X(n)=sin(n);
End
Plot(x)
%fin del programa
 Loop MIENTRAS (while)

L as instrucciones se ejecutan cíclicamente mientras se cumpla la condición.

While condición

Instrucciones

End

Ejemplo:

Crear un programa que realice lo siguiente:

Preguntar un numero al usuario y detenerse cuando ese numero sea mayor que 100.

A continuación se muestra el programa y un ejemplo de su aplicación.

n=1;
while n<100
n=input(’numero ’)

FUNCIONES DEFINIDAS POR EL USUARIO

En programación, poder definir funciones propias para ejecutarlas en un programa es


verdadera utilidad, ya que serán la mayoría de los programas que queramos crear para operar
con ellos.

Para crear un fichero que contenga una función es muy importante crear o guardar el fichero
m con el mismo nombre de la función para su correcta ejecución posterior.

Debe ser de la siguiente forma:

Función [arg_salida] = nom_funcion (argumento de entrada)

Como siempre, la creación de funciones quedara mas clara con los ejemplos explicativos que
se incluyen a continuación:

x
Definir una función que sea f =2∗cos ⁡( )
2
Se muestra a continuación la función creada y un ejemplo de aplicación.
Function y=cos2(x)
X=input(’ingrese el angulo: ’)
Y=2.*cos((x)./2

. RAMIFICACION MULTIPLE

Se utiliza mucho para crear menús.

Valor 3 Valor 2

VARIABLE

Distinto Valor 1
Sentencia Sentencia Sentencia Sentencia
3 4 1 2
El comando que se utiliza es SWITCH y se realiza de la siguiente manera:

Case valor 1

Sentencia 1

Case valor 2

Sentencia 2

Case 3

Sentencia 3

Otherwise

Sentencia 4

End

Ejemplo:

Crear un programa que realice operaciones matemáticas con dos números según la opción
elegida.
Crear programa
n=input(’numero 1: ’)
m=input(’numero 2: ’)
disp(’1 suma’)
disp(’2 resta’)
disp(’3 multiplicacion’)
disp(’4 division’)
operación=input(’elija una opcion’)
disp.( ’resultado :’)
switch operación
case 1
disp.(n+m)
case 2
disp(n-m)
case 3
disp(n*m)
case 4
disp(n/m)
otherwise
disp(’no has elegido bien’)
end

Ejemplo:

Podemos mezclar en un programa varias sentencias de este estilo. Aquí podemos ver un
programa que escribe por pantalla los primos del 1 al 100 usando las sentencias if, while y for.

disp(’estos son los números primos menores de 100’)


disp(2)
for i=2:100
n=2;
while n<=sqrt(i)
if rem(i,n)==0
n=I;
else n=n+I;
end
end
if n~=i disp(i)
end
end
OTRAS CAARACTERISTICAS

Función ¿Qué hace?


diff (“f) Derivada de la función respecto a x
diff (“f, t) Derivada parcial de la función respecto a t
diff (f”, n) Derivada n-ésima d la función respecto a x
feval (f”, a) Evalúa la función en a
fininbnnd (f”, n, b) Calcula el mínimo de una función de una variable
fzero (f”, a) Busca el cero de una función unidimensional f más próximo al punto a
quad (f”, a, b) Aproxima la integral definida (según la cuadratura de Simpson)
trapz (x,y) Integral numérica trapezcidal de la función formada al emparejar los
puntos de los vectores x e y
(f función, n numero natural, a y b valores numéricos, x e y vectores del mismo tamaño)

Matlab incorpora una serie de funciones para resolver ecuaciones diferenciales ordinarias. Si
se trata de un problema rígido deberíamos usar: ode15s, ode23s, ode23t, u ode23tb, si por el
contrario se trata de un problema sin rigidez: ode113, ode23 y ode45. Para saber mas de sus
funciones consultar la ayuda de Matlab o bibliografía recomendada.

Ejemplos:

>> diff (‘sin(7*x)’) % derivada respecto a x

>> diff (‘(exp(x)*cos(3*x*y))’, ‘y’) % derivada parcial respecto a y

>> diff (‘(sin(x^2)),2) % segunda derivada respecto a x

>> feval (‘cos’,pi)% evalúa el coseno en el valor pi

>> feval (‘cos, [0 pi/3 pi]) % para evaluarlo en varios puntos debemos darlo como un vector

>> feval (@cos, [0 pi/3 pi]) % es lo mismo que lo anterior, da igual comillas que el @

>> fminbnd (@sind,0,360) % valor del dominio donde el valor toma el mínimo.

>> fzero (‘sind’, 100) % l valor más próximo a 100 donde la función seno vale cero

>> quad (‘sin’,0, pi) % integral definida del seno desde (hasta pi

>> x=0:4; y = [ 0 2 2 1 6];


>> trapz (x,y)

CONVERTIR UN FICHERO (*.m) EN UN EJECUTABLE (*.exe)

Si tenemos un fichero *.m, lo primero que debemos hacer es asegurarnos de que sea una
función, para ello en la primera línea del fichero debe aparecer:

Function nombre (el nombre de la función debe coincidir con el nombre del fichero)

Ahora debemos situarnos en el directorio donde tengamos el fichero que queremos


transformar usando el comando cd. Por ejemplo:

>> cd ‘C:\Documents and Settings\Escritorio\Prueba’

Lo que debemos escribir a continuación es el comando mcc seguido de -m y el nombre del


fichero.

Ejemplo

En la ventana de comando escribir:

>> mcc -m prueba

function [ output_args ]= ´rueba ( n,m)


UNTITLED4 Summary of this function gras here
Detalled explanation goes here
n=input(’numero 1: ’)
m=input(’numero 2: ’)
disp(’1 suma’)
disp(’2 resta’)
disp(’3 multiplicacion’)
disp(’4 division’)
operación=input(’elija una opcion’)
disp.( ’resultado :’)
switch operación
case 1
disp.(n+m)
case 2
disp(n-m)
case 3
disp(n*m)
case 4
disp(n/m)
otherwise
disp(’no has elegido bien’)
end
pause %para que no se cierre la ventana
automáticamente al ejecutarse
end
En otras funciones adicionales se irán complementando cuando se realiza programas a lo largo
del curso.

METODO DE EULER CON MATLAB

Son de aplicación directa basta evaluar la derivada. Son inestables si h es grande

El método esta basado en la aproximación de la función en (t + h) con los dos primeros de la


serie de Taylor.

Y (t + h) = y(t)+hy’(t)

Ejemplo 1. Encuentre la solución de la EDO en el dominio de xϵ [0,0.5]

Con h= 0.1. De la ecuación y’ = -2x-y; y (0) = -1

Con solución analítica: y ( x ) =−3 e−x −2 x +2

ALGORITMO:

h=0.1;
n=0.5/h;
y(1)=0.5;
x=0:h:0.5;

fpr i=1:n;
dy(i)=-2*x(i)-y(i);
y(i+1)=y(i)+h*dy(i);
end
y1=-3*exp(-x)-2*x+2;%solucion analitica
plot(x,y,’r’*,x,y1,’o’); % create the plot
xlabel(’x); % label the x-axis
ylabel(’ function f(x)’); % label the y-ax’
title(’ y1=3*exp(-x)-2*x+2’);
grid

Ejercicio 1. Encuentre la solución del EDO en el dominio de xϵ [0,4]

Con h = 0.5. De la ecuación y’ = -2x-y; y (0) = 0.5

Con solución analítica: y ( x ) =e−x +0.5 ¿

PRACTICA 1

36. Diseñe un programa que permita ingresar sueldos y categorías (a,b,c,d) de un grupo de
trabajadores de una empresa enseguida incrementar el sueldo en un.

10% si pertenece a la categoría a

15% si pertenece a la categoría b

18% si pertenece a la categoría c

20% si pertenece a la categoría d

Solución

Disp.( ’sueldo y categoría de los trabajadores ’);


Clear;
Suel=input(’ingrese el sueldo ’);
Ss=input(’ingrese la categoría en mayúscula a,b,c,d:
’);
If ss== ’a ’
Inc=0.1*suel;
Disp.( ’la categoría es a ’)
Elseif ss== ’b ’;
Inc=0.15*suel;
suel=inc+suel;
disp(’la categoría es b ’)
elseif ss== ’c ’;
inc=0.18*suel;
disp(’la categoría es c ’)
elseif ss== ’d ’;
inc=0.2*suel;
suel=inc+suel;
disp(’la categoría es d ’)
else
quit cancel
end
disp(’el incremento es: ’),inc
disp(’el sueldo total es: ’),suel

37. Elabore un programa para entrevistar a un grupo de personas sobre sus preferencias
electorales entre los candidatos a y b. Al final el programa debe reportar el numero de
personas que prefieren al candidato b. Con sus porcentajes correspondientes.

Solución

disp(’cual de los candidatos prefiere usted ’);


num=input(’ingrese el numero de electores encuestados
: ’);
n=1;
b=0;
while n <= num;
a=input(’ingrese su candidato a, o]) : ’);
if a==’a ’;
else
b=b+1;
porcentb=b*100/num;
end
a=num-b;
porcenta=a*100/num;
disp(’el candidato a tiene : ’),a
disp(’preferencia porcentual : ’),porcenta
disp(’el candidato a tiene : ’),b
disp(’preferencia porcentual : ’),porcentb
38. Calcular la factorial de un número.

Solución

disp(’hallando el factorial de un numero ’);


n=input(’ingrese el valor del numero: ’);
f=1
for i=1:n;
f=f*i;
end
disp(’el factorial es: ’),f
disp(’ fue calculado con exito’);

42. Elabore un programa que permita saber si un número es primo o no.

Solución

disp(’ingrese el numero cualesquiera’);


num= input(’ingrese un numero diferente de uno: ’);
if(num/num==1 && num/1==num && num/2~=2 && num/3~=2 &&
num/5~=2 && num/4~=2 && num/3~=3);
disp(’no es un numero primo: ’),num
end
44. Elaborar un programa que permita ingresar 13 números de un digito cada uno y cuente e
imprima el número de unos de la secuencia.

Solución

disp(’ingrese 13 numeros de un digito cada una’);


num=1;
b=0;
while num <= 13;
a=input(’ingrese un numero : ’);
if a~-1;
disp(’usted ingreso un numero diferente de uno: ’)
else
b=b+1;
disp(’la suma de los unos es: ’),b
disp(’numero de orden del digito ingresado es: ’),num
end
num=num+1;
end

45. Dado tres números determinar si la suma de cualquier pareja de ellos es igual al tercer
número, si se cumple esta condición, escribir “iguales” y en caso contrario escribir “distinto”.

Solución

t1=input(’ingrese el primer numero : ’);


t2=input(’ingrese el segundo numero : ’);
t3=input(’ingrese el tercer numero : ’);
t4=t1+t2;
if t3==t4;
disp(’son iguales: ’)
else
disp(’son distintos: ’)
end
disp(’fue calculado con exito: ’);
46. Se desea calcular el salario neto semanal de un trabajador en función del numero de horas
trabajadas y la tasa de impuestos.

Las primeras 35 horas se pagan a tarifa normal

Las horas que pasan de 35 horas se pagan a 1.5 veces la tarifa normal

Las tasas de impuestos son:

a) Los primeros 600 soles son libres de impuestos


b) Los siguientes 400 soles tienen un 25% de impuestos
c) Los restantes un 45% de impuestos

La tarifa horaria es 18 soles

Solución

htrab=input(’ ingrese numero de horas trabajadas : ’);


thor=input(’ingresa tarifa horaria es 18 soles por
hora : ’);
if htrab<=35;
t1=htrab*Thor;
if t1<600;
t2=htrab*thor;
disp(‘ salario bruto es: ‘ ),t1
disp(‘ salario neto es: ‘ ),t2
disp(‘ libre de impuesto: ‘ )
else t1<1000;
sbruto=htrab*thor;
in=0.25*(t1-600);
t3=600+(t1-600)-in;
disp(‘ salario bruto es: ‘ ),sbruto
disp(‘ salario neto es: ‘ ),t3
disp(‘ la tasa de impuesto: ‘ ),in
end %if
else
exc=htrab-35;
htrab2=exc*1.5*thor;
t11=35*thor+htrab2;
if t11<1000;
in1=0.25*(t11-600);
t33=600+(t11-600)-in1;
disp(‘ salario bruto es:’),t11
disp(‘ salario neto es: ‘ ),t33
disp(‘ la tasa de impuesto: ‘ ),in1
else
in2=0.45*(t11-1000);
in22=in2+0.25*400;
t44=600+0.75*400+0.55*(t11-1000);
disp(‘salario bruto es:’),t11
disp(‘salario neto es:’),t44
disp(‘la tasa de impuesto total:’),in22
end
end

También podría gustarte