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

• To: mathgroup at smc.vnet.net
• Subject: [mg98057] Re: Option instead of a function argument: is it possible?
• From: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>
• Date: Sun, 29 Mar 2009 02:44:06 -0500 (EST)
• References: <gqkv21\$4dn\$1@smc.vnet.net>

```Something like this:

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

?

Cheers -- Sjoerd

On Mar 28, 12:44 pm, Alexei Boulbitch <Alexei.Boulbi... at iee.lu> wrote:
> 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 ev=
en
> 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[0] == point[[1]];
>       eq4 = y[0] == point[[2]];
>   s = NDSolve[{eq1, eq2, eq3, eq4}, {x, y}, {t, tmax}];
>           ParametricPlot[Evaluate[{x[t], y[t]} /. s], {t, 0, tm=
ax},
>    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[0] == point[[1]];
>       eq4 = y[0] == point[[2]];
>   s = NDSolve[{eq1, eq2, eq3, eq4}, {x, y}, {t, tmax},
>     AccuracyGoal -> accuracyGoal, MaxSteps -> maxSteps];
>           ParametricPlot[Evaluate[{x[t], y[t]} /. s], {t, 0, tm=
ax},
>    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 other=
wise confidential information. If you are not the intended recipient and ha=
ve received this e-mail in error, you are hereby notified that any review, =
copying or distribution of it is strictly prohibited. Please inform us imme=
diately and destroy the original transmittal from your system. Thank you fo=