Re: Extract coefs. and exponents from a list . Package problem
- To: mathgroup at smc.vnet.net
- Subject: [mg30725] Re: Extract coefs. and exponents from a list . Package problem
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sat, 8 Sep 2001 02:56:07 -0400 (EDT)
- References: <9nal4a$nos$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Guillemo,
Two ways of making ExtractCoef work and a different code.
The problem with the given ExtractCoef is that on loading the package code,
t is created as
test`test`Private`t
whereas the inpput has Global`t.
Two ways round this
1) in the package write Global`t in place of t
BeginPackage["test`test`"];
ExtractCoef::usage="ExtractCoef[test]";
Begin["`Private`"];
ExtractCoef[list_]:=
Block[{f,g,a,b},f[a__]:={a};
g[b__]:={b};{(#1/.a_*Exp[b_*Global`t]\[Rule]a&)/@
f@@list,(#1/.a_*Exp[b_*Global`t]\[Rule]b&)/@g@@list}]
End[];
Protect[ExtractCoef];
EndPackage[];
list1= 2 Exp[-0.3 t]+0.2 Exp[-0.1 t]+0.4 Exp[-0.4 t];
ExtractCoef[list1]
{{0.4,2,0.2},{-0.4,-0.3,-0.1}}
2) Input t from outside
In[1]:=
BeginPackage["test`test`"];
ExtractCoef::usage="ExtractCoef[test]";
Begin["`Private`"];
ExtractCoef[list_,t_]:=
Block[{f,g,a,b},f[a__]:={a};
g[b__]:={b};{(#1/.a_*Exp[b_*t]\[Rule]a&)/@
f@@list,(#1/.a_*Exp[b_*t]\[Rule]b&)/@g@@list}]
End[];
Protect[ExtractCoef];
EndPackage[];
ExtractCoef[list1,t]
{{0.4,2,0.2},{-0.4,-0.3,-0.1}}
3) Different code - also allows summands with a coefficient and ones with no
Exp[.] part
ExtractCoef2[lst_]:=
Transpose[
Replace[({lst/.x_Plus:>List@@x}//Flatten),
{Exp[p_] c_. -> {p,c},c_->{0,c}},{1}
]/.t->1
]
list2= 2 + Exp[-0.3 t]+0.2 Exp[-0.1 t]+0.4 Exp[-0.4 t];
ExtractCoef2[list2]
{{0,-0.4,-0.3,-0.1},{2,0.4,1,0.2}}
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Guillermo Sanchez" <guillerm at aida.usal.es> wrote in message
news:9nal4a$nos$1 at smc.vnet.net...
> Dear group
> (*I wish extract the coeffs and the exponents from expresion as follow*)
>
> list1=0.1 Exp[-0.3 t]+0.2 Exp[-0.1 t]+0.4 Exp[-0.4 t];
>
> (*This function works*)
>
> ExtractCoef1[list_]:=
> Block[{f,g,a,b},f[a__]:={a};
> g[b__]:={b};{(#1/.a_*Exp[b_*t]\[Rule]a&)/@
> f@@list,(#1/.a_*Exp[b_*t]\[Rule]b&)/@g@@list}]
>
> ExtractCoef1[list1]
>
> (*out[]:{{0.4`,0.1`,0.2`},{-0.4`,-0.3`,-0.1`}}*)(*it works*)
>
> (*But, if I use this function inside a package it doesn`t work*)
>
> BeginPackage["test`test`"];
>
> ExtractCoef::usage="ExtractCoef[test]";
>
> Begin["`Private`"];
>
> ExtractCoef[list_]:=
> Block[{f,g,a,b},f[a__]:={a};
> g[b__]:={b};{(#1/.a_*Exp[b_*t]\[Rule]a&)/@
> f@@list,(#1/.a_*Exp[b_*t]\[Rule]b&)/@g@@list}]
> End[];
> Protect[ExtractCoef];
> EndPackage[];
>
> ExtractCoef[list1](*It doesn´t work*)
>
> (* question 1: I wist fix this problem,any help?,
> question 2: Could any body build a expresion easier?*)
>