如何直接将 MAPLE 程序的 return 作为函数使用
How can I use the return of a MAPLE procedure as a function directly
这可能是非常基本的,但我似乎无法理解:我试图将过程的输出直接用作函数。 Procedure是预制的,即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-> whatever,但这是不雅的。我该如何解决这个问题?
谢谢
是的,您正在从 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
这可能是非常基本的,但我似乎无法理解:我试图将过程的输出直接用作函数。 Procedure是预制的,即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-> whatever,但这是不雅的。我该如何解决这个问题? 谢谢
是的,您正在从 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