如何直接使用MAPLE过程作为函数返回

时间:2015-03-02 18:17:11

标签: maple

这可能是非常基本的,但我似乎无法弄明白:我试图直接使用过程的输出作为函数。过程是预制过程,即MAPLE中的dsolve选项。具体来说,我想说

dsolve({diff(y(t), t) = y(t)*t, y(1) = 1}, y(t), series, t = 1, order = 7)

结果是

y(t) = t+1-1+(t-1)^2+(2/3)*(t-1)^3+(5/12)*(t-1)^4+(13/60)*(t-1)^5+(19/180)*(t-1)^6+O((t-1)^7)

哪个好,但我不能直接将它用作函数,即当我输入y(3)时,我得到y(3)。我确定这是因为该过程返回一个语句而不是一个函数。我想最基本的方法是复制并粘贴表达式并说y:= t->无论如何,但这是不优雅的。我怎么能绕过这个? 谢谢

1 个答案:

答案 0 :(得分:2)

是的,您正在从y(t)=<some series>来电中找回dsolve形式的等式。

dsol := dsolve({diff(y(t), t) = y(t)*t, y(1) = 1}, y(t), series, t = 1, order = 5);

                                      2   2        3   5         4    /       5\
  dsol := y(t) = 1 + (t - 1) + (t - 1)  + - (t - 1)  + -- (t - 1)  + O\(t - 1) /
                                          3            12    

你也可以将右侧的系列结构转换为多项式(即摆脱大O项)。

convert( dsol, polynom );

                             2   2        3   5         4
           y(t) = t + (t - 1)  + - (t - 1)  + -- (t - 1) 
                                 3            12      

您还可以在该等式上评估所需的表达式y(t)。 (或者你可以使用rhs命令。对于多变量情况下的方程组,eval方法更加健壮和直接。)

eval( y(t), convert( dsol, polynom ) );

                          2   2        3   5         4
               t + (t - 1)  + - (t - 1)  + -- (t - 1) 
                              3            12         

最后,您还可以从此表达式生成运算符。

Y := unapply( eval( y(t), convert( dsol, polynom ) ), t );

                               2   2        3   5         4
          Y := t -> t + (t - 1)  + - (t - 1)  + -- (t - 1) 
                                   3            12         

该操作符是一个过程,可以应用于您想要的任何点。

 Y(3);
                                 19

我上面的方式,分配给Y的语句恰好包含了所有单独的步骤。这是上面唯一需要执行的语句,以获取我分配给Y的运算符。如果您愿意,可以单独执行每个步骤并将每个中间结果分配给某个名称。这取决于你是否希望它们用于任何其他目的。

restart:
dsol := dsolve({diff(y(t), t) = y(t)*t, y(1) = 1}, y(t), series, t = 1, order = 5):
peq := convert( dsol, polynom ):
p := eval( y(t), peq ):
Y := unapply( p, t ):
Y(3);

                                 19