Why is the parametric plot failing?

I tried running the following code but it doesnt seem to be working, it seems to be stuck on running. I think it's got something to do with the way I am defining functions with a variable integration limit.

If this is not the correct way to handle the definition of such functions in mathematica, how do I proceed? If it is the correct way, then what's going on?

The functions it's plotting should be continuous over $$(0,\pi)$$ (If I've handled the asymptotics correctly) and I've tried to restrict the plotting and integration limits to stay away from end points.

Here is my code:

n := 5
s[x_] := Sin[x]^(n + 2)*LegendreQ[n, n, Cos[x]]
r1[x_] := Integrate[s[t]*Cot[t], {t, 0.1, x}]
r2[x_] := s[x] + r1[x]
X[x_] := r1[x]*Sin[x]
Y[x_] := -Integrate[r2[t]*Sin[t], {t, 0.1, x}]
ParametricPlot[{X[m], Y[m]}, {m, 0.1, Pi - 0.1}]


Thankyou for any help provided!

EDIT:

Thankyou to Ulrich Neumann for his advice, I tried to re-write his solution myself in an attempt to get a better understanding;

Clear["Global*"]

n = 5
err = 0.1
s[x_] = Sin[x]^(n + 2)*LegendreQ[n, n, Cos[x]]
r1 = NDSolveValue[{Derivative[1][r1][t] == s[t]*Cot[t], r1[Pi/2] == 0}, r1, {t, err, Pi - err}]
r2[x_] = s[x] + r1[x]
X[x_] = r1[x]*Sin[x]
Y = NDSolveValue[{Derivative[1][Y][t] == (-r2[t])*Sin[t], Y[Pi/2] == 0}, Y, {t, err, Pi - err}]
ParametricPlot[{X[m], Y[m]}, {m, err, Pi - err}]


However I get the following error;

I thought I understood the documentation of NDSovle value but maybe there is something I am missing?

Thankyou for the support given so far - I am very greatful!

• Include code as text, not a figure. Otherwise we would have to type it back in ourselves to troubleshoot it. See How to copy code from Mathematica. Jan 28 at 14:55
• Thanks for the advice, I'll go fix that. Jan 28 at 14:56

NDSolvegives a fast solution:

n = 5
s = Function[x, Evaluate[Sin[x]^(n + 2)*LegendreQ[n, n, Cos[x]]]]
eps = 1/10
sol = NDSolveValue[{{r1'[t] == s[t]*Cot[t],Y'[t ] == Sin[t] (s[t] + r1[t]), r1[eps] == 0, Y[eps] == 0,X[t]== r1[t] Sin[t]}} , {X, Y}, {t, eps, Pi - eps}];//AbsoluteTiming
(*.006 seconds*)

ParametricPlot[{sol[[1]][t], sol[[2]][t]}, {t, eps, Pi - eps}]


• Hi @Ulrich, thankyou for the answer, I tried to implement your solution but got stuck in a reccursion loop, any idea what's going on? I've edited the question to shoe the error message. Jan 28 at 16:39
• Quit kernel and try to run the code from my answer. Jan 28 at 17:30
• @valcofadden: Further to Ulrich's point, see this answer that I wrote some time ago. You almost certainly used = (Set) instead of == (Equals) at some point, and if you do, the definition will persist even after you change the code and re-run it. Jan 28 at 17:59
• @valcofadden X[t],Y[t] must be cleared! Jan 28 at 19:46
• Ah thank you both for pointing this out - as you can most likely tell I am a novice with this software, thank you for taking the time to correct me! Jan 28 at 21:08
Clear["Global*"]

n = 5;

s[x_] := Sin[x]^(n + 2)*LegendreQ[n, n, Cos[x]]


Use numeric integration and restrict arguments to numeric values.

r1[x_?NumericQ] := NIntegrate[s[t]*Cot[t], {t, 0.1, x}]

r2[x_] := s[x] + r1[x]

X[x_] := r1[x]*Sin[x]

Y[x_?NumericQ] := NIntegrate[r2[t]*Sin[t], {t, 0.1, x}]


Even with numeric integration, evaluations of X and Y are slow

AbsoluteTiming[X[1.]]

(* {0.03156, -164.876} *)

AbsoluteTiming[Y[1.]]

(* {0.879204, -160.454} *)


The plot is quite slow

ParametricPlot[{X[m], Y[m]}, {m, 0.1, Pi - 0.1}]


• I've tried to describe something in line with @Ulrich Neumann solution, but was too slow :) "Try to know what you want to achieve" ) and yes, I went your way first :) How we can solve from the first principles :) Jan 28 at 16:25