Re: plot variation
- To: mathgroup at smc.vnet.net
- Subject: [mg9605] Re: plot variation
- From: tburton at cts.com (Tom Burton)
- Date: Thu, 13 Nov 1997 23:24:15 -0500
- Sender: owner-wri-mathgroup at wolfram.com
On 13 Nov 1997 18:36:05 GMT, in comp.soft-sys.math.mathematica you wrote: >Hello! > >My name is Saeed, I have problem that i hope somebody can help me. The >problem consists of two functions > >f(u):==u^(4/(gamma+1))*(1/2+1/((gamma-1)*u^2)) > >and > >g(x):==x^(4*(gamma-1)/(gamma+1))/(gamma-1)+x^(-(5-3*gamma)/(gamma+1)) > >they are related to each other by the=20 > >f(u)==\lambda^(-2(gamma-1)/(gamma+1))*g(x) > >where lambda is some constant, the value of gamma==7/5. I want to plot a >graph which shows the variation of u as a function of x. I have tried >for many hours but i can't find the way doing it in Mathematica 3.0.0. >Any help appriciated. > >Thanks > > This seems to be a fairly difficult problem. I don't think that Mathematica can find a general solution as a function of lambda. Here is a specific solution for gamma==7/5; lambda==1; Here are your definitions of f and g, put into Mathematical form: f[u_]==u^(4/(gamma+1))*(1/2+1/((gamma-1)*u^2)); g[x_]==x^(4*(gamma-1)/(gamma+1))/(gamma-1)+x^(-(5-3*gamma)/(gamma+1)); I could not get solutions with Solve or NSolve, so I used FindRoot. By a bit of trial and error, I found that I could get a solution for x====.1 by starting at u====-.2: In[150]:== FindRoot[f[u]====lambda^(-2(gamma-1)/(gamma+1))*g[.1],{u,-2}] Out[150]== {u->0.896558 -0.614002 I} When I want a series of such solutions, I usually like to creep along the x-axis, using the result at the current value of x as the starting guess for the next value of x. The NestList function is just right for this. Here is a range of X's for which I want U's: In[163]:== Xs==Range[.1,1,.05]; Here are the corresponding solutions: In[164]:== Us==Rest at FoldList[ u/.FindRoot[f[u]====lambda^(-2(gamma-1)/(gamma+1))*g[#2],{u,#1}]&, -2,Xs]; If you are like me, you'll need to study the Help on FoldList a while to understand what is going on here. Time well spent. I'll just point out that "Rest@" discards the initial condition "-2" from the list of results. The following command will plot the real and imaginary parts of u vs x: ListPlot[Transpose[{Xs,Re[Us]}],PlotJoined->True]; ListPlot[Transpose[{Xs,Im[Us]}],PlotJoined->True]; Hope this helps. Tom Burton