Problems with Module
- To: mathgroup at smc.vnet.net
- Subject: [mg112068] Problems with Module
- From: Docente Sergio Miguel Terrazas Porras <sterraza at uacj.mx>
- Date: Sat, 28 Aug 2010 07:03:32 -0400 (EDT)
Hi John: Thank you for responding. The code does work for me with the empty list of local variables. Mathematica 7.0.1= , Windows 7. Now, the code with the list of local variables actually shows the trajectory and both vectors, unitario[t] and du[t] for t = 0. But as soon as I move the slider, things go wrong, as it tries to evaluate Derivative[1] ["a number"] of something. As for your comments on Manipulate, I as a rule define all my functions inside Manipulate, but as I was very frustated, I was just trying everything (I actually saved the notebook with the name Frustating.nb). It was actually by accident that I forgot to fill in the list of local variables. When it worked I was relieved. I then noticed my ommision and proceeded to fill the list. And then it didn't work! Could I send you the actual notebooks? I have a feeling that there is a problem with the cpoy-paste deal. Thanks again ! Sergio Terrazas John Fultz wrote: Actually, this does not work for me if I empty the Module list of variables. There might be something wrong with the example you intended to post as you copied it here. But I can make a generic point without seeing specific, functioning code. Manipulate uses Dynamic internally. Dynamic works by deferring the evaluation of its contents until they're displayed onscreen (i.e., well after the time you press Shift+Enter and most other evaluation would happen). By the time the Manipulate is displayed onscreen, the local variables for the Module have already gone out of scope. A Module *inside* of Manipulate would work fine, since it will be evaluated as part of the display. Also, by having function definitions outside of the Manipulate, you guarantee that, even if things did work, they won't work when you quit and restart Mathematica and reload the file, until you reevaluate all of your defining functions. A good, self-contained Manipulate will define its own functions, often doing so either explicitly with the Initialization option or implicitly with the SaveDefinitions option (both of which are clearly documented...I'll leave it to you to read up on them). Sincerely, John Fultz jfultz at wolfram.com User Interface Group Wolfram Research, Inc. Sergio Terrazas wrote: The following is a slight modification of a code that works fine. But this one does not work. However, if I empty the list of local variables in Module, Then it works! Could some of you enlighten me? f[t_]:=4 Sin[t];g[t_]:=2 Cos[t];a=0;b=2\[Pi]; DerVectConst[f,g,a,b] DerVectConst[f_,g_,a_,b_]:=Module[{r,vel,acel,unitario,derivadadeu,du}, $Assumptions=t\[Element]Reals; r[t_]={f[t],g[t]}; vel[t_]=(r^\[Prime])[t]; acel[t_]=(r^\[DoublePrime])[t]; unitario[t_]=acel[t]/Norm[acel[t]]; derivadadeu[t_]=(unitario^\[Prime])[t]; du[t_]=derivadadeu[t]//FullSimplify; Manipulate[ f1=Graphics[{Thick,Blue,Arrow[{r[t],r[t]+du[t]}]}]; f2=Graphics[{Thick,Green,Arrow[{r[t],r[t]+unitario[t]}]}]; g1=ParametricPlot[r[t],{t,a,b},AspectRatio->Automatic,PlotStyle->{Thick,= Red}]; txt=Graphics[{Text[Style["\!\(\*OverscriptBox[\"u\", \"^\"]\)",18,Bold],(r[t]+1.1unitario[t])],Text[Style["\!\(\*OverscriptBox[= \"u\", \"^\"]\)^\[Prime]",18,Bold],(r[t]+1.1du[t])]}]; punto=Graphics[{PointSize[.02],Point[r[t]]}]; Show[g1,f1,f2,txt,punto,PlotRange->All] ,{t,a,b}] ]