MathGroup Archive 2010

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

Search the Archive

Re: elementary questio about packages

  • To: mathgroup at smc.vnet.net
  • Subject: [mg108298] Re: elementary questio about packages
  • From: becko BECKO <becko565 at hotmail.com>
  • Date: Sat, 13 Mar 2010 07:55:00 -0500 (EST)

If you are going to return a symbol (L in this case), then perhaps you 
should let the user specify the symbol. Note that this is how functions 
like Solve,Root,NMinimize, etc that return symbols are implemented. The 
following would go in your package (the only change is putting L_ in the
 argument of the trivialfunc):

BeginPackage["trivial`"]

trivialfunc::usage="this
 function is very useful."

Begin["`Private`"]

trivialfunc[ind_,depend_,L_]:=Module[{letsee,ineq1,ineq2,func},
letsee=Array[L,Length[depend]];
ineq1=MapThread[GreaterEqual,{letsee,Table[0,{Length[letsee]}]}];
ineq2=MapThread[GreaterEqual,{ind-letsee,Table[0,{Length[letsee]}]}];
func={ind.letsee};
NMinimize[Flatten[{func,ineq1,ineq2}],Flatten[letsee]]
]

End[]

EndPackage[]


Then
 when you call it from a notebook:


In[1]:= Needs["trivial`", 
NotebookDirectory[] <> "trivial.m"]

In[4]:= x = {1, 2, 3, 
4, 5};
y = {6, 7, 8, 9, 10};

In[7]:= trivialfunc[x, y, myL]

Out[7]=
 {0., {myL[1] -> 0., myL[2] -> 0., myL[3] -> 0., myL[4] -> 
0., 
  myL[5] -> 0.}}


Hope this helps.

> 
Date: Fri, 12 Mar 2010 07:09:30 -0500
> From: 
fgutiers2002 at yahoo.com
> Subject: [mg108265] Re: [mg108238] 
elementary questio about packages
> To: mathgroup at smc.vnet.net
>
 
> Right Becko. And thanks to Leonid, David, and Patrick for 
their answers. But maybe to make it very clear I should provide a an 
example.
>   
> Take the following function:
> 
trivialfunc[ind_, depend_] :=
>   Module[{letsee, ineq1, ineq2, 
func}, letsee = Array[L, Length[depend]];
>    ineq1 = MapThread[
>
        GreaterEqual, {letsee, Table[0, {Length[letsee]}]}];
>    
ineq2 = MapThread[
>        GreaterEqual, {ind - letsee, Table[0, 
{Length[letsee]}]}];
>    func = {ind.letsee};
>    
NMinimize[Flatten[{func, ineq1, ineq2}], Flatten[letsee]]]
> 
>
 Of course, it should send all the L's to 0. Note that the L's vary in 
size, according to the length of the two variables.
>   
> I
 make a package called trivial, and run the function with  an  x and a 
y.
> x={1,2,3,4,5}
> y={6,7,8,9,10}
>   
> 
trivialfunc[y,y]
> And the output is:
> 
{0.,{trivial2`Private`L[1]->0.,trivial2`Private`L[2]->0.,trivial2`Private`L[3]->0.,trivial2`Private`L[4]->0.,trivial2`Private`L[5]->0.}}
>
 If I eliminate the Private I get pure nonsense, and if a declare the Ls
 in the module I get something of the form L$something, which I do not 
want either.
>   
> I would want it to be simply L[1]->0,
 etc, for a varying number of L's.
> Thank you for any help
>
 Fg
>  		 	   		  


  • Prev by Date: Re: superimposed plots using SHOW command
  • Next by Date: Re: Trouble with coupled quadratic equations where the solutions are
  • Previous by thread: Re: elementary questio about packages
  • Next by thread: locally changing Options