       Re: Option instead of a function argument: is it possible?

• To: mathgroup at smc.vnet.net
• Subject: [mg98053] Re: [mg98037] Option instead of a function argument: is it possible?
• From: "David Park" <djmpark at comcast.net>
• Date: Sun, 29 Mar 2009 02:43:21 -0500 (EST)
• References: <27334345.1238240356951.JavaMail.root@m02>

```Alexei,

eq1 = x'[t] == -y[t] - x[t]^2;
eq2 = y'[t] == 2 x[t] - y[t]^3;

Options[trajectory2] = {TrajectoryAccuracyGoal -> Automatic,
TrajectoryMaxSteps -> 10000};

trajectory2[eq1_, eq2_, point_, tmax_, OptionsPattern[]] :=
Module[{s, eq3, eq4, accuracyGoal,
maxSteps},
accuracyGoal = OptionValue[TrajectoryAccuracyGoal];
maxSteps = OptionValue[TrajectoryMaxSteps];
eq3 = x == point[];
eq4 = y == point[];
s = NDSolve[{eq1, eq2, eq3, eq4}, {x, y}, {t, tmax},
AccuracyGoal -> accuracyGoal,
MaxSteps -> maxSteps];
ParametricPlot[Evaluate[{x[t], y[t]} /. s], {t, 0, tmax},
PlotRange -> All]]

trajectory2[eq1, eq2, {1, 1}, 30]

trajectory2[eq1, eq2, {1, 1}, 30,
TrajectoryMaxSteps -> 200,
TrajectoryAccuracyGoal -> 2]

David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/

From: Alexei Boulbitch [mailto:Alexei.Boulbitch at iee.lu]

Dear Community,

If we need to write functions depending upon several parameters the
latter are usually passed to the function as its arguments. I wonder
however, if you know a way to pass some parameters to a function in the
same way as options are passed to operators in Mathematica. That is, if
the default value of the parameter in question is OK,  you  do not even
mention such a parameter among the function arguments. If you need to
specify such a parameter you include an argument having the form
Option->optionValue.

Let me explain precisely within a simple example what I would like to:

1. Consider a function that solves a system of 2 ordinary differential
equations and draws a trajectory on the (x, y) plane:

trajectory1[eq1_, eq2_, point_, tmax_] :=
Module[{s, eq3, eq4},
eq3 = x == point[];
eq4 = y == point[];
s = NDSolve[{eq1, eq2, eq3, eq4}, {x, y}, {t, tmax}];
ParametricPlot[Evaluate[{x[t], y[t]} /. s], {t, 0, tmax},
PlotRange -> All]]

Equations can be fixed say, like these:

eq1 = x'[t] == -y[t] - x[t]^2;
eq2 = y'[t] == 2 x[t] - y[t]^3;

and initial conditions are passed by the parameter point. The function
can be called:

trajectory1[eq1, eq2, {1, 1}, 30]

2. Assume now that I need to specify the accuracy goal and MaxSteps
parameters. Then the function will take a slightly different form:

trajectory2[eq1_, eq2_, point_, tmax_, accuracyGoal_, maxSteps_] :=
Module[{s, eq3, eq4},
eq3 = x == point[];
eq4 = y == point[];
s = NDSolve[{eq1, eq2, eq3, eq4}, {x, y}, {t, tmax},
AccuracyGoal -> accuracyGoal, MaxSteps -> maxSteps];
ParametricPlot[Evaluate[{x[t], y[t]} /. s], {t, 0, tmax},
PlotRange -> All]]

and also called:

trajectory2[eq1, eq2, {1, 1}, 30, 10, 1000]

However, I would like to achieve a function

trajectory3[eq1_, eq2_, point_, tmax_]

that can be addressed both as

trajectory3[eq1, eq2, {1, 1}, 30]

(if I agree with the default values of the AccuracyGoal and MaxSteps)
and as

trajectory3[eq1, eq2, {1, 1}, 30, AccuracyGoal->10, MaxSteps->10000],

if a change in these options is necessary.  Is it possible?

Best regards, Alexei

--
Alexei Boulbitch, Dr., habil.
Senior Scientist

IEE S.A.
ZAE Weiergewan
11, rue Edmond Reuter
L-5326 Contern
Luxembourg

Phone: +352 2454 2566
Fax:   +352 2454 3566

Website: www.iee.lu

This e-mail may contain trade secrets or privileged, undisclosed or
otherwise confidential information. If you are not the intended recipient
and have received this e-mail in error, you are hereby notified that any
review, copying or distribution of it is strictly prohibited. Please inform
us immediately and destroy the original transmittal from your system. Thank