Apuntes Matlab

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 47

Apuntes de 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

La multiplicacion de matrices se hace mediante el comando ∗, sin embargo si quiseramos multiplicar


termino por termino los elementos de una matriz A con los de una matriz B usamos

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

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().

El largo, el cual indica el numero de columnas, mediante el comando length()

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

Para leer en general es A(fili_start:fila_end, columna_start:columna_end)

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

MatLab considera el primer elemento de la matriz mediante el numero 1.

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

Para unir matrices ejecutamos todo como si fuera una matriz

[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

Para el producto punto entre vectores usamos el comando dot(A,B)

A=[1 4 5];B=[8 2 3 ];dot(A,B)

ans = 31

Producto cruz

Para el producto cruz entre dos vectores usamos el comando cross(A,B)

A=[1 4 5];B=[8 2 3 ];cross(A,B)

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.

Si A es una matriz entonces max(A) retorna una serie de elementos en los


cuales cada numero representa el mayor elemento de cada columna, pero si
escribimos [a,b]=max(A) entonces a correspondera una serie de elementos donde cada numero
representa el mayor numero de cada columna y b sera la fila en el cual se ubica dichos elementos. En
el fonde se vera cada columna como un vector columna!!

Polinomios y graficos mediante el uso de matrices


Definir polinomios

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

Polinomios a partir de sus raices

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

Graficos mediante el uso de matrices


Graficos de funciones en 2D

Para graficar una funcion lo primero que hacemos es definir la matriz de


intervalo para luego definir una matriz funcion y la cual sera evualada en todos los
puntos de la matriz x. Finalmente plotemos mediante el comando plot()

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')

Un comando util es el cual sustituye a y da el mismo


resultado

5
Varias funciones en un grafico

Para ello ocupamos el comando hold on

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)

y obtendriamos exactamente el mismo resultado (obviar %)

Si se quisiera re-definir los intervalos usamos y de manera


analoga . Si quisieramos re-definir los dos a la vez se
usa .

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 .

Lo primero que se hace es definir el conjunto de vectores t mediante el


comando para luego definir e .

Notese que en el codigo se define x no , analogo para y. Esto ya que de lo contrario el codigo falla.

clear , close all


t=linspace(-5,5);x=cos(t);y=sinh(t);
plot(x,y), grid on, xlabel('Eje x'),ylabel('Eje y'),title('r(t)=(cos(t),sinh(t))')

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

Un grafico, mediante matrices, en coordenadas polares puede definirse mediante la


forma polarplot(theta,rho) donde theta se predifine como una matriz o mediante el
comando linspace

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)

Funciones y graficos mediante el uso de Lenguaje Simbolico


Definir funciones

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.

La funcion tampoco se tiene que restringir a una sola variable

11
clear ; syms x y;
f(x,y)=sin(x)+exp(-x^2-y^2)

f(x, y) =

Para el uso de funciones a trozos usamos el


camando piecewise(con1,val1,con2,val2..) ó piecewise(con1,val1,con2,val2.., otherwiseVal).

y(x)=piecewise(x>0,-1,x<=0,2)

y(x) =

g(x) = piecewise(x<-2, -2, -2<x<0, 0,1)

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"

Raices de ecuaciones no trascendentes

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 =

Si no se establece una igualdad se presume .

Para ecuaciones de grado 3 en adelante usamos solve(eqn,var,'MaxDegree',n) donde n es el


grado del polinomio

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

syms x;vpa(solve(1/x -3*x^2 + x-2,x,'MaxDegree',3),4)

ans =

Raices de ecuaciones trascendentes

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 =

Sistemas de ecuaciones no trascendentes

Ocupamos

syms x y z;[x,y,z]=solve(x+y+z==3,2*x+3*y+z==5,x-y==2,[x y z])

x =
y =

13
z =

una forma alternativa seria

syms x y z
eqn=[x+y+z==3,2*x+3*y+z==5,x-y==2];sol=solve(eqn)

sol = struct with fields:


x: [1×1 sym]
y: [1×1 sym]
z: [1×1 sym]

sol.x

ans =

sol.y

ans =

sol.z

ans =

Sistema de ecuaciones trascendentes o numericamente complejos

Ocupamos

syms x y;[x,y]=vpasolve(cos(y)+x==pi,cos(x)-y==2*pi,[x y])

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'

Por otro lado, si xneg = yneg y xpos = ypos entonces escribimos

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

Para graficar una funcion del tipo usamos el comando fplot(f,xinterval).

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).

Por otro lado no es necesario pre-definir la funcion

syms x; fplot(atan(x)), grid on,xlabel('x'),ylabel('y'),title('atan'),ylim([-1.5 1.5])

17
Cuando se trata con funciones que poseen ptos de discontinuidad es mucho mas recomendables
trabajarlas mediante lenguaje simbolico que con matrices.

Varias funciones en un grafico

Para este caso escribimos fplot([f1,f2..],xinterval)

syms x, fplot([cos(x),sin(x),tan(x)],[-2*pi,2*pi]),grid on,legend('cos','sin','tan')

18
Un comando alternativo, una vez ya definidas las funciones, seria

% fplot(f1)
%hold on
%fplot(f2)

Otro ejemplo

syms x,fplot(x^2,[0 5]),hold on,plot(2,4,'ok',[2 2],[0 25],'--r',[0 5],[4 4],'--r'),title('x^2

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 .

Mediante lenguaje simbolico una ecuacion parametrica adopta la siguiente


forma: fplot(funx,funy,tinterval). En el codigo da lo mismo si se expresa x o , analogo
para y. Tampoco importa ser consistente con la notacion.

close ,syms t;x(t)=cos(t),y(t)=t;fplot(x,y,[-5 5])

x(t) =

21
Ecuaciones implicitas en 2D

Una ecuación implícita en 2 dimensiones es de la forma donde muchas


veces no es posible despejar, u obtener en su totalidad . Para ello usamos el
comando fimplicit(f),fimplicit(f,[min max]),fimplicit(f,[xmin xmax ymin
ymax]) cualquiera de las tres formas es correcta.

syms x y,fimplicit(x^2+y^2==1,[-1 1 -1 1])

22
Graficos de funciones en 3D

Para graficar una funcion del tipo definimos las variables x e y de


la misma forma que se hace para los graficos en 2D. Luego mediante el
comando fsurf(funx,funy,funz,stinterval) graficamos (Tambien podriamos
usar fmesh(f) o fmesh(f,xyinterval)).

syms x y;f(x,y)=exp(-x^2 - y^2);fsurf(f,[-1 1 -1 1])

23
Grafico de superficies parametricas en 3D

Recordemos que una superficie paramétrica se puede expresar de la


forma . Al igual que las superficie en 3D las superficies paramétricas
en 3D se pueden formar mediante el comando fmesh(funx,funy,funz,stinterval) (analogo
para fsurf). Grafimos la esfera unitaria

syms s t;x(s,t)=cos(s)*sin(t);y(s,t)=sin(s)*sin(t);z(s,t)=cos(t);fmesh(x,y,z,[0 2*pi 0 pi])

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 .

syms t,x(t)=cos(t);y(t)=sin(t);z(t)=t;fplot3(x,y,z,[0 10*pi])

25
Funciones implicitas en 3D

Una ecuación implícita en 3 dimensiones es de la forma donde muchas


veces no es posible despejar, u obtener en su totalidad, . Para graficar usamos el
comando fimplicit3(f,xyzinterval). Si no se especifica la igualdad se asume , por otra
parte si no se especifica el intervalo se asume .

syms x y z;fimplicit3(x^2+y^2-z^2==1)

26
Mapas de contornos

Para graficar un mapa de contorno de la funcion usamos el


comando fcontour(f) o fcontour(f,xyinterval).

syms x y;fcontour(x*exp(-x^2-y^2),[-1 1 -1 1])

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

syms x y;fcontour(x*exp(-x^2-y^2),[-1 1 -1 1]),hold on,colorbar,hold off

28
Un fondo de grafico particularmente interesante es el tipo ’Fill’, para ello escribimos

syms x y;fcontour(x*exp(-x^2-y^2),[-1 1 -1 1],'Fill','on'),hold on,colorbar,hold off

29
Juntando todo

% syms x y;fcontour(x^2+y^2),hold on,fsurf(x^2+y^2),colorbar,rotate3d on,hold off


syms x y;fsurf(x^2+y^2,'ShowContour','on')

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.

Una alternativa mediante el uso de matrices es de la siguiente forma

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

Un limite en matlab de una funcion cuando se calcula mediante el


codigo limit(f,var,a)

clear
syms x,f(x)=sin(x)/x;limit(f,x,0)

ans =

Si quisieramos calcular los limites laterales usamos


limit(f,var,a,'left') o limit(f,var,a,'right') dependiendo el caso.
Por otro lado si quisieramos aclcular para diferentes funciones en un mismo punto
escribimos limit([f1,f2...],var,a). .

Factorizacion y simplificacion

Para factorizar ocupamos el comando factor(expr)

32
syms x,factor(x^3+3*x^2+2*x)

ans =

Para simplificar ocupamos el comando simplify(expr)

syms x;simplify((x^2-1)/(x+1))

ans =

Derivadas

para derivar ocupamos el comando diff(F,var,n) donde n es la n-esima derivada de f respecto


siempre a la misma variable var (si f depende solo de una variable no es necesario especificarla).
Tambien podemos ocupar diff(F,var1,...,varN), basicamente lo que hace este comadno es
derivar la funcion f primero respecto a var1 luego respecto a var2 y asi sucesivamente.

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.

syms x;f(x)=x^2;int(f,x),int(f,x,1,2) %tambien se pudo haber escrito el intervalo como [1 2]

ans(x) =

ans =

33
int([x,x^2,x^3],x,[1 2])

ans =

Para integrales numericamente complejas usamos el comando vpaintegral(f,x,a,b)

syms x;f(x) = cos(x)/sqrt(1 + x^2);


vpaintegral(f,x,[0 10])

ans =

Gradiente y campo de velocidades

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).

Graficando solo el campo normal

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

Recordemos la definicion de una funcion vectorial: Sea E un subconjunto de . Un campo vectorial


sobre es una función F que asigna a cada punto en E un vector . En
especifico un campo en puede expresarse de la forma , mientras que
uno en se representa mediante la funcion .

Para graficar un campo vectorial en ocupamos el camando quiver(x,y,p,q)

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)')

Notemos que el campo es conservativo, comprobando esto y calculando el


potencial asociado (para ello usamos lenguaje simbolico)

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

Para graficar un campo en ocupamos el comando quiver3(x,y,z,p,q,r)

[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)

clear ;syms x y z;u=2*x*y;v=x^2+z^2;w=2*y*z;F(x,y,z)=[u,v,w];curl(F)

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) =

int(sum(h.*k),t) % Integral de linea

ans(t) =

Ecuaciones diferenciales
Resolucion de ecuaciones diferenciales

Para resolver ecuaciones diferenciales ocupamos el comando dsolve(eqn)

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 =

Si se tratara de un PVI usamos dsolve(eqn,cond)

syms y(t)
eqn= diff(y,t,2)+2*diff(y,t)+y==2*cos(5*t)+4

eqn(t) =

Dy(t)=diff(y,t); %tambien se puedo haber escrito Dy en vezs de Dy(t)


cond=[y(0)==0,Dy(0)==0];
dsolve(eqn,cond)

ans =

43
Sistemas de ecuaciones diferenciales

Para sistemas de ecuaciones diferenciales ocupamos el comando [x1,x2..]= dsolve(eqn)

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 =

Una forma alternativa seria

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 =

Para un PVI escribimos [x1,x2..]= dsolve(eqn,cond)

syms y(t) x(t)

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

Para la transformada de Laplace de una funcion f(t) ocupamos el


comando laplace(f,var,transVar). Si no se especifica var ni transVar , se toma por defecto que la
variable independiente es t y la variable de transformada es s

syms t s;laplace(cos(t),t,s)

ans =

Como siempre, podemos transformar una lista de funciones mediante la agrupacion en forma de matriz

syms t s; laplace([sin(t) cos(t)],t,s)

ans =

Transformada inversa de Laplace

Para la transformada inversa de laplace ocupamos el comando ilaplace(F,var,transVar). Si no


se especifica var ni transVar , se toma por defecto que la variable independiente es s y la variable de
transformada es t

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

También podría gustarte