Fw: Re: Re: Using InterpolateRoot Function in Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg41229] Fw: Re: [mg41212] Re: Using InterpolateRoot Function in Mathematica
- From: Bobby Treat <drmajorbob+MathGroup3528 at mailblocks.com>
- Date: Thu, 8 May 2003 09:38:33 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
The following may make things clearer: Clear[L, x, deltaY, beta] beta = 5; L = 0.5; z[L_, x_] := Simplify[ -(2*x*(L*beta - 3*deltaY))/L^2 - (3*x^2*((-L)*beta + 2*deltaY))/L^3]; DownValues@z z[L_, x_] = Simplify[ -(2*x*(L*beta - 3*deltaY))/L^2 - (3*x^2*((-L)*beta + 2*deltaY))/L^3]; DownValues@z The same left hand side is stored either way -- that's the pattern to be simplified by the rule stored in DownValues. But in the second version, the RHS has already been evaluated as much as possible before storing the rule. The second version's effect seems odd, since L doesn't appear in the RHS, but this could be the behavior we want, in some application. Here are three more variations: Clear[L, x, deltaY, beta] beta = 5; expr = Simplify[-(2*x*(L*beta - 3*deltaY))/L^2 - (3* x^2*((-L)*beta + 2*deltaY))/L^3] z[L_, x_] = expr DownValues@z z[L_, x_] := Evaluate@expr DownValues@z z[L_, x_] := expr DownValues@z Here we have incorporated the current value of beta, but left everything else variable. In all three cases, the value of z[L,x] is affected if we change deltaY, but not if we change beta. In the third case, the value is also affected if we change expr. Bobby -----Original Message----- From: Dr. Wolfgang Hintze <weh at snafu.de> To: mathgroup at smc.vnet.net Subject: [mg41229] Re: [mg41212] Re: Using InterpolateRoot Function in Mathematica Thanks Bobby, I have to think about it. Up to now I wasn't clear about using := or =. So I preferred := without understanding it completely. In general I still have some problems with the validity of a varible and its assignment; so I frequently use Clear[x] before using x to have clean conditions. Regards, Wolfgang Bobby Treat wrote: > No, it isn't a typo -- and yes, it's possible. Evaluate the result > and see. Set can be preferable to SetDelayed when it works properly. > > "z[L_,x_]=" doesn't work if x or L has a value at this point, or if > you want any other symbols on the right hand side to take their values > at evaluation time rather than definition time. Compare these two > definitions: > > Clear[L, x] > z[L_, x_] := Simplify[ > -(2*x*(L*beta - 3*deltaY))/L^2 - (3*x^2*((-L)*beta + > 2*deltaY))/L^3]; > ?z > > z[L_, x_] = Simplify[ > -(2*x*(L*beta - 3*deltaY))/L^2 - (3*x^2*((-L)*beta + > 2*deltaY))/L^3]; > ?z > > The first definition calls Simplify whenever you use z[L,x], but the > second calls Simplify only once. Another approach to Haritha's > problem would be to define f this way: > > f[L_] = Integrate[Sqrt[1 + z[L, x]^2], {x, 0, L}] - L0 > > That way the symbolic integration occurs only once, whereas > > f[L_] := Integrate[Sqrt[1 + z[L, x]^2], {x, 0, L}] - L0 > > will cause symbolic integration to occur again for each call to f. > > In this case, symbolic integration takes quite a while and fails, so > that doesn't help. If it did work, it would be better than using > NIntegrate. > > Bobby > > -----Original Message----- > From: Dr. Wolfgang Hintze <weh at snafu.de> To: mathgroup at smc.vnet.net > To: mathgroup at smc.vnet.net > Sent: Wed, 7 May 2003 03:58:07 -0400 (EDT) > Subject: [mg41229] [mg41212] Re: Using InterpolateRoot Function in Mathematica > > Bobby, > > Just a question: is the line > z[L_,x_]=-(2*x*(... > a typing error, i.e. shouldn't it read > z[L_,x_]:=-(2*x*(...? > Or is a definition like that possible, and if so, what does it mean? > > Regards, > Wolfgang > > > > Bobby Treat wrote: > >> Needs["NumericalMath`InterpolateRoot`"] >> > z[L_,x_]=-(2*x*(L*beta-3*deltaY))/L^2-(3*x^2*((-L)*beta+2*deltaY))/L^3; > >> deltaY=0.000254;L0=.013;alpha=5; >> beta=Tan[alpha*(Pi/180)]; >> f[L_?NumericQ]:=NIntegrate[Sqrt[1+z[L,x]^2],{x,0,L}]-L0 >> InterpolateRoot[f[L],{L,.01,.02}] >> >> {L -> 0.012992620790646777121996501} >> >> NIntegrate and NumericQ help avoid the messy symbolic integral. > > Making > >> z an explicit function isn't essential, but I gave up getting past >> NIntegrate's HoldAll attribute without it. >> >> Bobby >> >> -----Original Message----- >> From: Haritha Yalamanchili <haritha12 at attbi.com> To: mathgroup at smc.vnet.net > > To: mathgroup at smc.vnet.net > >> mathgroup at smc.vnet.net >> Subject: [mg41229] [mg41212] Re: Using InterpolateRoot Function in Mathematica >> >> Hi Bobby, >> >> Thank you for the response. I did not enter the exact mathematica >> format, I >> only used the symbolic notation to explain the problem (sorry if this >> caused >> any confusion). Attached is the mathematica file I was using to solve >> for >> the arclength. >> >> deltay, beta and L0 are constants. Also L0 can be used as an initial >> guess >> for the root (L). >> >> I was able to solve this problem in Mathcad, on one of my friends >> computer, >> but I would prefer to solve in Mathematica , as I am more comfortable >> using >> Mathamatica. >> >> Any help that you could provide is greatly appreciated. >> >> Thank You >> Prasad >> ----- Original Message ----- >> From: "Bobby Treat" <drmajorbob+MathGroup3528 at mailblocks.com> To: mathgroup at smc.vnet.net > > To: mathgroup at smc.vnet.net > >> Subject: [mg41229] [mg41212] Re: Using InterpolateRoot Function in Mathematica >> >> >> >>> First, why write >>> >>> f(L) = Integrate[sqrt(1+z^2) dx] - L0 (Integration limits are from 0 >>> >> to >> >>> L) >>> >>> if you mean >>> >>> f[L_]:= Integrate[sqrt(1+z^2),{z,0,L}] - L0 >>> >>> ?? >>> >>> This leaves me wondering if you entered that, or something else. The >>> possible errors you MIGHT have made are endless, so it would really >>> help if you just showed us the statement you entered. >>> >>> Secondly, what is L0? Another unknown? A parameter? >>> >>> Bobby >>> >>> -----Original Message----- >>> From: Haritha Yalamanchili <haritha12 at attbi.com> To: mathgroup at smc.vnet.net >> > To: mathgroup at smc.vnet.net > >>> To: mathgroup at smc.vnet.net >>> Sent: Sun, 4 May 2003 03:56:52 -0400 (EDT) >>> Subject: [mg41229] [mg41212] Using InterpolateRoot Function in Mathematica >>> >>> Hi, >>> >>> I am trying to use Mathematica to find a value of "L" that satisfies >>> >> the >> >>> equation >>> >>> Integrate[sqrt(1+z^2) dx] - L0 = 0 (Integration limits are from 0 to >>> >> L) >> >>> where, >>> >>> z= -2 x(L C1 - 3 C2)/L^2 - 3 x^2(-L C1 + 2 C2)/L^3 >>> >>> In order to find the value of L that satisfies the above equation, I >>> have >>> setup the problem in Mathematica as shown below. Can some one help to >>> verify >>> if the problem is setup properly of if Mathematica is capable of >>> finding a >>> root for such functions. >>> >>> ****** >>> f(L) = Integrate[sqrt(1+z^2) dx] - L0 (Integration limits are from 0 >>> >> to >> >>> L) >>> >>> InterpolateRoot[ f(L),{L,0,L0} ] >>> ******* >>> (L0=13, C1=0.12, C2=0.25) >>> >>> Value of L is close to L0 and hence, L0 can be used as the initial >>> >> guess >> >>> value. >>> >>> Thank You and Best Regards >>> Prasad >>> >> >