Maple :: wyrażenia algebraiczne

Rozwijanie wyrażeń

Wyrażenia algebraiczne, trygonometryczne, logarytmiczne i inne rozwijamy przy pomocy funkcji expand(f), na przykład:

> expand((x-1)*(x+2));

                                   2
                                  x  + x - 2
> expand((x-a-b)*(x+2));

                        2
                       x  + 2 x - a x - 2 a - b x - 2 b

Rozwijanie z warunkami

Podając dodatkowe wyrażenia jako kolejne argumenty funkcji expand zapobiegamy ich rozwijaniu. Porównaj:

> expand((x+y)*(u-w^2));

                                     2            2
                            x u - x w  + y u - y w
> expand((x+y)*(u-w^2),u-w^2);

                                  2            2
                            (u - w ) x + (u - w ) y

Upraszczanie wyrażeń

Funkcja normal(f) upraszcza wyrażenia wykonując na przykład redukcję wyrazów podobnych i skracanie, na przykład:

> normal(a*b-a*(b+1));

                                      -a
> normal((a^3-b^3)/(a-b));

                                  2          2
                                 a  + a b + b
> normal(x/(x+1) + 1/x + 1/(1+x));

                                     x + 1
                                     -----
                                       x

Upraszczanie wyrażeń

Funkcja simplify(f) upraszcza wyrażenia wykonując odpowiednie prawa działań, na przykład:

> simplify((2^3)^2-sqrt(4*7-19));

                                      61
> simplify(((x+y)^2*(x-y)^3)^2);

                                      4        6
                               (x + y)  (x - y)

Dodatkowy argument wskazuje na rodzaj wyrażeń:

> simplify(cos(x)^2-sin(x)^2,trig);

                                         2
                                 2 cos(x)  - 1

„Kombinowanie” wyrażeń

Funkcja combine(expr,name) służy do przekształcania wyrażenie expr z zastosowaniem reguł określonych jako name. Regułami mogą być: exp, ln, power, Psi, trig. Na przykład wyrażenie e^x e^sin(x) [sin(x)]^4 można przekształcać tak: Bez stosowania reguł otrzymujemy:

> combine(exp(x)*exp(sin(x))*sin(x)^4);

3/8 exp(x + sin(x)) + 1/8 exp(x + sin(x)) cos(4 x)

     - 1/2 exp(x + sin(x)) cos(2 x)

Po wymuszeniu przekształceń ze względu na eksponensy otrzymujemy:

> combine(exp(x)*exp(sin(x))*sin(x)^4,exp);

                                  4
                            sin(x)  exp(x + sin(x))

Przekształcając ze względu na funkcje trygonometryczne:

> combine(exp(x)*exp(sin(x))*sin(x)^4,trig);

3/8 exp(x) exp(sin(x)) + 1/8 exp(x) exp(sin(x)) cos(4 x)

     - 1/2 exp(x) exp(sin(x)) cos(2 x)

No i na koniec jeszcze jeden przykład:

> combine(exp(x)*exp(sin(x))*sin(x)^4,trig,exp);

3/8 exp(x + sin(x)) + 1/8 exp(x + sin(x)) cos(4 x)

     - 1/2 exp(x + sin(x)) cos(2 x)

Obliczanie wartości wyrażenia w punkcie

Weźmy takie wyrażenie:

> w:=(2*a*x^2-3)/(x-a);

                                          2
                                     2 a x  - 3
                                w := ----------
                                       x - a

Możemy obliczyć jego wartość dla zadanej wartości parametru a i/lub w zadanym punkcie x. Ile wynosi wartość tego wyrażenia dla a = 0? Aby się tego dowiedzieć trzeba użyć funkcji subs(x1=a1,x2=a2,...,w), która oblicza wartość wyrażenia w z warunkami x₁=a₁, x₂=a₂… gdzie x_i są zmiennymi (parametrami) wyrażenia w, a a_i ich wartościami.

> subs(a=0,w);

                                     - 3/x

A dla dowolnego a i x = 5?

> subs(x=5,w);

                                   50 a - 3
                                   --------
                                    5 - a

Możemy też chcieć znać wartość jednocześnie dla a = 0 i x = 5:

> subs(a=0,x=5,w);

                                     -3/5

Oczywiście równoważne są następujące trzy zapisy:

> subs(a=0,x=5,w);

> subs(x=5,subs(a=0,w));

> subs(a=0,subs(x=5,w));

Podstawienia

Funkcji subs(x1=a1,x2=a2,...,w) można też używać w celu dokonywania podstawień. Weźmy takie wyrażenie:

> w:=1/2*(3*x^2-5*x);

                                        2
                              w := 3/2 x  - 5/2 x

i dokonajmy trzech (przykładowych) podstawień: cos(t) zamiast x, z zamiast x² oraz x zamiast x²:

> subs(x=cos(t),w);

                                     2
                           3/2 cos(t)  - 5/2 cos(t)
> subs(x^2=z,w);

                                   3 z   5 x
                                   --- - ---
                                    2     2
> subs(x^2=x,w);

                                      -x

Określanie precyzji

evalf(1/3+1/4);

                                 0.5833333333
evalf(1/3+1/4,4);

                                    0.5833