P. 1
Cálculo simbólico con Matlab Syms

Cálculo simbólico con Matlab Syms

|Views: 22.297|Likes:
Publicado porBoyan Ivanov Bonev
Guía para el cálculo simbólico de una variable con el paquete Syms de Matlab.
Guía para el cálculo simbólico de una variable con el paquete Syms de Matlab.

More info:

Categories:Types, School Work
Published by: Boyan Ivanov Bonev on Oct 31, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/09/2015

pdf

text

original

Cálculo simbólico en MatLab

Boyan Bonev Facultad de Ciencias Económicas y Empresariales Universidad de Alicante 31 de octubre de 2011

Resumen de funcionalidades
A continuación se describen varias funcionalidades del paquete de cálculo simbólico.

Paquete syms
En un principio Matlab se diseñó orientado al cálculo numérico. Así, si intentamos calcular el seno de una variable no numérica:

>> y=sin(x) ??? Undefined function or variable 'x'. Matlab no conoce el valor numérico de x. >> syms x

Recientemente se añadió un paquete adicional que permite a Matlab trabajar con variables simbólicas, teniendo que declararlas antes de usarlas:

Simplicar
Ahora podemos usar expresiones que contengan a esta variable. Por ejemplo, si queremos simplicar o evaluar una expresión lo hacemos con el comando

simplify. >> y=sin(x); >> z=cos(x); >> simplify(y^2+z^2) ans = 1

Sustituir valores en la variable
Para evaluar una expresión con determinado valor de la variable:

1

>> subs(x^2-x-1,-3) ans = 11

Resolver ecuaciones
Para resolver la ecuación

>> solve(x^2-x-1) ans = 5^(1/2)/2 + 1/2 1/2 - 5^(1/2)/2

x2 − x − 1 = 0:

obteniendo estas dos soluciones.

Límites
Con el paquete simbólico también podemos calcular límites, derivadas, integrales, etc. Para calcular el límite para

>> limit(sin(x)/x,0) ans = 1

f (x)= sin(x) x f (n) =

cuando

x

tiende a cero:

>> syms n >> limit((n^3+3*n^2-2*n)/(3*n^3-1),inf) ans = 1/3

Y un límite en el innito de

n3 +3n2 −2n : 3n3 −1

Derivadas
Para calcular derivadas usamos el comando

>> syms x >> f=x^3-cos(x)+1; >> g=diff(f) g = 3*x^2+sin(x)

diff:

Evaluar funciones
Nótese que en los comandos introducidos se ha denido la función como la función

f (x),

así por

g(x),

que almacena el resultado de la derivada. Estas funciones

se pueden evaluar en un valor concreto de ejemplo, evaluamos >> subs(f,1) ans = 1.4597

x

por medio del comando

subs,

f (1):

2

Integrales indenidas
int. Si queremos calcular >> int(g) x^3 - cos(x)
Por otro lado también es posible calcular primitivas utilizando el comando la primitiva del último resultado,

g:

Integrales denidas
Para calcular integrales denidas en un intervalo, podemos indicar los límites de éste en la función introducimos:

int. Por ejemplo, para la integral denida

´3
1

3x3 +sin(x) dx

>> int(3*x^2+sin(x),1,3) ans = cos(1) - cos(3) + 26
Nota: para integrales impropias utilizaremos

-inf ó inf para indicar el límite

inferior y/o superior.

Representación gráca
Podemos representar grácamente una función utilizando la función ezplot:

>> ezplot(f)
x

o bien tecleando la expresión directamente (pero habiendo declarado previamente como simbólica, con

syms x): >> ezplot(x^3 - cos(x) + 1)

El resultado se puede ver en la gura 1. Más información en la documentación del paquete syms:

http://www.mathworks.es/help/toolbox/symbolic/index.html

Suma de series
1 2n ; su suma desde un término hasta otro, por ejemplo desde 1 hasta 3, se calcula con:
Sea la serie

>> syms n >> symsum(1/2^n,1,3) ans = 7/8

La suma desde un término hasta el innito se calcula así:

>> symsum(1/2^n,1,inf) ans = 1

3

x3 − cos(x) + 1 250 200 150 100 50 0 −50 −100 −150 −200 −250 −6 −4 −2 0 x 2 4 6

Figura 1: Resultado de la función

ezplot.

Ejemplo de análisis de una función
A continuación se muestra un ejemplo de estudio de una función por MatLab, pero no objetivo de la asignatura no es aprender a programar. La función a estudiar será

asistido automático. Aunque podríamos automatizarlo del todo, el
√ f (x) = x 4 − x2

La introducimos en MatLab, declarando previamente que la como variable simbólica, y no numérica:

x

debe tratarse

>> syms x >> f=x*sqrt(4-x^2) f = x*(4 - x^2)^(1/2)

Nota: a lo largo de esta guía lo que el usuario introduce en matlab está marcado por >>; lo demás es la respuesta de MatLab.

Dominio, continuidad, asíntotas verticales
El dominio de la función son los ecuación

x∈R

tales que

4 − x2 ≥ 0.

Resolvemos la

4 − x = 0 y obtenemos >> solve(4-x^2,0) ans = 2

2

dos soluciones:

4

-2
Para ver si y el 3:

4 − x2

es positivo o negativo en el intervalo

[−2, 2],

sustituimos

un valor que pertenezca al intervalo y otro que no pertenezca, por ejemplo el 1

>> subs(4-x^2,1) ans = 3 >> subs(4-x^2,3) ans = -5
Por tanto la función es negativa fuera del intervalo y positiva dentro, así que:

D(f ) = [−2, 2]
La función es continua en su dominio y no tiene asíntotas verticales. Los límites del dominio son cerrados así que no hace falta estudiar los límites (sobra con sustituir en la función), pero si hubiera que hacerlo se haría con el comando:

>> limit(f,-2) ans = 0 >> limit(f,2) ans = 0

Puntos de corte con el eje y
Para x = 0, >> subs(f,0) ans = 0 obtenemos que

f (0) = 0,

por tanto un punto de corte es el

(0, 0).

Puntos de corte con el eje x
Para f (x) = 0 tenemos >> solve(f,0) ans = 0 2 -2 que resolver dicha ecuación:

y obtenemos tres soluciones de

x para y = 0, así que los puntos de corte son:

(−2, 0), (0, 0)

y

(2, 0).

5

Asíntotas horizontales
No es posible estudiar el comportamiento de la función en el innito porque está fuera de su dominio. De haberlo sido, lo habríamos hecho así:

>> limit(f,inf) ans = i*Inf >> limit(f,-inf) ans = -i*Inf

En este caso obtenemos números complejos (la i signica parte imaginaria), que no pertencen al dominio real (se debe a la raíz cuadrada de números negativos).

Primera y segunda derivada
Como vamos a utilizarlas repetidas veces, vamos a almacenarlas bajo los nombres f1 y f2 respectivamente. Además vamos a aplicar el comando de simplicación con el único propósito de ver las mismas expresiones que hubiéramos obtenido a mano:

>> f1 = simplify(diff(f)) f1 = -(2*(x^2 - 2))/(4 - x^2)^(1/2) >> f2 = simplify(diff(f1)) f2 = (2*x*(x^2 - 6))/(4 - x^2)^(3/2)
Las expresiones obtenidas signican:

2(x2 − 2) f (x) = − √ 4 − x2 2x(x2 − 6) f (x) = (4 − x2 )3

Crecimiento, decrecimiento y extremos locales
Para obtener los puntos críticos tenemos que resolver la ecuación >> solve(f1,0) ans = 2^(1/2) -2^(1/2) obteniendo dos soluciones: afecta sólo al 2, no al signo). Para ver si son extremos locales y clasicarlos, los sustituimos en la segunda derivada: >> subs(f2, 2^(1/2)) ans =

f (x) = 0:

x=

√ 2, x = − 2.

(Nótese que la potencia (1/2)

6

-4.0000 >> subs(f2,-2^(1/2)) ans = 4.0000 obteniendo

0,
en

por tanto

√ √ √ 2) f ( √ < 0, por tanto x = 2 es un máximo local, y f (− 2) > x = − 2 es un mínimo local.

Para ver qué valor alcanza la función en dichos extremos, sobra con sustituirlos

f (x): >> subs(f, 2^(1/2)) ans = 2 >> subs(f,-2^(1/2)) ans = -2
Finalmente vamos a comprobar el crecimiento/decrecimiento de la función

dentro de todo su dominio, particionado por los dos extremos que hemos obtenido, es decir, en los intervalos

√ √ √ [−2, − 2), (− 2, 2)

y

√ ( 2, 2].
y

Para ello sobra con

que sustituyamos algún valor de cada uno de los intervalos en la pendiente es positiva o negativa, por ejempo,

f (x)

para ver si

>> subs(f1,-1.9) ans = -5.1561 >> subs(f1,0) ans = 2 >> subs(f1,1.9) ans = -5.1561 Por tanto: √ Si x ∈ [−2, − 2) ⇒ f (x) < 0 ⇒ f (x) es decreciente, √ √ si x ∈ (− 2, 2) ⇒ f (x) > 0 ⇒ f (x) es creciente, √ si x ∈ (− 2, 2] ⇒ f (x) < 0 ⇒ f (x) es decreciente.

−1,9, 0

1,9:

Intervalos de concavidad/convexidad y puntos de inexión
La segunda derivada se anula en:

>> solve(f2,0) ans = 0 6^(1/2) -6^(1/2)

7

pero de los tres, sólo el punto -1 y 1:

x = 0 pertenece al dominio de f (x). Estudiamos

el signo de la segunda derivada a ambos lados de dicho punto, sustituyendo en

>> subs(f2,-1) ans = 1.9245 >> subs(f2,1) ans = -1.9245 Si x ∈ (−2, 0) ⇒ f (x) > 0 ⇒ f (x) es convexa, si x ∈ (0, 2) ⇒ f (x) < 0 ⇒ f (x) es cóncava. La función cambia de convexa a cóncava en x = 0,

por tanto el punto

(0, 0)

es un punto de inexión.

Representación gráca
Representamos grácamente una función utilizando la función ezplot:

>> ezplot(f, [-2.1, 2.1])

x (4 − x2)1/2

2 1.5 1 0.5 0 −0.5 −1 −1.5 −2

−2

−1.5

−1

−0.5

0 x

0.5

1

1.5

2

En este caso hemos indicado entre qué intervalos debe dibujarse la función, para dejar un pequeño margen de 0.1 unidades a los lados del dominio de la función.

Limitaciones
Nótese que la gráca no llega a representarse en los puntos

(−2, 0)

y

(2, 0).

Según la implementación de las funciones de representación puede haber distintas

8

limitaciones a la hora de representar. En este caso la gáca está incompleta probablemente debido a que la pendiente de la función tiende a innito conforme se acerca al nal de su dominio. Sin embargo no signica que la función no esté denida en estos puntos. Lo podemos comprobar dibujando la gráca en un intervalo muy pequeño alrededor del punto -2. (Nota: el cambio de curvatura en la segunda gráca con respecto a la primera se debe a diferentes cambios de escala en los ejes x e y).

>> ezplot(f,[-2.01,-1.99])
x (4 − x2)1/2 0 −0.05 −0.1 −0.15 −0.2 −0.25 −0.3 −0.35 −0.4 −2.008 −2.006 −2.004 −2.002 −2 x −1.998 −1.996 −1.994 −1.992 −1.99

Ningún programa de representación gráca es perfecto. Es muy común que importantes detalles de la función no aparezcan representados debido a la escala de representación. Por tanto es arriesgado extraer conclusiones sobre una función solamente a partir de una gráca generada por ordenador. Utilizaremos los programas matemáticos para agilizar nuestro trabajo y para comprobar los resultados pero teniendo presentes los conocimientos teóricos adquiridos en la asignatura.

Referencias
Más información en la documentación del paquete syms:

http://www.mathworks.es/help/toolbox/symbolic/index.html

9

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->