MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Trying to use Table to iterate a Part specification

  • To: mathgroup at smc.vnet.net
  • Subject: [mg42579] Re: [mg42542] Trying to use Table to iterate a Part specification
  • From: Omega Consulting <info at omegaconsultinggroup.com>
  • Date: Wed, 16 Jul 2003 09:13:40 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

At 04:42 AM 7/14/2003, pi314159 wrote:
>I'm trying to write a small program that will identify critical points
>of functions with two independent variables.  I'm using the
>discriminant test to generate a list of the value of the discriminant
>at each point; since If isn't listable (I think), and I couldn't get
>Map to cooperate, I'm using Table to run the if-loop over each item in
>the list of discriminant values ("signs").  However, I have to use a
>Part specification to tell If which element in the list I want it to
>use, and Part doesn't like Table's iterations.  Is there a way around
>this?
>
>Thanks!
>
>pi314159
>
>---
>
>criticalpoints[expr_] := Solve[{D[expr, x] == 0, D[expr, y] == 0}, {x,
>y}];
>
>discriminant[expr_] := D[expr, x, x]*D[expr, y, y] - D[expr, x, y]^2;
>
>identifycriticalpoints[expr_] :=
>   Module[{signs, length1, points, points2},
>     signs = discriminant[expr] /. criticalpoints[expr];
>     length1 = Length[signs];
>     points = criticalpoints[expr];
>     points2 =
>       Partition[DeleteCases[Flatten[List @@@ Flatten[points]],
>_Symbol], 2]
>         Table[
>           If[Positive[Part[signs, i]] == True,
>             If[D[expr, x, x] > 0, Print["Minimum", Part[points2, i]],
>               Print["Maximum", Part[points2, i]]],
>             Print["Saddle point", Part[points2, i]
>               ],
>             {i, 1, length1}]
>           ];
>     ]

Your instinct to use Map was correct. Try the following:

identifycriticalpoints[expr_] :=
   Module[{length, points, results},
     points = criticalpoints[expr];
     points = Cases[Union[points], {_[_,_?NumericQ]...}];
     length = Length[points];
     results = {discriminant[expr], D[expr, x, x], x, y}/.points;
     Map[testresults, results];
   ]

testresults[{dis_, der_, x_, y_}]:=
   If[Positive[dis],
     If[Positive[der],
       Print["Minimum: ", {x,y}],
       Print["Maximum: ", {x,y}]
     ],
     Print["Saddle Point: ", {x,y}]
   ]


--------------------------------------------------------------
Omega Consulting
"The final answer to your Mathematica needs"
http://omegaconsultinggroup.com


  • Prev by Date: Re: MathLink on Mac? (was Re: Contour plots for irregular data)
  • Next by Date: Re: Mathematica Programming Problem
  • Previous by thread: Trying to use Table to iterate a Part specification
  • Next by thread: Interpolation