Apuntes Matlab
Apuntes Matlab
Apuntes Matlab
Matrices
Una matriz se define mediante el uso de corchetes donde cada ; especifica un salto a
una fila diferente.
[1 2 3;4 7 8]
ans =
1 2 3
4 7 8
O de manera equivalente
[1,2,3;4,7,8]
ans =
1 2 3
4 7 8
A =
1 2 3
4 7 8
B =
5 9 10
7 1 3
C =
1 9
3 4
5 6
A.*B, A*C
ans =
5 18 30
28 7 24
ans =
22 35
65 112
Para la mtriz transpuesta ocupamos '. Si quisieramos el determinante (recordar que la matriz tiene que
ser cuadrada) usamos det( ), finalmente para la inversa usamos inv().
1
D=[1 2; 3 4];D',inv(D),det(D), A,length(A)
ans =
1 3
2 4
ans =
-2.0000 1.0000
1.5000 -0.5000
ans = -2
A =
1 2 3
4 7 8
ans = 3
Para leer una matriz lo hacemos de la manera A(start:end,n) donde leemos desde el elemento start
hasta el elemento end de la n-esima columna de la matriz A
A,A(1:2,3)
A =
1 2 3
4 7 8
ans =
3
8
Si quisieramos leer toda la columna sin necesidad de marcar un inicio y un final escribimos A(:,n)
A(:,1)
ans =
1
4
Si quisieramos leer toda una fila (en especifico la primera) sin necesidad de marcar
A(1,:)
ans =
1 2 3
Si se quiere leer ciertos elemtos de corrido usamos el doble punto : , por eso el comando A(:,1) lee
todas las filas de la primera columna y el comando A(1,:) lee todas las columnas de la primera fila
En el caso de que se quiera invocar un alemento de una amtriz se debe tener en cuenta que MatLab
leera los elementos por columna
B,B(2)
B =
5 9 10
7 1 3
2
ans = 7
[A;B],[A,B]
ans =
1 2 3
4 7 8
5 9 10
7 1 3
ans =
1 2 3 5 9 10
4 7 8 7 1 3
Producto punto
ans = 31
Producto cruz
ans =
2 37 -30
Maximos
Para obtener el elemento maximo de una matriz ocupamos el comando max(A). Si la matriz
es un vector columna entonces max(A) retornora el mayor elemento de dicho vector, pero si
escribimos [a,b]=max(A) entonces a correspondera al mayor elemento de dicho vector y b sera la fila
en el cual se ubica dicho elemento.
Si A es un vector fila entonces max(A) retorna el mayor elemento de dicho vector fila, pero si
escribimos [a,b]=max(A) entonces a correspondera al mayor elemento de dicho vector fila y b sera la
columna en el cual se ubica dicho elemento.
3
Se define una matriz cuyos coeficientes van a representar las constantes
del polinomio . Notemos que el grado de polinomio
va a ser donde l es el largo de la matriz. Si quisieramos representar el
polinomio escribimos
clear ; p=[1 0 -3 0 1]
p =
1 0 -3 0 1
Evaluar polinomios
Para ello ocupamos el comando polyval(p,a) donde basicamente lo que hacemos es evaluar el
polinomio p en a
polyval(p,2)
ans = 5
Sin embargo el elemento a tambien puede ser una matriz de tal forma que el polinomio se evalua en los
diferentes valores que componen a la matriz a
a=[1 2 4];polyval(p,a)
ans =
-1 5 209
Raices de un polinomio
Para encontrar las raices de un polinomio ocupamos el comando roots(p). Notemos que las soluciones
aparecen expresadas con 4 decimales.
roots(p)
ans =
-1.6180
1.6180
-0.6180
0.6180
Si el polinomio no esta definidos escribimos la matriz del polinomio dentro del comando roots
roots([1 0 -3 0 1])
ans =
-1.6180
1.6180
-0.6180
0.6180
4
Para definir un polinomio mediante sus raices ocupamos el comando poly([raices])
root=[-sqrt(2) sqrt(2)];poly(root)
ans =
1.0000 0 -2.0000
El polinomios es
clear ; x=[-2*pi:pi/100:2*pi];
y=x.^2 .*sin(x)./((x-10).^2);
plot(x,y),grid on,title('x.^2 .*sin(x)./((x-10).^2)'),xlabel('Eje x'),ylabel('Eje y')
5
Varias funciones en un grafico
clear
x=linspace(-2*pi,2*pi);
y1=sin(x);
plot(x,y1)
hold on
y2=cos(x);
plot(x,y2)
hold off
Otra forma, una vez ya definidos los intervalos y las funciones, seria mediante el codigo
% plot(x,y1,x,y2)
Sub-graficos
6
Para realizar sub-graficos usamos el comando donde n es el numero de casilla que se
esta tratando contando desde izquierda a derecha.
clear ;
x=linspace(-1,1);
y1=x;y2=x.^2;y3=x.^3;
subplot(1,3,1),plot(x,y1),grid on,title('Primer grafico')
subplot(1,3,2),plot(x,y2),grid on,title('Segundo grafico')
subplot(1,3,3),plot(x,y3),grid on,title('Tercer grafico');
Curvas parametrcias en 2D
Recordemos que una curva parametrica queda determinada por una sola variable, usualmente
denominada t, de tal forma que esta adopta la ecuacion .
Notese que en el codigo se define x no , analogo para y. Esto ya que de lo contrario el codigo falla.
7
Curvas parametrcias en 3D
Recordemos que una curva paramétrica se parametriza mediante una sola variable, usualmente
denominada por t, de la forma . Para graficar definimos el intervalo de t como una
matriz o mediante el comando linspace, luego usamos el comando plot3(x,y,z)
Notese que en el codigo se define x no , analogo para . Esto ya que de lo contrario el codigo
falla.
t=linspace(-2*pi,2*pi);x=cos(t);y=sin(t);z=t;plot3(x,y,z)
8
Grafico en coordenas polares
theta=[0:pi/100:2*pi];
polarplot(theta,sin(2*theta).*cos(2*theta))
9
Graficos de funciones en 3D
Para graficar una funcion del tipo definimos los intervalos x e y de la misma forma que se
hace para los graficos en 2D. Luego mediante el comando definimos la malla que va a
servir de superficie para la funcion y luego definimos nuestra funcion z para finalmente plotear mediante
los comandos surf(x,y,z) , mesh(x,y,z) o contour3(x,y,z,n) donde n es el numero de curvas de nivel. Lo
unico que cambia es la "textura" del grafico
clear all
x=[-5:0.1:5];
y=[-2:0.1:3];
[x,y]=meshgrid(x,y);
z=x.*exp(-x.^2-y.^2);
surf(x,y,z),xlabel('x'),ylabel('y'),zlabel('z')
10
Si x e y tuvieran el mismo intervalo bastaria con escribir
%[x,y]=meshgrid(-5:0.1:5)
El uso de lenguaje simbolico permite ampliar la gamma de funciones que podemos definir, todo esto sin
la necesidad de matrices.
Lo primero que hacemos es definir la(s) variable(s) simbolcia(s) ha usar mediante el comando syms,
luego somos libres de crear nuestra funcion.
clear ; syms x;
f(x)=x^2 +2*x+3
f(x) =
Notese que al usar lenguaje simbolico no hay encesidad de usar los camandos , propio de las
matrices.
11
clear ; syms x y;
f(x,y)=sin(x)+exp(-x^2-y^2)
f(x, y) =
y(x)=piecewise(x>0,-1,x<=0,2)
y(x) =
g(x) =
h(x)=piecewise(x~=1,(x^2-1)/(x^2+1),x==1,1)
h(x) =
Notese que la ausencia de condicion para la tercera parte de se interpreta como "cualquier otro
caso"
Para encontrar las raices de una funcion usamos el comando solve(eqn,var). Si la ecuacion es de
una variable no hace falta especificarla.
syms x;solve(x^2+2==1,x)
ans =
12
syms x ; solve(1/x -3*x^2 + x-2,x,'MaxDegree',3)
ans =
Si se quisieran conocer los valores numericos usamos vpa(x,n) donde x es el numero que se quiere
dejar expresado de forma numerica y n es el numero de decimales. Por defecto
ans =
Muchas veces hay ecuaciones que no son algebraicamente resolubles, para ello lo que
hacemos es buscar la "solucion mas proxima". En MatLab esto es posible gracias al
comando vpasolve(eqn,var). Si la ecuacion es de una variable no hace falta especificarla.
syms x ; vpasolve(cos(x)==x,x)
ans =
Ocupamos
x =
y =
13
z =
syms x y z
eqn=[x+y+z==3,2*x+3*y+z==5,x-y==2];sol=solve(eqn)
sol.x
ans =
sol.y
ans =
sol.z
ans =
Ocupamos
x =
y =
Barras de error
Si quisieramos graficar ciertos datos discretos, digamos x e y, cada uno con un error de xerr e yerr
correspondiente mente entonces usamos el comando errorbar(x,y,yneg,ypos,xneg,xpos) donde
yneg es el error de y 'por abajo', ypos es el error de y por 'arriba', en el caso de
x entonces xneg seria el error por la 'izquierdo' y xpos el error por la 'derecha'.
Por ejemplo
clear
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
yneg = [1 3 5 3 5 3 6 4 3 3];
ypos = [4 3 3 1 7 9 5 3 1 2];
xneg = [3 2 5 9 7 1 4 9 8 4];
xpos = [2 5 3 5 2 5 2 2 5 5];
14
errorbar(x,y,yneg,ypos,xneg,xpos,'s','MarkerSize',10,'MarkerEdgeColor','red','MarkerFaceColor'
clear
x = 1:10:100;
y = [20 30 45 40 60 65 80 75 95 90];
neg = [1 3 5 3 5 3 6 4 3 3];
pos = [2 5 3 5 2 5 2 2 5 5];
errorbar(x,y,neg,pos,'both','s','MarkerSize',10,'MarkerEdgeColor','red','MarkerFaceColor','red
15
Graficas de funciones en 2D
clear; syms x
y(x) = 1/x;fplot(y,[-2,2]), grid on,xlabel('x'),ylabel('y'),title('1/x')
16
Si no se especifica el intervalo la funcion se grafica para y queda definida en todo su
dominio (si se intenta desplazar el grafica con el mouse veriamos que la funcion sigue, contrario a lo
que pasaria si el intervalo x estuviera definido en fplot).
17
Cuando se trata con funciones que poseen ptos de discontinuidad es mucho mas recomendables
trabajarlas mediante lenguaje simbolico que con matrices.
18
Un comando alternativo, una vez ya definidas las funciones, seria
% fplot(f1)
%hold on
%fplot(f2)
Otro ejemplo
19
Sub-graficos
Al igual que con matrices, para realizar sub-graficos usamos el comando donde n es
el numero de casilla que se esta tratando contando desde izquierda a derecha.
syms x,y1(x)=sin(x);y2=exp(x);y3=cosh(x);
subplot(3,1,1),fplot(y1,[-2*pi 2*pi]),title('sin'),grid on
subplot(3,1,2),fplot(y2,[0,4]),title('e^x'),grid on
subplot(3,1,3),fplot(y3),title('cosh'),grid on
20
curvas parametricas en 2D
Recordemos que una curva parametrica queda determinada por una sola variable, usualmente
denominada t, de tal forma que esta adopta la ecuacion .
x(t) =
21
Ecuaciones implicitas en 2D
22
Graficos de funciones en 3D
23
Grafico de superficies parametricas en 3D
24
Grafico de funciones parameticas en 3D
Recordemos que una curva paramétrica se parametriza mediante una sola variable,
usualmente denominada por t, de la forma . Para graficar usamos el
comando fplot3(funx,funy,funz,tinterval), si no se especifica el intervalo de t este esta por
defecta para .
25
Funciones implicitas en 3D
syms x y z;fimplicit3(x^2+y^2-z^2==1)
26
Mapas de contornos
27
Es de especial interés cuando se trabaja con graficos de contorno tener una barra que nos indique los
nivles de las curvas. Para ello escribimos
28
Un fondo de grafico particularmente interesante es el tipo ’Fill’, para ello escribimos
29
Juntando todo
30
Notemos que para el unico tipo de grafico en el cual podemos especificar todos los valores de las
dimensiones correspondientes es cuando tratamos con funciones implicitas o graficos de contorno. En
el caso contrario solo especificamos el intervalo x si es en 2D o x e y si es en 3D.
x=-2:0.05:2;y=-2:0.05:3;
[x,y]=meshgrid(x,y);
z=6.*exp(-3.* x.^2 -y.^2)+x./2 +y;
subplot(1,2,1),surf(x,y,z),shading flat %este comando quita los cuadros de la malla
subplot(1,2,2),pcolor(x,y,z)
shading flat
31
% junto con pcolor estos dos ultimos comandos crean un mapa de contorno muy parecido al usado
%lenguaje simbolico cuando usamons 'Fill','on'
%Una opcion alternativa, para matrices, es el comando contour que se vera mas adelante
%Para syms lo mas para la traza de funciones es fsurf(...,'EdgeColor','none')
Calculo
Limites
clear
syms x,f(x)=sin(x)/x;limit(f,x,0)
ans =
Factorizacion y simplificacion
32
syms x,factor(x^3+3*x^2+2*x)
ans =
syms x;simplify((x^2-1)/(x+1))
ans =
Derivadas
Como siempre, si se quiere derivar una lista de funciones escribimos diff([f1 f2 f3...],var). La(s)
funcion(es) pueden o no estar pre-definidas
syms x y z;f(x,y)=x*exp(-x^2-y^2);diff(f,x),diff(f,y)
ans(x, y) =
ans(x, y) =
g(x,y,z)=x*y*z;diff(g,x,3),diff(f,y,z,x)
ans(x, y, z) =
ans(x, y) =
Integrales
El camondo int(f,var) calcula la intrgral de f respecto a la variable var (si f depende solo de una
variable no es necesario especificarla) .
Para la integral definida escribimos int(f,var,a,b) que es la integral de f respecto a var desde a hasta b.
Como siempre, si se quiere integrar una lista de funciones escribimos int([f1 f2 f3...],var). La(s)
funcion(es) pueden o no estar pre-definidas.
ans(x) =
ans =
33
int([x,x^2,x^3],x,[1 2])
ans =
ans =
Para calcular el gradiente de una funcion escalar f, el cual se denota por , usamos el
comando gradient(f)
syms x y z;f(x,y,z)=x.*exp(-x^2-y^2-z.^2);gradient(f)
ans(x, y, z) =
Sin embargo al usar lenguaje simbolico el gradiente pertenece a la clase symfun, lo cual no es muy util
si se quiere graficar un campo de velocidades. Para ello lo que hacemos es tratar la funcion como una
matriz y graficamos mediante el comando quiver(x,y,dx,dy,scale) el comando scale puede o no
anotarse.
close all
[x,y]=meshgrid(-2:0.1:2);
z=x.*exp(-x.^2-y.^2);
[dx,dy]=gradient(z);
quiver(x,y,dx,dy),axis tight %este ultimo comando es para una mejor rango en los ejes
34
Graficando junto con el mapa de contorno mediante el comando contour(x,y,z,n) donde n es
el numero de curvas de nivel que se representan en el grafico, este puede o no
expecificarse(notese la diferencia cuando el mapa de contorno es mediante lenguaje
simbolico;fcontour(f) o fcontour(f,xyinterval))
close all
[x,y]=meshgrid(-1:0.1:1);
z=x.*exp(-x.^2-y.^2);
[dx,dy]=gradient(z);
contour(x,y,z)
hold on
colorbar
quiver(x,y,dx,dy)
hold off
35
Para un campo de velocidades en 3D ocupamos el comando quiver3(x,y,z,dx,dy,dz,scale) el
comando scale puede o no anotarse. Para calcular los vectores normales
ocupamos [dx,dy,dz]=surfnorm(x,y,z).
close ;
[x,y]=meshgrid(-1.5:0.1:1.5);
z=x.*exp(-x.^2-y.^2);
[dx,dy,dz]=surfnorm(x,y,z);
quiver3(x,y,z,dx,dy,dx,1.4)
36
juntando el grafico normal con la superficie
[x,y]=meshgrid(-1.5:0.1:1.5);
z=x.*exp(-x.^2-y.^2);
[dx,dy,dz]=surfnorm(x,y,z);
surf(x,y,z)
hold on
quiver3(x,y,z,dx,dy,dx,1.4) %el ultimo comando especifica el tamaño de los vectores
37
Podriamos ahorrar ciertos pasos y obtener el siguiente grafico
close all;
[x,y]=meshgrid(-1.5:0.1:1.5);
z=x.*exp(-x.^2-y.^2);
surfnorm(x,y,z)
38
Rotor
Para calcular el rotor de una funcion vectorial F, el cual se denota por , usamos el
comando curl(F)
syms x y z;curl([x*exp(-x^2-y^2-z^2),cos(1/(x^2+z^2)),sin(y)])
ans =
Divergencia
39
Para calcular la divergencia de una funcion vectorial F, lo cual se denota por , usamos el
comando divergence(F)
syms x y z;divergence([x*exp(-x^2-y^2-z^2),cos(1/(x^2+z^2)),sin(y)])
ans =
Campos vectoriales
clear
[x,y]=meshgrid(-1:0.1:1);
p=y;q=x;
quiver(x,y,p,q), axis tight
grid on,title('F(x,y)=(y,x)')
40
syms x y ;u=y;v=x;diff(u,y)-diff(v,x)
ans =
fx=int(u,x);gy=int(v-diff(fx,y),y);f(x,y)=fx+gy
f(x, y) =
Luego graficamos el campo vectorial junto con un mapa de contorno de su potencila asociado
syms x y
fcontour(f,[-1 1 -1 1],'m') % recordemos que f lo definimos en el comando anterior
[x,y]=meshgrid(-1:0.1:1);p=y;q=x;
hold on
quiver(x,y,p,q),axis tight,title('F(x,y)=(y,x)'),legend('f(x,y)=xy'),xlabel('x'),ylabel('y')
hold off
[x,y,z]=meshgrid(-1:0.2:1);
p=2.*x.*y;q=x.^2 + z.^2;r=2.*y.*z;
quiver3(x,y,z,p,q,r),axis tight,title('F(x,y,z)=(2xy,x^2 + z^2,2yz)')
41
Notemos que el campo es conservativo,
comprobando esto y calculando el potencial asociado (para ello usamos lenguaje simbolico)
ans(x, y, z) =
fx=int(u,x);gy=int(v-diff(fx,y),y);hz=int(w-diff(fx,z)-diff(gy,z),z);f(x,y,z)=fx+gy+hz
f(x, y, z) =
Integrales de linea
Para calcular la integral de linea de un campo vectorial F sobre una curva parametrica r, es
decir , usamos el siguente codigo:
syms x y z t;
F(x,y,z)=[ x^2, y, z^(1/2)]; % Definimos F(x,y,z)
r(t)=[cos(t),sin(t),t]; % Definimos r(t)
h(t)=subs(F,[x,y,z],r) % composicion F(r(t))
42
h(t) =
k(t)=diff(r,t) % r'(t)
k(t) =
sum(h.*k) % Definimos F(r(t)) punto r'(t). Por ahora esta es la unica forma que conozco
ans(t) =
ans(t) =
Ecuaciones diferenciales
Resolucion de ecuaciones diferenciales
clear ;syms y(t) % notese que defimos de inmediato y(t). No debe escribirse syms y t !!!
dsolve(diff(y,t)==2*t*y)
ans =
syms y(t)
eqn= diff(y,t,2)+2*diff(y,t)+y==2*cos(5*t)+4
eqn(t) =
ans =
43
Sistemas de ecuaciones diferenciales
clear
syms x(t) y(t)
eqn=[diff(x,t,2)==x+diff(y,t),diff(y,t,2)==y+diff(x,t)];
[x,y]=dsolve(eqn)
x =
y =
44
syms x(t) y(t)
eqn=[diff(x,t,2)==x+diff(y,t),diff(y,t,2)==y+diff(x,t)];
sol=dsolve(eqn);
sol.x
ans =
sol.y
ans =
45
eqn=[diff(x,t,2)==x+diff(y,t),diff(y,t,2)==y+diff(x,t)];
Dx=diff(x,t);Dy=diff(y,t);cond=[x(0)==1,Dx(0)==0,y(0)==1,Dy(0)==0];
[x,y]=dsolve(eqn,cond)
x =
y =
Transformada de Laplace
syms t s;laplace(cos(t),t,s)
ans =
Como siempre, podemos transformar una lista de funciones mediante la agrupacion en forma de matriz
ans =
syms t s;ilaplace(1/(s+1)^2,s,t)
ans =
Como siempre, podemos transformar una lista de funciones mediante la agrupacion en forma de matriz
syms t s;ilaplace([s/(s^2+1),6*s/(s^2+9)^2],s,t)
46
ans =
47