2015-03-02 58 views
2

这可能是非常基本的,但我似乎无法弄清楚:我试图直接将过程的输出用作函数。该程序是预制的,即MAPLE中的dsolve选项。具体而言,我想说如何直接使用MAPLE过程的返回作为函数

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->无论如何,但这是不雅的。我怎样才能解决这个问题? 谢谢

回答

2

是的,您正在从dsolve呼叫回来一个形式为y(t)=<some series>的等式。

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 
+0

这是绝对清楚,100%完美。非常感谢! – 2015-03-02 19:23:45