2008/10/17 Mario Rodriguez <biomates at telefonica.net>:
> Dotan Cohen escribi?:
>>
>> I am trying to figure out how to find the min/max of a
>> threee-dimensional function with Maxima.
>>
>> For instance, I am playing with the function f(x,y)=x^3+3*x*y-6*x*y
>> On paper I can easily find f'x f''xx f'y f''yy f''xy and find the
>> critical points, then check each one. Is there a simpler way to do
>> this in Maxima? I have googled but not found anything of this sort
>> (though there is a lot of good info about Maxima floating around the
>> 'net).
>>
>> Just to prove that I'm not asking someone to do my homework (and yes,
>> this _is_ a homework question), the solution set is {(0,0,), (0,2),
>> (1,1), (-1,1)}.
>>
>
> I've written this program time ago. Sorry, comments are in Spanish, but I
> hope you'll get the idea:
>
>
> /************* begin Maxima Session ********************/
>
> /* Analiza los puntos criticos de una funcion de */
> /* variables independientes x e y. */
> /* Ejemplos de uso: */
> /* extremos(exp(x-y)*x*y); */
> /* extremos(y^2 + (x + 1)^2*y + (x + 1)^4); */
>
>
> load(vect)$
>
> extremos(expr):=
> block([gr,cr,he,x,y,mn,de],
>
> /* vector gradiente de la funcion */
> gr: grad(expr),
>
> /* hessiano */
> he: hessian(expr, [x,y]),
>
> /* Resuelve para x e y el gradiente nulo */
> cr: solve(ev(express(gr),diff), [x,y]),
>
> /* s recorre las soluciones encontradas por solve */
> for s in cr do (
>
> /* valor numerico del hessiano para la soluci?n s */
> mn: subst(s, he),
>
> /* determinante del hessiano */
> de: determinant(mn),
>
> /* controla el tipo de punto critico */
> if de > 0
> then if mn[1,1] > 0
> then print("Minimo relativo en ", s)
> else print("Maximo relativo en ", s)
> else if de < 0
> then print("Punto silla en ", s)
> else print("Determinante nulo en ", s) ) )$
>
> f(x, y) := x^3+3*x*y-6*x*y $
>
> extremos(f(x,y));
>
> /* your solutions: */
> load(draw)$
> draw3d(
> explicit(x^3+3*x*y-6*x*y, x,-3,3,y,-3,3),
> point_size = 3, color = red, point_type = filled_circle,
> points([[0,0,f(0, 0)],[0,2,f(0, 2)],[1,1,f(1, 1)],[-1,1,f(-1, 1)]]))$
>
> /************* end Maxima Session ********************/
>
> --
> Mario Rodriguez
>
Thanks, Mario. I can now practice my Calculus, Lisp, and Spanish all
in one sitting!
--
Dotan Cohen
http://what-is-what.comhttp://gibberish.co.il
?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?
?-?-?-?-?-?-?