Определить функцию из результата команды Series в Maple - PullRequest
0 голосов
/ 18 мая 2018

Есть ли простой способ определить функцию из результата последовательной команды?(то есть без остатка)

Например

[> series(cos(x), x=0, 5); 1-1/2*x^2+1/24*x^4+O(x^5)

и я хочу определить функцию

[> f:=(x)->1-1/2*x^2+1/24*x^4;

Я не знаю простого способа сделать это без ручного копирования / вставки, мне нужно сделать это динамически.На данный момент способ, которым я занимаюсь, действительно громоздок:

[> S:=series(cos(x), x=0, 5); f:=unapply(`+`(seq(op(S)[2*k-1]*x^(op(S)[2*k]), k=1..nops(S)/2-1)), x);

В случае обобщенного ряда, требующего дробных показателей Я могу сделать это следующим образом:

[> S:=series(sqrt(sin(x)), x=0, 4); f:=unapply(S-op(S)[nops(S)], x);

Я не знаю надежного способа объединить оба случая в один (количество терминов во втором случае аналогично порядку, хотя в первом случае оно почти вдвое больше), но это ненадежный способ, поскольку некоторые функции могут иметь очень мало терминов даже для высокого порядка).

1 Ответ

0 голосов
/ 18 мая 2018

Эта методология охватывает оба примера одинаково.

restart;

S:=series(cos(x), x=0, 5);

                      1  2   1   4    / 6\
             S := 1 - - x  + -- x  + O\x /
                      2      24   

P:=convert(S, polynom);

                          1  2   1   4
                 P := 1 - - x  + -- x 
                          2      24   

F:=unapply(P, x);

                             1  2   1   4
               F := x -> 1 - - x  + -- x 
                             2      24   

F(0.3);

                      0.9553375000

cos(0.3);

                      0.9553364891

И другой,

restart;

S:=series(sqrt(sin(x)), x=0, 5);

         (1/2)   1   (5/2)    1    (9/2)    / (13/2)\
   S := x      - -- x      + ---- x      + O\x      /
                 12          1440                    

P:=convert(S, polynom);

               (1/2)   1   (5/2)    1    (9/2)
         P := x      - -- x      + ---- x     
                       12          1440       

F:=unapply(P, x);

                  (1/2)   1   (5/2)    1    (9/2)
       F := x -> x      - -- x      + ---- x     
                          12          1440       

F(0.3);

                      0.5436177192

sqrt(sin(0.3));

                      0.5436177027

Вы можете увидеть этот шаг, который вы пропустили (до convert доpolynom), в примерах на справочной странице для самого series.

...