Está en la página 1de 9

Introducción a Mathematica

Comandos Básicos y Ejemplos con Ecuaciones Diferenciales


Seminario de Métodos Matemáticos II

Funciones y sus derivadas


¿Cómo se define una función?

Comandos Básicos
Para definir una función utilizamos un comando con la siguiente estructura
nombre_funcion [variable_] := expresión
Lo primero es el nombre de la función, que no puede contener caracteres extraños ni espacios. A
continuación, entre corchetes se especifica el nombre de la variable o las variables seguido de un
guion bajo. Para definirla se emplean dos puntos y un igual, y tras ellos podemos escribir ya la
expresión correspondiente. Veamos algunos ejemplo:
*Nota: para evaluar una celda debemos tener el cursor colocado en ella a continuación presionar Mayúscu-
las + Enter

y[x_] := x ^ 2

funcion1[x_, y_] := x + y

Si queremos utilizar una función conocida, Mathematica la reconoce si utilizamos el nombre que le
tenga asociado, con la primera letra en mayúsculas e introduciendo el argumento entre corchetes.
Algunas funciones usuales que podemos estar interesados en usar son las siguientes:
*Nota: las mayúsculas son necesarias si queremos utilizar alguna función que Mathematica ya conozca. A la
hora de definir nuestras funciones podemos escribir el nombre como nos interese.

In[696]:= y[x_] := Sin[x] + Log[x] - Exp[x]


seno logaritmo exponencial

In[707]:= funcion2[x_, y_] := Sqrt[x] / Cosh[y]


raíz cuadr⋯ coseno hiperbólico

También podemos querer evaluar alguna función, de manera que nos devuelva un resultado
numérico. Tanto si la función ya está predefinida como los ejemplos que acabamos de ver, como si
la hemos definido nosotros, usaríamos el comando:
N[Función[valores]]

In[698]:= N[Sin[2]]
⋯ seno

Out[698]= 0.909297
2 seminario_mathematica_mmii.nb

In[708]:= N[funcion2[1, 1]]


valor numérico

Out[708]= 0.648054

Derivadas
Si lo que nos interesa es conocer la derivada de alguna función podemos utilizar diferentes
comandos. El más intuitivo sería introducir un apostrofe, o dos si queremos la derivada segunda
y así. Éste funcionará bien siempre que la función sea de una variable.
Otra forma de escribirlo es la siguiente:
D[Nombre_funcion[variable1, variable2,...] , variable respecto a la que
derivo]

Para derivadas segundas o superiores en este formato, haríamos lo siguiente:


D[Nombre_funcion[variable1, variable2,...] , {variable, número de veces}]

Ejemplos

In[703]:= y[x_] := Cos[x] + 3 * x;


coseno
y '[x]
D[y[x], x]
deriva
D[y[x], {x, 2}]
deriva

Out[704]= 3 - Sin[x]

Out[705]= 3 - Sin[x]

Out[706]= - Cos[x]

In[711]:= funcion2[x, y]
D[funcion2[x, y], {y, 2}]
deriva

Out[711]= x Sech[y]

Out[712]= x - Sech[y]3 + Sech[y] Tanh[y]2 

In[818]:= Clear[y]
borra

Representación Gráfica
Comandos Básicos

Gráficos en 2D
Para representar una función utilizamos el comando ‘Plot’ con la siguiente estructura:
Plot[nombre_funcion[variable], {variable,a,b}]
donde a y b definen el intervalo en el que la quiero dibujar.
También podemos introducir directamente la función en el primer argumento,
Plot[expresion_algebraica, {variable,a,b}]
El comando ‘Plot’ dibuja gráficos en 2D, por lo que debemos dejar sólo una variable libre. Una vez
que evaluamos la celda con ese comando, nos salen opciones debajo donde podemos cambiar el
seminario_mathematica_mmii.nb 3

Para representar una función utilizamos el comando ‘Plot’ con la siguiente estructura:
Plot[nombre_funcion[variable], {variable,a,b}]
donde a y b definen el intervalo en el que la quiero dibujar.
También podemos introducir directamente la función en el primer argumento,
Plot[expresion_algebraica, {variable,a,b}]
El comando ‘Plot’ dibuja gráficos en 2D, por lo que debemos dejar sólo una variable libre. Una vez
que evaluamos la celda con ese comando, nos salen opciones debajo donde podemos cambiar el
estilo, el nombre de los ejes, título, etc.
In[819]:= Plot[x ^ 2 - x + 1, {x, - 2, 2}]
representación gráfica

Out[819]=
4

-2 -1 1 2

In[718]:=

Plot[funcion2[x, 1], {x, 0, 5}]


representación gráfica
1.5

1.0

Out[718]=

0.5

1 2 3 4 5

Gráficos en 3D
También podemos hacer gráficos en 3D, con el comando ‘Plot3D’.
Plot3D[nombre_funcion[variable1, variable2], {variable1,a,b},{variable2,c,d}]
donde a, b, c y d definen los intervalos en los que quiero dibujar la función.
De nuevo, también podemos introducir directamente la función en el primer argumento.
4 seminario_mathematica_mmii.nb

In[721]:= Plot3D[funcion2[x, y], {x, 0, 5}, {y, 2, 5}]


representación gráfica 3D

Out[721]=

In[727]:= Plot3D[x ^ 2 - Cos[3 * x] * y, {x, 0, 10}, {y, 0, 10}]


representación ⋯ coseno

Out[727]=

In[820]:= Plot3Dx2 - Cos[3 * x] y, {x, 0, 10}, {y, 0, 10}, PlotTheme → "Classic"


representació⋯ coseno tema de representación

Out[820]=

Ecuaciones Diferenciales
Ecuaciones Diferenciales Ordinarias (EDOs)

Definir una ecuación y el comando DSolve


Para definir una ecuación, simplemente le asignamos un nombre seguido de dos puntos y un igual,
y a continuación podemos escribir la expresión algebraica, igualándola a cero de una manera
especial, para que Mathematica entienda que es no el tipo de igualdad que normalmente uti-
lizamos para asignar nombres.
In[821]:= ec1 := u ''[x] + u[x] ⩵ 0

El comando que nos va a permitir resolver ecuaciones diferenciales es ‘DSolve’, y tiene la siguiente
estructura de argumentos:
DSolve[nombre_ecuacion,funcion_a_conocer,variable_independiente]
Vamos a probarlo con la ecuación que hemos definido antes,
seminario_mathematica_mmii.nb 5

El comando que nos va a permitir resolver ecuaciones diferenciales es ‘DSolve’, y tiene la siguiente
estructura de argumentos:
DSolve[nombre_ecuacion,funcion_a_conocer,variable_independiente]
Vamos a probarlo con la ecuación que hemos definido antes,
In[822]:= DSolve[ec1, u, x]
resolvedor diferencial

Out[822]= {{u → Function[{x}, *1 Cos[x] + *2 Sin[x]]}}

Condiciones Iniciales
Podemos añadir condiciones iniciales para que me de la solución particular que las satisface. En
primer lugar, debemos definirlas y a continuación se introducen en el comando DSolve entre llaves
junto con el nombre de la ecuación.
In[761]:= ci1 := u[0] ⩵ 0
DSolve[{ec1, ci1}, u, x]
resolvedor diferencial

Out[762]= {{u → Function[{x}, *2 Sin[x]]}}

In[763]:= ci2 := {u[0] ⩵ 0, u '[0] ⩵ 3}


DSolve[{ec1, ci2}, u, x]
resolvedor diferencial

Out[764]= {{u → Function[{x}, 3 Sin[x]]}}

Para trabajar con la solución que nos da Mathematica, tenemos varias opciones. En primer lugar ,
podemos simplemente definir una función que sea la función que nos ha devuelto, que quizá es lo
más intuitivo.
sol1[x1_] := 2 * Sin[x1]
seno

También podemos utilizar la siguiente estructura para que Mathematica entienda que quiero la
función que me ha devuelto ese comando:
In[772]:= sol = DSolve[{eq1, ci2}, u, x];
resolvedor diferencial
u[x] /. sol〚1〛
Out[773]= 3 Sin[x]

Ahora, por ejemplo, podría pedir que me la dibujase:


In[774]:= Plot[u[x] /. sol〚1〛, {x, 0, 10}]
representación gráfica
3

Out[774]=
2 4 6 8 10
-1

-2

-3
6 seminario_mathematica_mmii.nb

In[795]:= Clear[u, y]
borra

Ecuaciones en Derivadas Parciales (EDPs)

EDP de Primer Orden


Definir la ecuación se hace de igual forma que para EDOs. Ahora las derivadas serán respecto
alguna de las variables de las varias de las que depende mi función. Trabajemos con un ejemplo
para verlo más claro.
In[796]:= edp1 := 3 D[u[x, y], x] + 5 D[u[x, y], y] ⩵ x
deriva deriva

A la hora de usar el comando DSolve, lo único que cambia es que ahora debemos especificar las
dos variables independientes de las que depende la función que deseo conocer. Para ello, las
introduzco entre llaves separadas por comas, después de especificar la función a resolver.
In[810]:= sol1 = DSolve[edp1, u, {x, y}]
resolvedor diferencial

x2 5x
Out[810]= u → Function{x, y}, + *1 - + y
6 3

Observamos que ahora al trabajar con ecuaciones en derivadas parciales, las soluciones generales
vendrán dadas por funciones genéricas de argumentos concretos, como en este caso la función c1.
De nuevo puedo utilizar la estructura visto en la sección anterior para que Mathematica coja la
solución anterior y la trate como una función cualquiera.
In[811]:= sol3 = (u[x, y] /. sol1〚1〛)
x2 5x
Out[811]= + *1 - + y
6 3

También puedo utilizar el comando ReplaceAll para pedir que las constantes tengan valores
concretos.
In[808]:= sol3 = ReplaceAll[sol3, {C[1][var1_] → Sin[var1] + Cos[var1]}]
sustituye todos constante seno coseno

x2 5x 5x
Out[808]= + Cos - y - Sin - y
6 3 3
seminario_mathematica_mmii.nb 7

In[809]:= Plot3D[sol3, {x, - 5, 5}, {y, - 5, 5}]


representación gráfica 3D

Out[809]=

Podría haber impuesto condiciones iniciales, al igual que en la sección anterior.


In[815]:= edp1 := 3 D[u[x, y], x] + 5 D[u[x, y], y] ⩵ x;
deriva deriva
ci1 = {u[0, y] ⩵ y};
sol1 = DSolve[{edp1, ci1}, u, {x, y}]
resolvedor diferencial
1
Out[817]= u → Function{x, y}, - 10 x + x2 + 6 y
6

EDP de Segundo Orden Hiperbólica: Ecuación de Ondas


En esta sección, veamos un ejemplo con la ecuación de ondas 1+1 y ciertas condiciones iniciales.
Primero definimos la ecuación, luego las condiciones iniciales deseadas y por último empleamos el
comando DSolve, como hemos ido viendo en las secciones anteriores.
In[851]:= ondas = {D[u[x, t], {t, 2}] ⩵ D[u[x, t], {x, 2}] - 1};
deriva deriva
ic = {u[x, 0] ⩵ Sin[x] + Cos[x], ReplaceAll[D[u[x, y], y], y → 0] ⩵ 0};
seno coseno sustituye todos deriva
sol = DSolve[{ondas, ic}, u[x, t], {x, t}]
resolvedor diferencial

t2 1
- + (Cos[t - x] + Cos[t + x] - Sin[t - x] + Sin[t + x]) t ≥ 0
Out[853]= u[x, t] → 2 2 
Indeterminate True

A continuación, pintamos la solución en 3D (también podemos pintarla en 2D para un tiempo o una


coordenada concreta). Para ello recordamos la estructura que necesitamos para pasar lo que nos
ha devuelto DSolve a función.
8 seminario_mathematica_mmii.nb

In[854]:= solucion = u[x, t] /. sol〚1〛;


Plot3D[solucion, {x, - 7, 7}, {t, 0, 3}]
representación gráfica 3D

Out[855]=

EDP de Segundo Orden Parabólica: Ecuación del Calor


Ahora veamos un ejemplo con la ecuación del calor en una dimensión espacial y ciertas condi-
ciones iniciales, que nos van a dar la distribución de temperatura en la barra en el momento inicial.
Definimos la ecuación, las condiciones iniciales deseadas y empleamos el comando DSolve.
In[859]:= calor = D[u[x, t], t] ⩵ D[u[x, t], {x, 2}];
deriva deriva
ic = u[x, 0] - Exp[- x ^ 2] ⩵ 0;
exponencial
sol = DSolve[{calor, ic}, u[x, t], {x, t}]
resolvedor diferencial

x2
1
-
ⅇ 1+4 t

Out[861]= u[x, t] → if Re  ≥ - 4 


4+
1
t t
t

In[862]:=

Plot3D[Evaluate[u[x, t] /. sol〚1〛], {x, - 5, 5}, {t, 0, 4}, PlotRange → All]


represe⋯ evalúa rango de repr⋯ todo

Out[862]=

Problemas de Sturm-Liouville
Por último algunos ejemplos de problemas con condiciones de contorno sencillos que Mathemat-
ica es capaz de resolver sin problema.
seminario_mathematica_mmii.nb 9

Por último algunos ejemplos de problemas con condiciones de contorno sencillos que Mathemat-
ica es capaz de resolver sin problema.

Condiciones de Dirichlet
In[863]:= prob1 = y ''[x] + λ y[x] ⩵ 0
ci1 = {y[0] ⩵ 0, y[Pi] ⩵ 0};
número pi
sol = DSolve[{prob1, ci1}, y[x], x]
resolvedor diferencial

Out[863]= λ y[x] + y′′ [x] ⩵ 0


2
*1 Sinx λ n
. ∈ ℤ && n
. ≥ 1 && λ ⩵ n
. 
Out[865]= y[x] →
0 True

Condiciones de Neumann
In[866]:= ci2 = {y '[0] ⩵ 0, y '[Pi] ⩵ 0};
número pi
sol = DSolve[{prob1, ci2}, y[x], x]
resolvedor diferencial
2
*1 Cosx λ n
. ∈ ℤ && n
. ≥ 0 && λ ⩵ n
. 
Out[867]= y[x] →
0 True

Por si queréis profundizar más, os dejo el enlace a la guía de Mathematica sobre Ecuaciones Diferen-
ciales.
Referencia: https://reference.wolfram.com/language/guide/DifferentialEquations.html

También podría gustarte