Re: How to hold a form and convert it to a string
- To: mathgroup at smc.vnet.net
- Subject: [mg93929] Re: How to hold a form and convert it to a string
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Fri, 28 Nov 2008 07:11:40 -0500 (EST)
- Organization: Uni Leipzig
- References: <ggog1m$s6g$1@smc.vnet.net>
- Reply-to: kuska at informatik.uni-leipzig.de
Hi,
the answer is just across the corridor
HornerForm[a*q + b*q^2 + c*q^3, q] // CForm // ToString
does not use Power[] at all and is more efficient in the numerical
evaluation than a*q + b*q*q + c*q*q*q
In Mathematica alone
Unprotect[Power]
Power /: MakeBoxes[a_^n_Integer, fmt_: StandardForm] := RowBox[
Riffle[Table[ToString[a], {n}], "*"]]
Protect[Power]
will solve the problem
And for CForm the definition:
ClearAttributes[Power, Protected]
Format[Power[a_Symbol, n_Integer], CForm] :=
ToExpression[StringJoin @@ Riffle[Table[ToString[a], {n}], "*"],
InputForm, HoldForm]
Protect[Power]
will produce
a*q + b*q^2 + c*q^3 // CForm
a*q + b*(q*q) + c*(q*q*q)
Regards
Jens
re
Patrick Scheibe wrote:
> Hi,
>
> I'm sure it's a simple question but I don't get it. I want to transform
> the expression
>
> a*q + b*q^2 + c*q^3
>
> into a C-Code form
>
> "a*q + b*q*q + c*q*q*q"
>
> With the rule
> exp //. (Power[q_, n_] :> Times@@Array[q &, n])
> for the transformation of the Power of q,
> the expression is instantly reevaluated to the first form (as I expected
> it). I could transform the complete first expression to a C-Form-String
> and manipulate this. This would look like
>
> f[exp_] := StringReplace[ToString@CForm[exp],
> "Power(" ~~ q_ ~~ "," ~~ n_ ~~ ")" :>
> StringJoin[Riffle[Array[ToString@q &, ToExpression[n]], "*"]]]
>
> Isn't there a more stylish way?
>
> Cheers
> Patrick
>