miércoles, 26 de mayo de 2010

Resuelto un mega-ejercicio de Geometría Analítica


"Dadas las coordenadas de los vértices de un triángulo, calcular las ecuaciones de sus medianas, alturas, mediatrices, y las coordenadas del baricentro, ortocentro y circuncentro ..." ver más en: http://www.mathsalomon.260mb.com/geoanalitic/ejerc01/geoanalit_ejer01.html


No no lo he puesto aquí porque me resultó complicado, en fin cualquier comentario pueden hacerlo en este mismo sitio.
Salomón Ching

martes, 18 de mayo de 2010

Glosario de Comandos Maple

Me parecio interesante hacer un glosario con los comandos de Maple, porque muchas veces me pasa que necesito hacer algo y no tengo mucho tiempo para averiguar como se hace con el comando "?".

Si tienen más vayan posteándolos yo iré agregando también.

Asignación a variables: (:= , unassing, restore, assume)

var := comando maple;
Se evalua el comando maple y la expresión que resulta es asignada a la variable var

assume(x>a); assume(n,integer); assume(z,real)
Son ejemplos de assume. Para mayor información ejecute ?assume;

unassign('var');
Borra todo lo que se conoce acerca de la variable var, incluyendo las restricciones impuestas con el comando assume. De este modo, ella puede ser usada sin restricciones más adelante. Las comillas ' ' son fundamentales.

restore;

Reinicializa todas las variables que se hayan ocupado borrando todo lo que se conoce sobre ellas. Es equivalente a aplicar unassign('var') a cada variable var que se haya ocupado.


Aproximaciones decimales: (evalf)

Digits:= N;
Define que de ahora en adelante se ocupa aritmética decimal con N dígitos significativos. Al iniciar Maple Digits vale 10

evalf( expr);

Evalúa la expresión en artimética decimal con N dígitos sgniticativos, donde N es el valor que tiene la variable Digits.

evalf(expr,N);
Evalua la expresión expr en aritmética decimal con N dígitos significativos.


Álgebra: (expand, combine, simplify, factor, normal, coeff, quo, rem)


expand( expresion);
Expande la expresión desarrollando potencias de binomios, distribuyendo productos con sumas, o expandiendo fórmulas trigonométricas, etc.

combine( expresion);
Aplicado a ciertas expresiones realiza la operación inversa de expand

simplify(expresion);
Aplica las reglas de simplificación que cumplen las funciones típicas trigonométricas, exponenciación, logaritmos, polinomios, etc.. La noción que Maple tiene de una expresión simplificada es con toda probabilidad diferente de la que Ud. tiene, la que es a su vez diferente de la de su vecino.

factor(polinomio);
Factoriza el polinomio en factores con coeficientes enteros, racionales.

factor(polinomio,real);

Factoriza el polinomio en factores con coeficeintes reales usando aritmética de punto flotante.

factor(polinomio,complex);
Factoriza el polinomio en factores lineales complejos usando aritmética de punto flotante.

normal(expresion);
Obtiene una expresión en la forma denominador/numerador, con términos comunes simplificados.

coeff( expresion ,x^k);
Obtiene el coeficiente de x^k en la expresion, siempre que ésta sea una suma de pontencias de x.

q:= rem(a,b,x); r:= rem(a,b,x);
Si a,b son polinomios (en función de x), q es el cuociente de a dividido por b y r es el resto de a dividido por b. El resto y el couciente satisfacen a= b*q+r, donde grado® < grado (b)


Expresiones versus procedimientos: (->, proc(), subs(), unapply())


f:= x -> expr;
Define un procedimiento que asigna a cada x (input) su valor f(x) (output) que se obtiene al reemplazar el valor de x en la expresión expr

r:= expr;
Asigna a la variable r la expresión dada.

subs( {x=a},expr);
Retorna la expresión expr donde x es reemplazado por el valor de a.

subs( {x=a,y=b},expr);
Retorna la expresión expr donde x es reemplazado por el valor de a, y es reemplazado por el valor de b

subs( {eq1,eq2,.., eqk}, expresion);
Donde eq1, eq2, ... eqk, son reglas de substitución.

unapply(expr,x);
Retorna el procedimiento x->expr


Gráfico de funciones y curvas en el plano: (plot)


plot( f(x), x=a..b);
Grafica y=f(x) en el intervalo [a,b]. El rango y escala del eje Y se ajusta automáticamente

plot ( f(x) , x=a..b, scaling=constrained);
Igual que el anterior pero las escalas en los ejes X a Y están en relación 1:1.

plot ( f(x) , x=a..b, y=c..d);
Muestra la porción del gráfico de y=f(x) que yace en el rectángulo a <= x <= b, c<= y <= d.

plot( f(x), x=a..b, view=[x1..x2,y1..y2]);
Muestra la porción del gráfico de y=f(x) para a <= x <= b pero enmarcado en una ventana con x1 < x < x2, y1 < y < y2.

plot ( f(x) , x=a..b, y=c..d, discont=true);
Igual que el anterior, pero se usa cuando f es discontínua (y f no toma valores complejos)


plot( f(x), x=a..b, y=c..d, discont=true, color=COLOR);
Idem que el anterior donde y=f(x) se grafica con color COLOR, donde COLOR puede ser red, blue, green, cyan, magenta, etc...

plot( [f(x),g(x), h(x)] , x=a..b, y=c..d,discont=true, color=[red,blue,cyan]);

Idem que en el anterior pero se grafican las tres funciones f,g,h al mismo tiempo en colores red, blue, cyan respectivamente.

plot( [x(t), y(t) , t=a..b], color=red );
Grafica los puntos (x(t),y(t)) en el plano XY cuando t varía desde a hasta b.

plot( [x(t), y(t) , t=a..b], color=red, scaling=constrained) );

Igual que el anterior, pero las escalas en los ejes X,Y están en relación 1:1. (equivalente a presionar el botón 1:1 en la barra de menú del gráfico).


Más sobre gráficos: (with(plots), animate, display)


with(plots);

Activa al paquete plots donde se encuentran las rutinas, display, implicitplot, textplot, etc....

animate( { f(x), g(x,a)}, x=x1..x2, a=a1..a2, nframes);
Crea una animación donde en cada cuadro se grafica a las funciones f(x), g(x,a) en el intervalo [x1,x2], con a variando desde a1 hasta a2 con un incremento de TEX: ${}\frac{a2-a1}{nframes-1}$. En total hay nframes cuadros.

p1:= plot( f(x), x=a..b):
Guarda en la variable p1 el gráfico de y=f(x), el cual puede ser desplegado mediante el comando display(p1). Note que la única manera en que el gráfico puede ser desplegado es mediante el comando display. Es conveniente terminar el comando con : en vez de ; para evitar ouput indeseable.

display(p1,p2,p3);
Grafica los gráficos guardados en las variables p1,p2,p3

display( sucesión o lista de de variables con gráficos, insequence=true);
Muestra cuadro a cuadro los gráficos en la lista creando una animación.


Solución de ecuaciones, sistemas de ecuaciones: (fsolve,solve)


fsolve( f(x)=g(x), x=a..b);
Calcula por métodos numéricos UNA solución de f(x)=g(x) en el intervalo [a,b], CON LA EXCEPCION del caso en que f(x), g(x) sean polinomios, donde encuentra TODAS las raices reales en el intervalo [a,b]

fsolve( f(x)=g(x), x=a);
Busca por métodos numéricos UNA solución de f(x)=g(x) comenzando la búsqueda en x=a. No necesariamente encuentra la solución más cercana a x=a.

fsolve( p(x),x);
Determina aproximaciones decimales a todas las raices reales del polinomio p(x).

fsolve( p(x),x,complex);

Determina aproximaciones decimales a todas las raices, incluyendo las complejas, del polinomio p(x)

solve( f(x)=g(x), x);

Si f, g son polinomios, encuentra todas las raices, en otros casos intenta encontrar tantas soluciones como pueda mediante reducciones algebraicas. Si no encuentra soluciones ya sea por que no hay o por que no pudo encontrar, retorna NULL, es decir "nada".

solve( f(x)< g(x), x);

Intenta resolver la inecuación mediante reducciones algebraicas (cálculo simbólico).

solve( conjunto de ecuaciones, conjunto de variables);
Intenta resolver mediante manipulaciones algebraicas el sistema de ecuaciones con respecto a las variables indicadas. Cuando tiene éxito, retorna una sucesión de reglas de substitución (para ser ocupadas con el comando subs).

CUIDADO: solve puede no encontrar todas las soluciones existentes de un sistema de ecuaciones no lineales.


Estructuras de datos, (expresión) sucesión, lista, conjunto, tabla: ([s], {s}, nops(s) , op(s) , seq(s) , s[n] , map(f,s))


Para agrupar varios datos en una misma variable, se puede usar una de las siguientes estructuras de datos: (expresión) sucesión, lista, conjunto, tabla.

exp1, exp2, ... , expn;
Es la sucesión formada por las expresiones exp1, exp2, etc. En general, expresiones separadas por comas definen a un sucesión. Las expresiones pueden ser de distintos tipos.

[s];

Es la lista formada por los elementos de la sucesión s. En general, si s es una sucesión entonces [s] es una lista.

{s};
Es el conjunto formado por los elementos de la sucesión s. En general, si s es una sucesión. entonces {s} es un conjunto. En maple un conjunto emula al concepto matemático de conjunto: elementos repetidos se eliminan y el orden de los elementos no importa.

T[algo]:=valor;

Si T no es una lista , crea la tabla T con una entrada. Con asignaciones adicionales del tipo T[indice]=valor se agregan elementos a la tabla T.

s[k];
El elemento k-ésimo de la lista o conjunto s.

T[algo];
Si T es una tabla, valor asociado a "algo" en la tabla.

nops(s);
El número de elementos de la lista o conjunto s.

op(s);
La sucesión con los elementos del conjunto o lista s (le quita los paréntesis a s)

seq( a(n), n=n1..n2 );

La sucesión a(n1), a(n1+1), a(n1+2), .... a(n2).

[ seq ( (a(n), n=n1..n2 ) ];
La lista con los elementos a(n1), a(n1+1), ... , a(n2)

{ seq ( (a(n), n=n1..n2 ) }
El conjunto con los elementos a(n1), a(n1+1), ... , a(n2). Elementos repetidos se eliminan.

map(f,s)

La lista o conjunto que se obtiene de aplicar una función f a cada elemento de la lista o conjunto s


Control de flujo: (for loops, while loops, if)


for i from n1 to n2 do BLO... od;
Ejecuta las instrucciones en el bloque BLO para i=n1, n1+1, etc.. hasta i=n2

for i from n1 to n2 by salto do BLO... od;

ejecuta las instrucciones en el bloque BLO para i=n1, n1+salto, etc.. hasta el mayor valor de n1+k*salto menor o igual a n2.

for k in S do BLO ... od;

Ejecuta las instucciones en el bloque BLO para cada elemento k en la lista o conjunto S.

while ( condicion) do BLO od:
Ejecuta las instucciones en el bloque BLO mientras la condición sea verdadera.

for k from n1 to n2 while ( condicion) do BLO od:
Ejecuta las instucciones en el bloque BLO mientras la condición sea verdadera y k esté entre n1 y n2 (inclusives)

if ( COND ) then BLOQUE fi
Si la condición COND es verdadera se ejecuta el BLOQUE.

if ( COND ) then BLOQUE1 else BLOQUE2 fi
Si la condición COND es verdadera se ejecuta el BLOQUE1, en caso contrario se ejecuta el BLOQUE2.

if ( COND ) then BLOQUE1 elif COND1 then BLOQUE2 else BLOQUE3 fi
Si la condición COND es verdadera se ejecuta el BLOQUE1 en caso contrario, si COND1 es verdadero se ejecuta el BLOQUE2, en otros casos se ejecuta BLOQUE3


Límites, límites por la izquierda y por la derecha: (limit())


limit(f(x),x=a,left);
Calcula el límite de f(x) cuando x tiende a "a" por la izquierda.

limit(f(x),x=a,right);

Calcula el límite de f(x) cuando x tiende a "a" por la derecha.

limit(f(x),x=a);
Calcula el límite cuando x tiende a "a", el cual existe sólo cuando TEX: ${\mathop {\lim }\limits_{x \to a^ +  } f(x) = \mathop {\lim }\limits_{x \to a^ -  } f(x) = L}$. Si los límites por la izquierda o por derecha no existieran o no fueran iguales entonces el límite no existe y maple responde undefined


Derivadas: (D(), diff())


D(f);
Si f es una función entonces D(f) es la función f ' y entonces D(f)(x) es f '(x).

(D @@2) (f);
Si f es una función entonces (D@@2)(f) es la función f '', que es la segunda derivada de f .

diff(expr,x);
Si expr es una expresión en la variable x entonces diff(expr,x) es la derivada de expr con respecto a x.

diff( expr,x$2);

Es la segunda derivada de expr con respecto a la variable x.

diff( expr,x$3);
Es la tercera derivada de expr con respecto a la variable x.

diff( expr,x$n);

Es la n-ésima derivada de expr con respecto a la variable x.


Sumas de Riemann: (with(student), rightsum, leftsum, middlesum, trapezoid, leftbox, rightbox, middlebox)


with(student):
Activa al paquete de rutinas student. Se requiere para ocupar las rutinas que siguen.

leftsum(f(x), x=a..b,n);
Calcula la suma de Riemann para una partición de n subintervalos de igual longitud en que cada rectángulo tiene como altura el valor de la función en el extremo izquierdo de cada subintervalo. El valor de n es opcional. El valor por omisión es n=4.

rightsum( f(x), x=a..b,n);

Idem que el anterior pero para sumas derechas de Riemann.

middlesum( f(x), x=a..b,n);
Igual que el anterior pero para sumas de punto medio de Riemann.

trapezoid( f(x), x=a..b,n);
Estima TEX: ${\displaystyle\int\limits_a^b f(x) dx}$ mediante la fórmula trapezoidal para una partición uniforme de n subintervalos. Esto es, en vez de aproximar cada franja vertical por un rectángulo lo hace por el trapecio que une los puntos extremos de aquella.

leftbox( f(x), x=a..b, n);
Grafica los rectángulos correspondientes a la suma izquierda de Riemann de f(x) en el intervalo [a,b] para una partición de n subtintervalos de igual longitud (valor por omisión es n=4).

rightbox( f(x), x=a..b,n);
Idem que el anterior, pero para la suma derecha de Riemann

middlebox( f(x), x=a..b,n);
Igual que el anterior, pero para la suma en puntos medios de Riemann.


Integrales: (int(), Int(), evalf(Int ()), changevar, intparts)


int( f(x), x=a..b);
Intenta calcular TEX: ${\displaystyle\int\limits_a^b f(x) dx}$ mediante métodos simbólicos.

Int( f(x), x=a..b);
Es la expresión TEX: ${\displaystyle\int\limits_a^b f(x) dx}$ NO EVALUADA. Es decir, es la expresión que al ser evaluada se obtiene la integral de f(x) en [a,b].

evalf ( Int (f(x),x=a..b);
Estima el valor de TEX: ${\displaystyle\int\limits_a^b f(x) dx}$ mediante métodos numéricos (parecido a sumas de Riemann pero mucho más sofisticado y de alta precisión). Los límities de integración a,b deben ser números.

value( Int( f(x), x=a..b) );
Intenta evaluar mediante métodos simbólicos la integral de f(x) en el intervalo [a,b]. Es equivalente a int(f(x), x=a..b).

with(Student[Calculus1]): infolevel[Student[Calculus1]] := 1:
Se necesita para ejecutar los siguientes comandos ( se debió haber ejecutado antes with(student) ).

changevar(h(x)=g(u),expr,u);
Hace el cambio de variable a la función expr ( en la forma Int ), dejándola en función de u (antes estaba en función de x). Retorna la integral con el cambio de variable.

intparts(In,u(x));
Hace la integración por partes TEX: ${\int udv = uv - \int vdu}$. En el comando, In es la integral ( de la forma Int) y u(x) representa "u" en funcion de x. Retorna la integral con la integración por partes.

Tutorial Nº 01 de Maple

Aquí se explican las herramientas más importantes que pueden usar en este excelente programa de matemáticas:

Asignación a variables:

:= , unassign , restore, assume

var := comando maple;
Se evalua el comando maple y la expresión que resulta es asignada a la variable var

assume(x>a); assume(n,integer); assume(z,real)
Son ejemplos de assume. Para mayor información ejecute ?assume;

unassign('var');
"borra" todo lo que se conoce acerca de la variable var, incluyendo las restricciones impuestas con el comando assume. De este modo, ella puede ser usada sin restricciones más adelante. Las comillas ' ' son fundamentales.

restore;
reinicializa todas las variables que se hayan ocupado "borrando" todo lo que se conoce sobre ellas. Es equivalente a aplicar unassign('var') a cada variable var que se haya ocupado.


Aproximaciones decimales:

evalf

Digits:= N;
Define que de ahora en adelante se ocupa aritmética decimal con N dígitos significativos. Al iniciar Maple Digits vale 10

evalf( expr)
Evalúa la expresión en artimética decimal con N dígitos sgniticativos, donde N es el valor que tiene la variable Digits.

evalf(expr,N)
Evalua la expresión expr en aritmética decimal con N dígitos significativos.

Algebra:
los comandos expand, combine, simplify, factor, normal, coeff, quo, rem.

expand( expresion);
Expande la expresión desarrollando potencias de binomios, distribuyendo productos con sumas, o expandiendo fórmulas trigonométricas, etc..

combine( expresion);
aplicado a ciertas expresiones realiza la operación inversa de expand

simplify(expresion);

aplica las reglas de simplificación que cumplen las funciones típicas trigonométricas, exponenciación, logaritmos, polinomios, etc.. La noción que Maple tiene de una expresión simplificada es con toda probabilidad diferente de la que Ud. tiene, la que es a su vez diferente de la de su vecino.

factor(polinomio);
factoriza el polinomio en factores con coeficientes enteros , racionales.

factor(polinomio,real);
factoriza el polinomio en factores con coeficeintes reales usando aritmética de punto flotante.

factor(polinomio,complex);
factoriza el polinomio en factores lineales complejos usando aritmética de punto flotante.

normal(expresion);
obtiene una expresión en la forma denominador/numerador, con términos comunes simplificados.

coeff( expresion ,x^k);

obtiene el coeficiente de x^k en la expresion, siempre que ésta sea una suma de pontencias de x.

q:= rem(a,b,x); r:= rem(a,b,x);

Si a,b son polinomios, q es el cuociente de a dividido por b y r es el resto de a dividido por b. El resto y el couciente satisfacen a= b*q+r, donde grado(r) < grado (b)


Expresiones versus procedimientos:
->, proc(), subs(), unapply()

Las funciones matemáticas pueden representarse en Maple mediante expresiones y/o procedimientos.

f:= x -> expr
define un procedimiento que asigna a cada x (input) su valor f(x) (output) que se obtiene al reemplazar el valor de x en la expresión expr

r:= expr
asigna a la variable r la expresión dada.

subs( {x=a},expr)
retorna la expresión expr donde x es reemplazado por el valor de a.

subs( {x=a,y=b},expr)
retorna la expresión expr donde x es reemplazado por el valor de a, y es reemplazado por el valor de b

subs( {eq1,eq2,.., eqk}, expresion);
donde eq1, eq2, ... eqk, son reglas de substitución.

unapply(expr,x) retorna el procedimiento x->expr

func:= proc(x) ...... end proc define un procedimiento que asigna a cada x(input) el resultado func(x) (output) (es alternativo a usar el operador -> )

Ejemplos:

Podemos definir el procedimiento maple
f:= x-> x^2;
Para evaluar f en x=2 hacemos:
f(2);
Si tenemos una expresión
r:= x^2;
e intentamos r(2) resulta un sin sentido
r(2);
Para reemplazar x por x=2 en una expresión usamos el comando subs (por substitute)
subs({x=2},r);
r;

El comando subs(), permite entonces reemplazar variables por valores sin alterar el valor de la expresión original.
Podemos reemplazar más de una variable el mismo tiempo,
subs({x=2,y=1},x^2+y^2);

Una alternativa a substituir es construir un procedimiento con unapply y luego usar el procedimiento:
g:= unapply(r,x);
g(2);


Si el procedimiento que define a una función es muy complicado es preferible definirlo usando proc().

La siguiente función determina los valores de y tal que x*exp(y)=y para un valor de x dado.
func:= proc(z) local eq1; eq1:=subs(x=z,x*exp(y)=y); solve(eq1,y); evalf(%); end proc;

func(0.367879441);
exp(-1.0);



Gráfico de funciones y curvas en el plano

plot( f(x), x=a..b);
Grafica a y=f(x) en el intervalo [a,b]. El rango y escala del eje Y se ajusta automáticamente

plot ( f(x) , x=a..b, scaling=constrained);
Idem que el anterior pero las escalas en los ejes X a Y están en relación 1:1.

plot ( f(x) , x=a..b, y=c..d);
Muestra la porción del gráfico de y=f(x) que yace en el rectángulo a <= x <= b, c<= y <= d.

plot( f(x), x=a..b, view=[x1..x2,y1..y2])
Muestra la porción del gráfico de y=f(x) para a <= x <= b pero enmarcado en una ventana con x1 < x < x2, y1 < y < y2.

plot ( f(x) , x=a..b, y=c..d, discont=true);
Idem que el anterior, pero se usa cuando f es discontínua (y f no toma valores complejos)


plot( f(x), x=a..b, y=c..d, discont=true, color=COLOR);

Idem que el anterior donde y=f(x) se grafica con color COLOR, donde COLOR puede ser red, blue, green, cyan, magenta, etc...

plot( [f(x),g(x), h(x)] , x=a..b, y=c..d,discont=true, color=[red,blue,cyan]);
Idem que en el anterior pero se grafican las tres funciones f,g,h al mismo tiempo en colores red,blue, cyan respectivamente.

plot( [x(t), y(t) , t=a..b], color=red );

grafica los puntos (x(t),y(t)) en el plano XY cuando t varía desde a hasta b.

plot( [x(t), y(t) , t=a..b], color=red, scaling=constrained) );
Idem que el anterior, pero las escalas en los ejes X,Y están en relación 1:1. (equivalente a presionar el botón 1:1 en la barra de menú del gráfico).


Más Gráficos:
with(plots), implicitplot, animate, animatecurve, display.

with(plots) Activa al paquete plots donde se encuentran las rutinas, display, implicitplot, textplot, etc....

implicitplot( f(x,y)=g(x,y), x=a..b,y=a..b,numpoints=N) Grafica la porción de la curva definida implicitamente por la ecuación f(x,y)=g(x,y) que yace en el rectángulo a<=x <=b, c<=y<=d.. N es el número de veces que resuelve la ecuación implícita para construir el gráfio.

animate( { f(x), g(x,h)}, x=a..b, h=h1..h2, nframes); Crea una animación donde en cada cuadro se grafica a las funciones f(x), g(x,h) en el intervalo [a,b], con h variando desde h1 hasta h2 con un incremento de
h2 - h1
-----------
nframes - 1
. En total hay nframes cuadros.

animatecurve( [x(t), y(t),t=t1 .. t2], view=[a..b , c..d], color=red);
Crea una animación que genera una curva a partir de una parametrización x(t), y(t) de ella cuando el parámetro t varía desde t1 hasta t2.

p1:= plot( f(x), x=a..b): Guarda en la variable p1 el gráfico de y=f(x), el cual puede ser desplegado mediante el comando display(p1). Note que la única manera en que el gráfico puede ser desplegado es mediante el comando display. Es conveniente terminar el comando con : en vez de ; para evitar ouput indeseable.

display(p1,p2,p3); Grafica los gráficos guardados en las variables p1,p2,p3

display( sucesión o lista de de variables con gráficos); Muestra en un mismo gráfico los gráficos guardados en las variables.

display( sucesión o lista de de variables con gráficos, insequence=true); Muestra cuadro a cuadro los gráficos en la lista creando una animación.


Gráficos 3D
Comandos genéricos para curvas y superficies

with(plots); Inicializa el paquete plots que permite ocupar varias rutinas para despliegue de gráficos.

spacecurve( [x(t), y(t), z(t)], t=a..b); Grafica la trayectoria o curva que siguen los puntos [x(t),y(t),z(t)] cuando t varía desde t=a hasta t=b (requiere el paquete plots)

plot3d( [x(u,v), y(u,v) , z(u,v) ], u=a..b, v=c..d ); Grafica la superficie que generan los puntos de la forma [x(u,v), y(u,v) , z(u,v) ] cuando u varía en el intervalo [a,b] y v en el intervalo [c,d].

Solución de ecuaciones, sistemas de ecuaciones: fsolve,solve

fsolve( f(x)=g(x), x=a..b);
Calcula por métodos numéricos UNA solución de f(x)=g(x) en el intervalo [a,b], CON LA EXCEPCION del caso en que f(x), g(x) sean polinomios, donde encuentra TODAS las raices reales en el intervalo [a,b]

fsolve( f(x)=g(x), x=a)
busca por métodos numéricos UNA solución de
f(x) = g(x)
comenzando la búsqueda en x=a. No necesariamente encuentra la solución más cercana a x=a.

fsolve( p(x),x);
Determina aproximaciones decimales a todas las raices reales del polinomio p(x).

fsolve( p(x),x,complex);
Determina aproximaciones decimales a todas las raices, incluyendo las complejas, del polinomio p(x)

solve( f(x)=g(x), x).

Si f, g son polinomios, encuentra todas las raices, en otros casos intenta encontrar tantas soluciones como pueda mediante reducciones algebraicas. Si no encuentra soluciones ya sea por que no hay o por que no pudo encontrar, retorna NULL, es decir "nada".

solve( f(x)< g(x), x) Intenta resolver la inecuación mediante reducciones algebraicas (cálculo simbólico).

solve( conjunto de ecuaciones, conjunto de variables)

intenta resolver mediante manipulaciones algebraicas el sistema de ecuaciones con respecto a las variables indicadas. Cuando tiene éxito, retorna una sucesión de reglas de substitución (para ser ocupadas con el comando subs) . CUIDADO: solve puede no encontrar todas las soluciones existentes de un sistema de ecuaciones no lineales.

Ejemplos

regla:=solve({y=x+2,y=2*x-4},{x,y});
Podemos ocupar la solución con el comando subs
x0:=subs(regla,x);
y0:= subs(regla,y);
subs(regla, (x^2+y^2+1)/ (x+y));

Podemos determinar los puntos de intersección de la recta y=x+2, con la circunferencia x^2+y^2=4
suc_reglas:=solve( {y=x+2,x^2+y^2=4},{x,y});
La primera solución es
x1:=subs(suc_regla[1],x);
y1:= subs(suc_regla[1],y);

Podemos evaluar expresiones que involucaran a cualquiera de las soluciones directamente
subs(suc_regla[2],x^2-y^2);

Para resolver un sistema de 3 ecuaciones con 3 incongnitascomo este x+y+z=1, x-y-z=2, 2*x+3*y-2*z=3
hacemos:
regla3:=solve({x+y+z=1, x-y-z=2, 2*x+3*y-2*z=3},{x,y,z});
Podemos reemplazar estos valores en cualquiera expresión
subs( regla3,x^2-y+z);



Estructuras de datos, (expresión) sucesión, lista, conjunto, tabla:
[ s], {s}, nops(s) , op(s) , seq(s) , s[n] , map(f,s)

Para agrupar varios datos en una misma variable, se puede usar una de las siguientes estructuras de datos: (expresión) sucesión, lista, conjunto, tabla.

exp1, exp2, ... , expn Es la sucesión formada por las expresiones exp1, exp2, etc. En general, expresiones separadas por comas definen a un sucesión. Las expresiones pueden ser de distintos tipos.

[s] Es la lista formada por los elementos de la sucesión s. En general, si s es una sucesión entonces [s] es una lista.

{s} Es el conjunto formado por los elementos de la sucesión s. En general, si s es una sucesión. entonces {s} es un conjunto. En maple un conjunto emula al concepto matemático de conjunto: elementos repetidos se eliminan y el orden de los elementos no importa. .

T[algo]:=valor; Si T no es una lista , crea la tabla T con una entrada. Con asignaciones adicionales del tipo T[indice]=valor se agregan elementos a la tabla T.

s[k]
el elemento k-ésimo de la lista o conjunto s,

T[algo] Si T es una tabla, valor asociado a "algo" en la tabla.

nops(s) el número de elementos de la lista o conjunto s.

op(s) la sucesión con los elementos del conjunto o lista s (le quita los paréntesis a s)

seq( a(n), n=n1..n2 ) la sucesión a(n1), a(n1+1), a(n1+2), .... a(n2).

[ seq ( (a(n), n=n1..n2 ) ]
la lista con los elementos a(n1), a(n1+1), ... , a(n2)

{ seq ( (a(n), n=n1..n2 ) }
el conjunto con los elementos a(n1), a(n1+1), ... , a(n2). Elementos repetidos se eliminan.

map(f,s)
la lista o conjunto que se obtiene de aplicar una función f a cada elemento de la lista o conjunto s

Ejemplos:

sucesion:=1,4,2,10,9,1,-4;
lista:= [sucesion];
conjunto:= {sucesion};
op(conjunto); op(lista);
nops(lista) , nops(conjunto);
f:= x-> x^2; map(f,lista);map(f,conjunto);
seq( k^2,k=1..5);
datos:= [ [1,2], [3,4], [5,6]];
datos[2];
datos[2][1];


Una tabla consiste en una asociación entre valores de un índice y expresiones. Las tablas se definen en forma dinámica.
T[1]:= 3;
T[4]:= 2;
T[cabeza_de_pescado]:= cola_de_pescado;
op(T);



Control de flujo:
for loops, while loops, if

for i from n1 to n2 do blabla... od ejecuta las instrucciones en el bloque blabla para i=n1, n1+1, etc.. hasta i=n2

for i from n1 to n2 by salto do blabla... od ejecuta las instrucciones en el bloque blabla para i=n1, n1+salto, etc.. hasta el mayor valor de n1+k*salto menor o igual a n2.

for k in S do blabla ... od. Ejecuta las instucciones en el bloque blabla para cada elemento k en la lista o conjunto S.

while ( condicion) do blabla od: Ejecuta las instucciones en el bloque blabla mientras la condición sea verdadera.

for k from n1 to n2 while ( condicion) do blabla od: Ejecuta las instucciones en el bloque blabla mientras la condición sea verdadera y k esté entre n1 y n2 (inclusives)

if ( COND ) then BLOQUE fi Si la condición COND es verdadera se ejecuta el BLOQUE.

if ( COND ) then BLOQUE1 else BLOQUE2 fi Si la condición COND es verdadera se ejecuta el BLOQUE1, en caso contrario se ejecuta el BLOQUE2.

if ( COND ) then BLOQUE1 elif COND1 then BLOQUE2 else BLOQUE3 fi
Si la condición COND es verdadera se ejecuta el BLOQUE1 en caso contrario, si COND1 es verdadero se ejecuta el BLOQUE2, en otros casos se ejecuta BLOQUE3

Ejemplos:

for i from 2 to 10 by 2 do i^2; od;

S:= [2,4,5,7,11,-10];
Suma de los cuadrados de los elementos en S:
total:=0; for i in S do total:=total+i^2; od;


Suma los cuadrados de los elementos de S hasta que la suma total exceda 100
k:=0; suma:=0; while( suma < 100) do k:= k+1; suma:=suma+k^2;od;

Otra alternativa para el cálculo anterior es:
suma:=0; for k from 1 to 100 while( suma < 100) do suma:=suma+k^2; od;

x:=4; if (x >0) then r:=x^2 else r:=x fi;


Límites, límites por la izquierda y por la derecha:

limit(f(x),x=a,left) que es el límite de f(x) cuando x tiende a a por la izquierda.

limit(f(x),x=a,right) es el límite de f(x) cuando x tiende a a por la derecha.

limit(f(x),x=a) el cual existe sólo cuando limit(f(x),x=a,left)=limit(f(x),x=a,right). Si los límites por la izquierda o por derecha no existieran o no fueran iguales entonces el límite no existe y maple responde undefined

Ejemplos:

Considere a la función definida por tramos
f:= x-> piecewise( x<0, x+2, x>=0, x^2-x+1);
f(x);
plot(f(x), x=-2..2, discont=true,color=red);


Vemos que
cuando x tiende a cero con x <0, f(x) tiende a 2
cuando x tiende a cero con x>0, f(x) tiende a 1

Es decir
limit(f(x), x = 0, left) = 2
,
limit(f(x), x = 0, right) = 1

Maple puede calcular estos límites

limit(f(x), x=0);
limit(f(x), x=0,right);
limit(f(x), x=0,left);



Para nuestra función, para
a <> 0
los límites por la izquierda y por la derecha son iguales a f(a) y el límite existe. Por ejemplo, para a=2,

L1:=limit( f(x),x=2,left);
L2:= limit( f(x),x=2,right);
L:= limit(f(x),x=2);
f(2);


En general para a>0,
assume(a,positive);
limit(f(x),x=a,left);
limit(f(x),x=a,right);
limit(f(x),x=a);
f(a);


En general para a<0,
assume(a,negative);
limit(f(x),x=a,left);
limit(f(x),x=a,right);
limit(f(x),x=a);
f(a);


Derivadas:
D(), diff()

D(f) Si f es una función entonces D(f) es la función f ' y entonces D(f)(x) es f'(x).

(D @@2) (f) Si f es una función entonces (D@@2)(f) es la función f '', que es la segunda derivada de f .

diff(expr,x) Si expr es una expresión en la variable x entonces diff(expr,x) es la derivada de expr con respecto a x.

diff( expr,x$2) Es la segunda derivada de expr con respecto a la variable x.

diff( expr,x$3) Es la tercera derivada de expr con respecto a la variable x.

diff( expr,x$n) Es la n-ésima derivada de expr con respecto a la variable x.

Integración:
int(), Int(). Integración numérica evalf(Int () )

int( f(x), x=a..b) Intenta calcularla mediante métodos simbólicos.

Int( f(x), x=a..b) Es la expresión NO EVALUADA. Es decir, es la expresión que al ser evaluada se obtiene la integral de f(x) en [a,b]

evalf ( Int (f(x),x=a..b) Estima el valor de la integral mediante métodos numéricos (parecido a sumas de Riemann pero mucho más sofisticado y de alta precisión). Los límities de integración a,b deben ser números.

value( Int( f(x), x=a..b) ) Intenta evaluar mediante métodos simbólicos la integral de f(x) en el intervalo [a,b]. Es equivalente a int(f(x), x=a..b).


Ejemplos:

int( x^2,x=a..b);
int(x^2,x=1..2);
Int( x^2,x=1..2);
evalf( Int(x^2,x=1..2));


La siguiente integral no se puede evaluar mediante una fórmula explícita. La única opción es la integración numérica.
plot( x^x,x=1..2,color=red);
int( x^x,x=1..2);
evalf( Int( x^x,x=1..2));


Para mayor información vea en:
?int[numeric]



Interpolación de datos:


interp, splineinterp(xdatos ,ydatos ,x)
Calcula el polinomio de P(x) grado n que resuelve el problema de interpolación P(xdatos) = ydatos[i], i=1,1,2, ..., n+1. xdatos, ydatos son listas cada con n+1 números.


Cualquier otra cosa me avisan

Agradecer no cuesta nada
 

martes, 11 de mayo de 2010

Tercer Ejercicio de Números Complejos

Este ejercicio lo vi muy pero muy difícil, no trae gráficos pero si tuve que usar un artificio ingenioso para hallar las variables x,y en términos u,v sobre todo porque manejaba ecuaciones que incluían expresiones algebraicas racionales fraccionarias. Finalmente con maple se pudo hacer el tedioso trabajo de la manipulación simbólica u operaciones algebraicas. Aqui esta el link de la pagina original por si no les carga los símbolos.


1/(x+iy)+1/(u+iv) = 1
>   LI := expand(1*(x-I*y))/expand((x+I*y)*(x-I*y))

LI := (x-I*y)/(x^2+y^2)
>   LD := simplify(1-1/(u+I*v))

LD := (u+v*I-1)/(u+v*I)
>   LD := expand((u+I*v-1)*(u-I*v))/expand((u+I*v)*(u-I*v))

LD := (u^2+v^2-u+v*I)/(u^2+v^2)
>   LI=LD;

(x-I*y)/(x^2+y^2) = (u^2+v^2-u+v*I)/(u^2+v^2)
>   (x/(x^2+y^2)-y*I/(x^2+y^2))=(u^2+v^2-u)/(u^2+v^2)+(v*I)/(u^2+v^2);

x/(x^2+y^2)-I*y/(x^2+y^2) = (u^2+v^2-u)/(u^2+v^2)+v/(u^2+v^2)*I
>   x/(x^2+y^2)=(u^2+v^2-u)/(u^2+v^2);

x/(x^2+y^2) = (u^2+v^2-u)/(u^2+v^2)
>   -y/(x^2+y^2) = v/(u^2+v^2);

-y/(x^2+y^2) = v/(u^2+v^2)
>   x/y=(u^2+v^2-u)/v;

x/y = (u^2+v^2-u)/v
>   x = y*(u^2+v^2-u)/v;

x = y*(u^2+v^2-u)/v
>   -y/((y*(u^2+v^2-u)/v)^2+y^2) = v/(u^2+v^2);

-y/(y^2*(u^2+v^2-u)^2/v^2+y^2) = v/(u^2+v^2)
>   simplify(%);

-v^2/y/(u^4+2*u^2*v^2-2*u^3+v^4-2*v^2*u+u^2+v^2) = v/(u^2+v^2)
>   y=solve(%,y);

y = -v/(u^2-2*u+v^2+1)
>   y := -v/(u^2-2*u+v^2+1): # asignamos a y su valor
x = y*(u^2+v^2-u)/v; # y la reemplazamos en (3)

x = -(u^2+v^2-u)/(u^2-2*u+v^2+1)

Segundo ejercicio resuelto sobre gráficas de números complejos

El desarrollo de éste ejercicio es similar al del artículo anterior de este sitio. He tratado de resumirlo pero aquí lo interesante es que me encontré con caso de una cónica degradada puesto que la gráfica que aparentemente era el de una hoja de hiperbola me arrojó que era una semirecta. Vean el ejercicio en este enlace si es que no loe pueden apreciar bien esta entrada del blog. No olviden comentar.


Ejerc 7 - b) [pag 3]
Que lugar describe el número z = x+iy  cuando satisface la ecuación
  abs(z-2)-abs(z) = 2  
Solución
Reemplazando z = x+iy
        abs(z-2)-abs(z) = 2
->    abs(x+iy-2)-abs(x+iy) = 2
->    sqrt((x-2)^2+y^2)-sqrt(x^2+y^2)  = 2
->    sqrt((x-2)^2+(y-0)^2)-sqrt((x-0)^2+(y-0)^2)  = 2   [ la hiperbola se extiende paralela al eje x  ]
->    d(`(x,y)`,`(2, 0)`)-d(`(x,y)`,`(0, 0)`)  = 2        
->    P = (x, y)    ;   F[2] = (2, 0)   ;   F[1] = (0, 0)   
->   C =   (F[1]+F[2])/2  = ( (2+0)/2, (0+0)/2 ) = ( 1, 0 ) = ( h ,  k )  es el centro.
->  C = ( h ,  k ) = ( 1, 0 )
->    c = d(F[1],C)  = d(`(0,0)`,`(1, 0)`)  = 1
->    c = 1
>   with(plots):
pointplot({[1,0],[0,0]},color=blue,symbol=box,tickmarks=[2,4]);

[Maple Plot]
El gráfico de arriba muestra al centro C = (1, 0)  y al vértice F[1] = (0, 0)  
en los cuales claramente se ve que c = d(F[1],C)  =1
-> 2*a = 2
->   a = 1
>   V[1]=(h-1,k);
V[2]=(h+1,k);
V[1]=(1-1,0);
V[2]=(1+1,0);

V[1] = (h-1, k)
V[2] = (h+1, k)
V[1] = (0, 0)
V[2] = (2, 0)
Arriba escribí el código maple para
calcular las coordenadas de los vértices
->   V[1] = (h-1, k)     ;    V[2] = (h+1, k)  ;   donde: C = ( h ,  k ) = ( 1, 0 )
->   V[1] = (0, 0)    ;   V[2] = (2, 0)
El semieje eje b :
c^2 = a^2+b^2
1^2 = 1^2+b^2
b = 0
No hay semieje mayor, por tanto se trata de una hipérbola degradada  a una porcion de recta contenida en el eje x  puesto que los focos están en dicho eje, y decimos que está en el eje x  puesto que los focos estan justamente ahí.
Reemplacemos son los vértices en la ecuacion de la hiperbola sqrt((x-2)^2+y^2)-sqrt(x^2+y^2)  = 2
V[1] = (0, 0)    ;   V[2] = (2, 0)  para averiguar a que lado de su centro C = (1, 0)  se extiende:
*)  para V[1] = (0, 0)
       sqrt((x-2)^2+y^2)-sqrt(x^2+y^2)  = 2
->   sqrt((0-2)^2+0^2)-sqrt(0^2+0^2)  = 2
->   2-0 = 2    (lo verifica)
*)  para V[2] = (2, 0)
     sqrt((x-2)^2+y^2)-sqrt(x^2+y^2)  = 2
-> sqrt((2-2)^2+0^2)-sqrt(2^2+0^2)  = 2
-> 0-2 = 2    (no lo verifica)
Como V[1] = (0, 0)  está a la izquierda de C = (1, 0)  deducimos que la hiperbola se extiende desde (0,0) hacia cualquier punto de la forma ( x, 0) con x < 0 , es decir la ecuación describe el intervalo < -infinity, 0 ]
RESPUESTA:
sqrt((x-2)^2+y^2)-sqrt(x^2+y^2)  = 2   
está dada por el conjunto:
< -infinity, 0 ]
COMPROBACIÓN NUMÉRICA:
>   F:=(x,y)->sqrt((x-2)^2+y^2)-sqrt(x^2+y^2): #ahi defino una funcion de (x,y)
F(0,0);F(-1,0);F(-2,0);F(-3,0);F(-4,0); # aqui calculo unos valores

2
2
2
2
2
definimos una funcion de 2 variables igual como el lado derecho de la ecuación, y vimos que sustituyendo cualquier punto de < -infinity, 0 ]  se obtine 2, lo que comprueba nuestra conlusión. Que bella es la matemática! :D
COMPROBACIÓN GRÁFICA
>   implicitplot(F(x,y)=2,x=-3..5,y=-5..5,numpoints=100000,scaling=constrained,thickness=2);

[Maple Plot]
El software tiene sus limitaciones pero hace una buena aproximación a la verdadera gráfica. El cero que apreciamos a lado izquierdo es por el origen del eje y que siempre lo traslada a esa altura en x , al carecer de ancho el gráfico, no lo muestra. Bueno la gráfica se puede mejorar agregando más parámetros que aún no los estudio pero con lo iré mejorando.
Vamos a poner 1.9 y luego 1.99 en vez de 2 en el lado derecho de la ecuación:
>   implicitplot({F(x,y)=1.9,F(x,y)=1.99},x=-3..5,y=-5..5,numpoints=100000,scaling=constrained,thickness=2);

[Maple Plot]
Lo que indica que mientras más nos acercamos a 2 la ecuacion muestra la hoja izquierda de la hiperbola mas pegada al eje x negativo o sea el intervalo
< -infinity, 0 ]
FIN
Lic. Mat.   Salomón Ching
>