MathGroup Archive 2003

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

Search the Archive

Working with Symbolic and Numeric Values at the Same Time

  • To: mathgroup at smc.vnet.net
  • Subject: [mg41637] Working with Symbolic and Numeric Values at the Same Time
  • From: "David Park" <djmp at earthlink.net>
  • Date: Thu, 29 May 2003 08:14:06 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Greg,

I'm posting this to MathGroup also because it may be of general interest and
other people might have better suggestions.

If you want to have a symbolic entity and also use it with values, then the
best solution is to use rules to substitute values into the entity. As a
simple example if you have

r:= Sqrt[x^2+y^2]

and you want to do calculations with r, say Solve for y, then don't write

x = 1
y = 2

because then you have to remember to Clear x and y before working
symbolically. Rather write

data = {x -> 1, y -> 2}

Then you can work symbolically with r and x and y all you want. When you
want actual numberical values just substitute the data

expression[involving r, x, y] /. data

and the symbolic expressions are still intact.

For use with your matrix this is a little more difficult.

M = Array[m, {2, 2}];

If you usually want to set all the values at once you could use the
routine...

SetMRules1[valuemat_] := (MRules = Thread[Flatten[M] -> Flatten[valuemat]];)

SetMRules1[{{1, 2}, {3, 4}}]

MRules
{m[1, 1] -> 1, m[1, 2] -> 2, m[2, 1] -> 3, m[2, 2] -> 4}

M is still intact as a symbolic matrix and

M /. MRules

gives the numerical form of the matrix.

If your code requires setting values one at a time you could use the routine

SetMRules2[{i_, j_}, value_] :=
  (MRules = MRules /. Rule[m[i, j], _] :> Sequence[];
    MRules = Sort[Join[MRules, {m[i, j] -> value}]];)

which will build a list of rules for the matrix elements. Sequence[] gets
rid of an existing element in a list.

MRules = {}
SetMRules2[{1, 1}, 2]
MRules
SetMRules2[{1, 2}, a]
MRules
SetMRules2[{1, 1}, 3]
MRules

giving

{}
{m[1, 1] -> 2}
{m[1, 1] -> 2, m[1, 2] -> a}
{m[1, 1] -> 3, m[1, 2] -> a}

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/

From: Gregory Lypny [mailto:gregory.lypny at videotron.ca]
To: mathgroup at smc.vnet.net

On a related note, I was wondering whether it is possible to clear all
numerical values in a matrix in one shot without clearing the
underlying element symbols that were created using Array.  Any thoughts?

For example,

	M = Array[m{2,2}] displays M={{m[1,1],m[1,2]},{m[2,1],m[2,2]}}

	then assign numbers to the elements individually as m[1,2]=7, etc.

	... do some calculations using M

	Now I'd like to clear M and go back to the original symbolic or
algebraic display; or, if not clear it of values, be able to flip back
and forth between numerical and algebraic displays for exposition.

	Regards,

		Greg



  • Prev by Date: Re: Printing Cellular Automata
  • Next by Date: Re: integration of rational functions with parameter; simplification. Limit
  • Previous by thread: Corrupted Files
  • Next by thread: Lines in ContourPlot