# Unable to plot a function after using Solve

Clear[cn, hy, v, n0];

cn[q1_?NumericQ, q2_?NumericQ, n0_?NumericQ,Ut_?NumericQ] := ((Ut*n0)/(1 - Cos[2*Pi*q1] - Cos[2*Pi*q2]));
hy[q1_?NumericQ, q2_?NumericQ, n0_?NumericQ, Ut_?NumericQ] :=  0.25*((1 + cn[q1, q2, n0])^(-1/2) + (1 - cn[q1, q2, n0])^(1/2) - 2);
v[n0_?NumericQ, Ut_?NumericQ] := n0 + NIntegrate[hy[q1, q2, n0, Ut], {q1,-0.5, 0.5}, {q2, -0.5, 0.5}] - 1;

sols = Solve[v[n0, Ut] == 0, n0]
Plot[Evaluate[n0 /. sols], {Ut, 0, 20}, PlotRange ->Full]


I am unable to plot(shows nothing after running). Is there any better way to get the plot? Any help is appreciated. Thanks.

• I recommend that you check your equations. cn is defined with four arguments; however, both calls to cn in the definition of hy have only three arguments. Commented May 8, 2015 at 1:13

Assuming we can rule out problems relating to multiple statements in the same cell (so that the Plot is being "multipled" by the results of the Solve), you

In[3]:= sols = Solve[v[n0, Ut] == 0, n0]

During evaluation of In[3]:= Solve::ifun: Inverse functions are being used by Solve,
so some solutions may not be found; use Reduce for complete solution information. >>

Out[3]= {{n0 -> InverseFunction[v, 1, 2][0, Ut]}}


This is what you're trying to plot. It's not a numerical function, which is why you are getting no line on your plot.

Tip: It's good practice to look at an expression before trying to plot it.

Even Reduce doesn't work:

In[22]:= Reduce[v[n0, Ut] == 0, n0]

During evaluation of In[22]:= Reduce::nsmet:
This system cannot be solved with the methods available to Reduce. >>

Out[22]= Reduce[v[n0, Ut] == 0, n0]


Neither does this, which demonstrates that the input you are giving to Plot simply isn't numerical.

In[16]:= newf[u_] := First@Evaluate[n0 /. sols] /. Ut -> u

In[20]:= N@newf[0.1]

Out[20]= InverseFunction[v, 1, 2][0., 0.1]


The solution to your problem is to respecify your equations (if indeed they can be) into a format that can be expressed as a numerical quantity for given values of the parameters. Brute-force use of Solve won't do it.