Re: Why Plot cannot run under package?
- To: mathgroup at smc.vnet.net
- Subject: [mg39653] Re: [mg39628] Why Plot cannot run under package?
- From: Omega Consulting <info at omegaconsultinggroup.com>
- Date: Thu, 27 Feb 2003 00:33:26 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
This is a context issue.
All symbols in you package are either in the System`,
Enhancements`DiscoverRoots1`, or Enhancements`DiscoverRoots1`Private
contexts. If it is a System` symbol it is recognized as such. Any
non-System` symbols used between the BeginPackage and Begin commands are in
the Enhancements`DiscoverRoots1` context. All other symbols are put in the
Enhancements`DiscoverRoots1`Private context.
This means that the x in you function is in the
Enhancements`DiscoverRoots1`Private context. But the x in the kk variable
is in the Global` context. To do what you want, you should do something like
DiscoverRoots1[CurveEquation_, {x_, xmin_, xmax_}]:=
Module[{pp},
(pp =
Plot[CurveEquation[x], {x,xmin,xmax}, MaxBend -> 10,
PlotDivision -> 20];
)]
This ensures that the x in the first and second arguments of Plot are the
same variable.
At 01:43 AM 2/26/2003, liwen liwen wrote:
>I want to use the Plot function in Package,so I try the following package:
>
>
>
>BeginPackage["Enhancements`DiscoverRoots1`"]
>
>DiscoverRoots1::usage = " Try the use of Plot in package "
>
>Begin["`Private`"]
>
>
>DiscoverRoots1[CurveEquation_, RootLocation_] :=
> Module[{pp},
> (pp =
> Plot[CurveEquation[x], RootLocation, MaxBend -> 10,
> PlotDivision -> 20];
> )];
>
>End[]
>EndPackage[
>
>I run:
>Needs["Enhancements`DiscoverRoots1`"]
>
>It is OK.
>
>But I try:
>
>Curve1[x_] = Sin[x];
>kk = {x, 0, 40};
>DiscoverRoots1[Curve1, kk]
>
>It alert such message:
>
>Plot::plnr: Curve1[Enhancements`DiscoverRoots1`Private`x] is not a \
>machine-size real number at x = 1.6666666666666667`*^-6.
>
>Plot::plnr: Curve1[Enhancements`DiscoverRoots1`Private`x] is not a \
>machine-size real number at x = 1.6226796629166318`.
>
>Plot::plnr: Curve1[Enhancements`DiscoverRoots1`Private`x] is not a \
>machine-size real number at x = 3.3923519943749474`.
>
>General::stop: Further output of Plot::plnr will be suppressed during this \
>calculation.
>
>But if I run the function under *.nb file, it can runs well.
>
>In[1]:=
>DiscoverRoots1[CurveEquation_,RootLocation_]:=
> Module[{pp},(pp=
> Plot[CurveEquation[x],RootLocation,MaxBend\[Rule]10,
> PlotDivision\[Rule]20];)];
>
>In[2]:=
>Curve1[x_]=Sin[x];
>kk={x,0,40};
>DiscoverRoots1[Curve1,kk]
>
>
>I do not know why the program fails when it is in Package format.
>Please help.
>
>Regards,
>Liwen
--------------------------------------------------------------
Omega Consulting
"The final answer to your Mathematica needs"
http://omegaconsultinggroup.com