MathGroup Archive 2010

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

Search the Archive

Help defining options; selecting particular version of a function;

Dear MathGroup:

I'm working on building up a package of functions and I need some

After several prior attempts, I'm learning the value in minimizing the
number of named functions and maximizing what each can do. (BTW, is
there a more technical term for this?--my goal, in part, is to
demonstrate how to teach others to build a package.)

Please consider the following function. It's the solution to a profit
maximization problem, and this particular case assumes Cobb-Douglas
technology. As you can see, I have set Profit[] up so that I can pass
it either a list of wages 'w' and shares 's', or have it generate the
function with 'n' number of inputs, with wages indicated by the
symbolic 'w', etc.


		wages=Table[Subscript[w, i],{i,1,n}];
		shares=Table[Subscript[s, i],{i,1,n}];

At this point, what I'd like to do is build on this framework by
including the appropriate profit functions for other types of
technology, such as 'CES', 'Leontief', etc.

My question: What is the best way to go about this? (my brainstorm of
possible ways to do this are below)

1. Profit[w_List,s_List,p_Symbol:p,tech_:"CobbDouglas"] and then use
If[] or Which[] to switch to "CES" or "Leontief". (This seems sloppy
to me, although it is similar to (3), below. Isn't it?)
2. I suspect that Condition[] might be another way to go, although I
have little practice using /; in the body of a function. Someone would
really have to hold my hand...
3. ClearAll[Profit]
Options[Profit] = {Technology -> "CobbDouglas", Technology -> "CES",
Technology -> "Leontief"};
Profit[x_, OptionsPattern[]] :=
  OptionValue[Technology] == "CobbDouglas", CobbDouglasVersion[x],
  OptionValue[Technology] == "CES", CESVersion[x],
  OptionValue[Technology] == "Leontief", LeontiefVersion[x]

So then I could call:

	Profit[variables, Technology -> "CobbDouglas"]
	Profit[go, Technology -> "CES"]
	Profit[here, Technology -> "Leontief"]

This last approach seems to be the most appropriate. Am I missing
anything? Pitfalls to avoid? I really don't want to end up starting
this over again... :)


  • Prev by Date: Re: Compiled function not working
  • Next by Date: Re: Using Mathematica for Electrophysiology Data
  • Previous by thread: An optimization problem
  • Next by thread: Re: Using Mathematica for Electrophysiology Data