## 12950 Reputation

8 years, 363 days

## Bug...

Actually Maple can compute the limit.

## invfunc...

The expression of a inverse function is given in the table invfunc (and also Invfunc for multivalued inverses), see ?invfunc. When the user wants to use the inverse of one of his functions, he must define the entry in the table(s).

In Maple 2018 it works:

## Continued fractions...

Rational approximations are obtained via continued fractions. They are implemented in NumberTheory:-ContinuedFraction and the older `convert/confrac`.

For example:

```cf:=NumberTheory:-ContinuedFraction(Pi):
Convergent(cf, 1..5);
#    [22/7, 333/106, 355/113, 103993/33102, 104348/33215]
```

The actual computations are in `convert/real_rat`.

``<,>`(seq(`<|>`(seq(M[i,j],j=1..2)),i=1..2));`

or

`Matrix(4,4,(i,j)->M[iquo(i-1,2)+1,iquo(j-1,2)+1][irem(i-1,2)+1,irem(j-1,2)+1]);`

or

`Matrix(linalg[blockmatrix](2,2,[seq(M)]));`

## imbricated tables...

Replace sum with add in the definition of S.

## Careful with log branches...

 > ode := diff(y(x), x) - 2*(2*y(x) - x)/(x + y(x)) = 0; ic:=y(0)=2;
 (1)
 > sol:=dsolve(ode,'implicit');
 (2)
 > eq:=exp(lhs(sol))=1;
 (3)
 > EQ:=simplify(eq,exp);
 (4)
 > #plugin in y=2 at x=0 eval(%,[y(x)=2,x=0]);
 (5)
 > solve(%,_C1)
 (6)
 > EQ0:=eval(EQ, _C1=%);
 (7)
 > ysols:=solve(EQ0,y(x));
 (8)
 > simplify(limit~([ysols], x=0));
 (9)
 > ysol:=ysols[1];
 (10)
 > plot(ysol,x=-1..1);
 > odetest(y(x)=ysol,[ode,ic]);
 (11)
 >

## input, output...

Yes, an error or at least a warning would be better. input and output work with polynomials of any degree.

Note that when n >= p^k,  input(n) produces a polynomial (zpoly) of degree >= k.
The reduction modulo the extension polynomial is not performed.
It is however performed by the arithmetic operations in G except G:-`+`, G:-`-`
(here G := GF(p,k)).

## Trigonometry!...

This is a nice example where the correct use of trigonometry is essential.
It seems to be too subtle for a CAS!

By solving the ode by hand one obtains  the solution:

Y:= piecewise(x < 0, -2*arctan((x+2)/x), x>0, -2*arctan((x+2)/x)+2*Pi, Pi)

It is easy to check that it satisfies the ODE for ANY real x.
Your solution, 2*Pi-2*arccos(x/(2*x^2+4*x+4)^(1/2)),  is valid only for x>-2.

Edit.
It can be shown that  Y = 2*arctan(x + 1) + Pi/2
(it is enough to compute int(diff(Y,x), x) + C).

## Not strange...

Everything is correct. Note that

{ sqrt(y/x), - sqrt(y/x) } = { sqrt(y) / sqrt(x), - sqrt(y) / sqrt(x) } = { sqrt(x*y) / x, - sqrt(x*y) / x}

for any complex x,y;  (x <> 0, of course).

 >
 > restart;
 > SYS := [cos(x)*cos(y)*cos(x + y) - 2*(sin(x)*sin(y) - 1)*2*(sin(x)*sin(x + y) - 1)*2*(sin(y)*sin(x + y) - 1),        (cos(x + y) - (cos(x) + cos(y)) + 1)**2 + 2*cos(x)*cos(y)*cos(x + y)]:
 > eval(expand~(SYS), [cos(x)=a, sin(x)=b, cos(y)=c, sin(y)=d]):
 > sys:=[%[], a^2+b^2-1, c^2+d^2-1];
 (1)
 > S:=[solve](sys, explicit):
 > Sr:=evala(select(u -> is( Im~(eval([a,b,c,d], u))=[0,0,0,0]), S));
 (2)
 > XY:= u -> [x=arctan(eval(b,u),eval(a,u)), y=arctan(eval(d,u),eval(c,u))]:
 > select(u -> is(eval(x,u)+eval(y,u) >=0), XY~(Sr));
 (3)
 >

## Change IC...

Only if you provide another initial condition beyond the singularity.

Like in the next simple example.

 > dsolve({diff(y(x),x)=y(x)^2, y(0)=1});
 (1)

 > sol1:=dsolve({diff(y(x),x)=y(x)^2, y(0)=1}, numeric);
 (2)
 > plots:-odeplot(sol1, [x, y(x)], x= 0..3);
 > sol2:=dsolve({diff(y(x),x)=y(x)^2, y(2)=-1}, numeric); # Choose an IC at x=2 (after the previous singularity at 1)
 (3)
 > plots:-odeplot(sol2, [x,y(x)], x=1.1 .. 5);
 >

## eval...

```simplify( eval(rel(n), n=3 + 1/(2*t)) ) assuming t>0;
# 0 = 0```

## keyword params...

In maple there are many kinds of parameters. I don't think such a new class is really needed.
For your example, it is easy to use a keyword parameter; Eivenvectors uses for instance
output=['vectors', 'values']  or  output=['values']  etc.

 3 4 5 6 7 8 9 Last Page 5 of 115
﻿