MathGroup Archive 2000

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

Search the Archive

Re: Using results of "Solve"

  • To: mathgroup at smc.vnet.net
  • Subject: [mg25764] Re: [mg25693] Using results of "Solve"
  • From: BobHanlon at aol.com
  • Date: Sat, 21 Oct 2000 18:33:00 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

In a message dated 10/19/2000 5:35:06 AM, 
helgek at studserv.stud.uni-hannover.de writes:

>I have a series of matrices which depend on several parameters. I can
>create those matrices fine and display them. They are called
>
>S[k_,m_,b_,n_]
>
>Now there is an unkown called "q" in the matrix which is evaluated by
>setting the determinant of the matrix zero and solving the resulting
>equation for q:
>
>Solve[Det[S[2, m, b, 2]] == 0, q]
>
>Now I want to use this function. The result is given in a form like:
>{{ q -> rhs1 },{ q -> rhs2}} and so on. I would like now to plot q.
>
>A colleque gave me the following "hack":
>h =.;
>h[m_, b_] := Solve[Det[S[2, m, b, 2]] == 0, q];
>Plot3D[q  /. h[m, b] [[2]], {m, 0, 3}, {b, 0, 3}]
>
>Is there a more straightforward way ? Especially I would like to create
>several functions this way and their sum is the resulting function I
>am interested in (actually it's a series).
>

S[k_, m_, b_, 
    n_] := {{k*q + m + b + n , k + m + b - n}, {k*q + m - b + n, 
      k*q - m + b + n}};

Your approach is fine; however, to the extent possible and practicable, you 
should define functions so that they are evaluated only once. For example,

Clear[detS];
detS[k_, m_, b_, n_] := Det[S[k, m, b, n]];

?detS

Global`detS
detS[k_, m_, b_, n_] := Det[S[k, m, b, n]]

Note that the deterimant of S would be evaluated for each call. Compare this 
with

Clear[detS];
detS[k_, m_, b_, n_] := Evaluate[Det[S[k, m, b, n]]];

?detS

Global`detS
detS[k_, m_, b_, n_] := 2*b^2 + b*k - k*m - 2*m^2 - k*n + 2*n^2 + b*k*q - 
k^2*q - k*m*q + 3*k*n*q + k^2*q^2

For functions which are not too complex, it may be worthwhile to Simplify the 
result as part of the definition.

Clear[detS];
detS[k_, m_, b_, n_] := Evaluate[FullSimplify[Evaluate[Det[S[k, m, b, n]]]]];

?detS

Global`detS
detS[k_, m_, b_, n_] := 2*b^2 + b*k*(1 + q) + (-2*m + 2*n + k*(-1 + q))*(m + 
n + k*q)

Similarly,

Clear[h];
h[m_, b_] := Solve[detS[2, m, b, 2] == 0, q];

?h

Global`h
h[m_, b_] := Solve[detS[2, m, b, 2] == 0, q];

Clear[h];
h[m_, b_] := Evaluate[Solve[detS[2, m, b, 2] == 0, q]];

?h

Global`h
h[m_, b_] := {{q -> (-4 - b + m - Sqrt[-7*b^2 - 2*b*m + 9*m^2])/4}, 
     {q -> (-4 - b + m + Sqrt[-7*b^2 - 2*b*m + 9*m^2])/4}}

Off[Plot3D::gval];

(p2 = Plot3D[q  /. h[m, b] [[2]], {m, 0, 3}, {b, 0, 3}]) // Timing

(p1 = Plot3D[q  /. h[m, b] [[1]], {m, 0, 3}, {b, 0, 3}, 
        PlotPoints -> 25]) // Timing

Off[Graphics3D::nlist3];

Show[{p1, p2}];


Bob Hanlon


  • Prev by Date: Re: Experimental data as function?
  • Next by Date: Re: TableForm vs. Slot
  • Previous by thread: Re: Using results of "Solve"
  • Next by thread: Difficulties EXPORTing graph for prresentation to PDF format