MathGroup Archive 2003

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

Search the Archive

Re: HoldForm Question

  • To: mathgroup at smc.vnet.net
  • Subject: [mg41404] Re: HoldForm Question
  • From: "Dana DeLouis" <delouis at bellsouth.net>
  • Date: Sun, 18 May 2003 05:02:33 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Thank you everyone for your help!  :>)
I never thought of Replacement rules as the solution.  :>(
Ted has a great idea, but I was hoping not to have to break an equation into
elements.
However, the material is great, and the link will keep me studying for a
long time.

I really liked Torben's idea of using HoldPattern in the replacement rules.
This allows me to not introduce extra variables.

I noticed that HoldForm does not like to Hold the value of "1" in an
equation where it considers it useless

HoldForm[2*Pi*1*1]
Returns...
HoldForm[2*Pi]

Here, it gets rid of the 1's.  (Copied from InputForm)

In Torben's list, the 1's were dropped from the output.  Well, I can live
with that, but it does not look symmetrical for "display" purposes.

Here is my solution "so far"
I made my own little function to generate the list of replacement rules. I
first tried it as a function, but then realized the function would be called
at each element in a table.
I decided to have the function assign a list of replacement rules to a
variable.  Then, use this variable when generating the table.

Here is Torben's excellent idea, but the 1's are not kept.

v = Table[HoldForm[(2*Pi*r*c)/8] /. {HoldPattern[r] -> r,
      HoldPattern[c] -> c}, {r, 0, 3}, {c, 0, 4}];
  MatrixForm[v]

Here is my Function call holdem.  It assigns a list of rules to the variable
"held", and prints a message.

holdem[v_List] := Module[{s, t},
    (* s holds a string, t (temp) holds unique values of list v *)
    (* 'held' is a Global variable for storage of HoldPattern Rules *)
   
    t = Union[v] (* No duplicates *);
    Global`held = Map[Rule[HoldPattern[#], If[# == 1, HoldForm[1], #]] &,
t];
   
    s = "Note: 'held' holds a list of HoldPattern Rules for\n ";
    s = StringJoin[s , ToString[t]];
    Print[StyleForm[s, FontWeight -> "Bold", FontSlant -> "Italic"]];
    Print[Global`held // TableForm];]


Before the table, I do this...

holdem[{r, c}]

Note: 'held' holds a list of HoldPattern Rules for
 {r,c}

HoldPattern[c] -> If[c == 1, HoldForm[1], c]
HoldPattern[r] -> If[r == 1, HoldForm[1], r]


Now, I can use Torben's idea, and the 1's stay as 1's.

v = Table[HoldForm[(2*Pi*r*c)/8] /. held, {r, 0, 3},
    {c, 0, 4}]; MatrixForm[v]

To remove the HoldForm at each element, I had to make another small program

Eval[x_] := MapAll[ReleaseHold, x]

v//Eval

Anyway, thank you for your help.  This will work. :>)


--
Dana DeLouis
Windows XP
Mathematica $VersionNumber -> 4.2
delouis at bellsouth.net
= = = = = = = = = = = = = = = = =




  • Prev by Date: Re: Boundary Conditions for NDSolve
  • Next by Date: Re: Re: Palettes always on top
  • Previous by thread: Re: HoldForm Question
  • Next by thread: Re: Re: HoldForm Question