text: ## 12745 Reputation
  
  8 years, 296 days
  
  ## straightforward...
  
  I'd say that the solution is straightforward.
  
  a*(x-m)+b*(y-n)=0 is a general equation of a line thru [m,n]; it can be normalized by a^2+b^2=1
  and one may suppose f(0,0)>=0 (because f=0 and -f=0 produce the same line).
  
  The distance from (0,0) to the line is exactly |f(0,0)|/sqrt(a^2+b^2) = f(0,0). So, the tangency condition is just f(0,0)=r. That's all.
  
  Happy New Year!
  
  ## exact...
  
  Why not the exact solution?
  
  sol1:=dsolve({ode,ics}):
  plot(rhs(sol1),x=0..1);
  
  ## animate...
  
  a:=5: b:=3:
  F := proc(u)
  plots[display](
  plot([sqrt(a^2*cos(u)^2+b^2*sin(u)^2)+ a*cos(t)*cos(u)-b*sin(t)*sin(u),
  sqrt(a^2*sin(u)^2+b^2*cos(u)^2)+ a*cos(t)*sin(u)+b*sin(t)*cos(u), t=0..2*Pi]),
  plot([sqrt(a^2*cos(v)^2+b^2*sin(v)^2),sqrt(a^2*sin(v)^2+b^2*cos(v)^2),v=0..u],color=blue));
  end proc:
  plots[animate](F, [u], u = 0 .. Pi,  scaling = constrained );
  
  ## assuming...
  
  Strangely, if you simply remove the assumptions in your sheet, it works.
  
  ## parabola directly...
  
  To compute the (linear!) fit, you don't need the presence in memory of the vectors X,Y.
  It is enugh to have X,Y in a text file (each line containing x_i, y_i)  and read it line by line, e.g.
  
  f:="c:/temp/xy.txt";
  A:=Vector(5);B:=Vector(3);
  while line<>0 do
  x,y:=op(sscanf(line,"%f%f"));
  A := A + Vector([1,x,x^2,x^3,x^4]);
  B := B + Vector([y,x*y,x^2*y]);
  od:
  p:= <A[1],A[2],A[3];A[2],A[3],A[4];A[3],A[4],A[5]>^(-1).B:
  p[1]+p[2]*t+p[3]*t^2;  # the linear fit (parabola)
  
  ## subs...
  
  You have in two places subs({r=x, s=t} instead of subs({x=r, t=s}.
  
  Note that it is not a good idea to use exclusively ":" instead of ";". You will have no chance to debug the code.
  
  ## antiderivative...
  
  Compute the antiderivative first.
  
  J:=Int((4/3)*t^(3/2)/sqrt(x-t), t = 0 .. x);
  
  int((4/3)*t^(3/2)/sqrt(x-t), t):
  J = limit(%,t=x,left) - limit(%,t=0,right) assuming x>0;
  
  Edit. Actually,
  
  value(J) assuming x>0;
  
  also works.
  
  ## b value...
  
  It is obvious that b should not be allowed to be too large, otherwise the graph may become almost "dense" and will fit any data.
  
  For example, DirectSearch ==>
  
  DataFit(a*sin(b*x+c)+d, [b<=2,b>=0], Vector(X), Vector(Y), x, fitmethod = lms, strategy = globalsearch, method = quadratic);
  
  gave
  
  which seems resonable.
  
  ## arctan...
  
  The arctan function seems to be not very "smart".
  
  For example,
  
  arctan( cos(t/2),sin(t/2)) assuming t>0,t<Pi/2;
  
  simplifies to Pi/2 - t/2
  
  but equivalent expressions
  
  arctan( 1+cos(t),sin(t)) assuming t>0,t<Pi/2;
  
  simplify(  arctan( 1+cos(2*t),sin(2*t))  ) assuming t>0,t<Pi/4;
  
  do not.
  
  In such circumstances I think that it would be better to use an inert variant; at least Maple will not try to simplify.
  
  ## coeffs...
  
  roundcoeffs:=proc(p,x)  local t;
  end:
  
  p:=3.5*x^2+3.2*x-6.5+88.3*x*y-y^3+a*y:
  roundcoeffs(p,[x,y]);
  
  ## evalf...
  
  Use
  
  f := unapply(evalf(x^2/(sin(x)+x+1)), x);
  
  ## NonlinearFit...
  
  restart;
  f:=(x,y)->evalf(2*x*Int(sqrt(1+y^2*(t*x-1)^2/(1-(t*x-1)^2)), t = 0 .. 1)):
  m:=19;n:=9;
  G:=Matrix(m*n,3,datatype=float);
  k:=0;
  for i to m  do   for j to n do
  k:=k+1;
  G[k,1]:=2*i/(m+1); G[k,2]:=j/(n+1); G[k,3]:=f(2*i/(m+1),j/(n+1))
  od od:
  
  f_fit:=a1*x*sqrt(1+y^2*((a2*x-a3)^2/(1-(a4*x-1)^2)));
  Statistics[NonlinearFit](f_fit, G, [x, y], initialvalues = [a1 = 1, a2 = 0, a3 = 0, a4=1/2],
  output = [leastsquaresfunction, residuals]);
  f1:=unapply(%[1],x,y);
  
  printf("x    y    f(x,y)    f_fit(x,y)  \n");
  for x_ from 0.1 to 1.9 by 0.1 do
  for y_ from 0.1 to 0.9 by 0.1 do
  printf("%2.1f  %2.1f  %6f  %6f\n",x_,y_,f(x_,y_), f1(x_,y_)      );
  od; od;
  
  ## example...
  
  You may replace arcsin by wrongarcsin where:
  
  wrongarcsin := x -> piecewise(x<0, arcsin(x)+2*Pi, arcsin(x));
  
  ## You may simply "cut" the polynomial, or ...
  
  You may simply "cut" the polynomial, or use:
  
  hor:= (f,x,i) -> numapprox[hornerform](select(u -> degree(u,x)<=i, f) ,x);
  
  hor(f,x,3);
  
  ## rephrase...
  
  Your notations are not clear (at least for me).
  
  Given the function  g = f(r,theta)*r
  you can integrate it in the domain
  
  A = { (r,theta) :  a<= r <= b,  c(r) <= theta <= d(r)}
  
  or
  
  B = { (r,theta) :  a<= theta <= b,  c(theta) <= r <= d(theta)}.
  
  In the A case, the integral is
  int(int(g, theta=c(r)..d(r)), r = a..b);
  
  and similarly for B.
explanation: The provided text extract contains several Maple code snippets and comments, but it does not contain a clear, standalone math question or a question and answer pair. The snippets appear to be part of a discussion or a series of examples related to Maple programming and mathematical computations.
distilabel_metadata.content: Evaluate the user given text extract and determine if it contains a math question and optionally and answer to this question.
  
  Output rules:
  
  1. Briefly describe the document and mention if it contains a question or a question and answer.
  2. Finalize the output with: Label: no-question,question,question-and-answer,multiple-question,multiple-question-and-answer
distilabel_metadata.role: system
distilabel_metadata.content: ## 12745 Reputation
  
  8 years, 296 days
  
  ## straightforward...
  
  I'd say that the solution is straightforward.
  
  a*(x-m)+b*(y-n)=0 is a general equation of a line thru [m,n]; it can be normalized by a^2+b^2=1
  and one may suppose f(0,0)>=0 (because f=0 and -f=0 produce the same line).
  
  The distance from (0,0) to the line is exactly |f(0,0)|/sqrt(a^2+b^2) = f(0,0). So, the tangency condition is just f(0,0)=r. That's all.
  
  Happy New Year!
  
  ## exact...
  
  Why not the exact solution?
  
  sol1:=dsolve({ode,ics}):
  plot(rhs(sol1),x=0..1);
  
  ## animate...
  
  a:=5: b:=3:
  F := proc(u)
  plots[display](
  plot([sqrt(a^2*cos(u)^2+b^2*sin(u)^2)+ a*cos(t)*cos(u)-b*sin(t)*sin(u),
  sqrt(a^2*sin(u)^2+b^2*cos(u)^2)+ a*cos(t)*sin(u)+b*sin(t)*cos(u), t=0..2*Pi]),
  plot([sqrt(a^2*cos(v)^2+b^2*sin(v)^2),sqrt(a^2*sin(v)^2+b^2*cos(v)^2),v=0..u],color=blue));
  end proc:
  plots[animate](F, [u], u = 0 .. Pi,  scaling = constrained );
  
  ## assuming...
  
  Strangely, if you simply remove the assumptions in your sheet, it works.
  
  ## parabola directly...
  
  To compute the (linear!) fit, you don't need the presence in memory of the vectors X,Y.
  It is enugh to have X,Y in a text file (each line containing x_i, y_i)  and read it line by line, e.g.
  
  f:="c:/temp/xy.txt";
  A:=Vector(5);B:=Vector(3);
  while line<>0 do
  x,y:=op(sscanf(line,"%f%f"));
  A := A + Vector([1,x,x^2,x^3,x^4]);
  B := B + Vector([y,x*y,x^2*y]);
  od:
  p:= <A[1],A[2],A[3];A[2],A[3],A[4];A[3],A[4],A[5]>^(-1).B:
  p[1]+p[2]*t+p[3]*t^2;  # the linear fit (parabola)
  
  ## subs...
  
  You have in two places subs({r=x, s=t} instead of subs({x=r, t=s}.
  
  Note that it is not a good idea to use exclusively ":" instead of ";". You will have no chance to debug the code.
  
  ## antiderivative...
  
  Compute the antiderivative first.
  
  J:=Int((4/3)*t^(3/2)/sqrt(x-t), t = 0 .. x);
  
  int((4/3)*t^(3/2)/sqrt(x-t), t):
  J = limit(%,t=x,left) - limit(%,t=0,right) assuming x>0;
  
  Edit. Actually,
  
  value(J) assuming x>0;
  
  also works.
  
  ## b value...
  
  It is obvious that b should not be allowed to be too large, otherwise the graph may become almost "dense" and will fit any data.
  
  For example, DirectSearch ==>
  
  DataFit(a*sin(b*x+c)+d, [b<=2,b>=0], Vector(X), Vector(Y), x, fitmethod = lms, strategy = globalsearch, method = quadratic);
  
  gave
  
  which seems resonable.
  
  ## arctan...
  
  The arctan function seems to be not very "smart".
  
  For example,
  
  arctan( cos(t/2),sin(t/2)) assuming t>0,t<Pi/2;
  
  simplifies to Pi/2 - t/2
  
  but equivalent expressions
  
  arctan( 1+cos(t),sin(t)) assuming t>0,t<Pi/2;
  
  simplify(  arctan( 1+cos(2*t),sin(2*t))  ) assuming t>0,t<Pi/4;
  
  do not.
  
  In such circumstances I think that it would be better to use an inert variant; at least Maple will not try to simplify.
  
  ## coeffs...
  
  roundcoeffs:=proc(p,x)  local t;
  end:
  
  p:=3.5*x^2+3.2*x-6.5+88.3*x*y-y^3+a*y:
  roundcoeffs(p,[x,y]);
  
  ## evalf...
  
  Use
  
  f := unapply(evalf(x^2/(sin(x)+x+1)), x);
  
  ## NonlinearFit...
  
  restart;
  f:=(x,y)->evalf(2*x*Int(sqrt(1+y^2*(t*x-1)^2/(1-(t*x-1)^2)), t = 0 .. 1)):
  m:=19;n:=9;
  G:=Matrix(m*n,3,datatype=float);
  k:=0;
  for i to m  do   for j to n do
  k:=k+1;
  G[k,1]:=2*i/(m+1); G[k,2]:=j/(n+1); G[k,3]:=f(2*i/(m+1),j/(n+1))
  od od:
  
  f_fit:=a1*x*sqrt(1+y^2*((a2*x-a3)^2/(1-(a4*x-1)^2)));
  Statistics[NonlinearFit](f_fit, G, [x, y], initialvalues = [a1 = 1, a2 = 0, a3 = 0, a4=1/2],
  output = [leastsquaresfunction, residuals]);
  f1:=unapply(%[1],x,y);
  
  printf("x    y    f(x,y)    f_fit(x,y)  \n");
  for x_ from 0.1 to 1.9 by 0.1 do
  for y_ from 0.1 to 0.9 by 0.1 do
  printf("%2.1f  %2.1f  %6f  %6f\n",x_,y_,f(x_,y_), f1(x_,y_)      );
  od; od;
  
  ## example...
  
  You may replace arcsin by wrongarcsin where:
  
  wrongarcsin := x -> piecewise(x<0, arcsin(x)+2*Pi, arcsin(x));
  
  ## You may simply "cut" the polynomial, or ...
  
  You may simply "cut" the polynomial, or use:
  
  hor:= (f,x,i) -> numapprox[hornerform](select(u -> degree(u,x)<=i, f) ,x);
  
  hor(f,x,3);
  
  ## rephrase...
  
  Your notations are not clear (at least for me).
  
  Given the function  g = f(r,theta)*r
  you can integrate it in the domain
  
  A = { (r,theta) :  a<= r <= b,  c(r) <= theta <= d(r)}
  
  or
  
  B = { (r,theta) :  a<= theta <= b,  c(theta) <= r <= d(theta)}.
  
  In the A case, the integral is
  int(int(g, theta=c(r)..d(r)), r = a..b);
  
  and similarly for B.
distilabel_metadata.role: user
distilabel_metadata.raw_output_q_a_detector_0: The provided text extract contains several Maple code snippets and comments, but it does not contain a clear, standalone math question or a question and answer pair. The snippets appear to be part of a discussion or a series of examples related to Maple programming and mathematical computations.
  
  Label: no-question