如何在Sage中创建具有给定导数的抽象函数?

时间:2014-05-21 15:47:54

标签: symbolic-math sage

我想要具有给定衍生物的抽象$ f $函数。但是,当我试图将其替换为D [0](f)(t)时,Sage说:

NameError: name 'D' is not defined



    R.<t,u1,u2> = PolynomialRing(RR,3,'t' 'u1' 'u2') 
    tmp1 = r1*k1*u1-(r1/k1)*k1^2*u1^2-r1*b12/k1*k1*u1*k2*u2

    f=function('f',t)
    a=diff(f)
    a.substitute_expression((D[0](f)(t))==tmp1)

tmp1.integral()不能胜任这项工作。我也无法替代积分,虽然没有给出任何警告。

%var u10, u20,r1,r2,k1,k2,b12,b21,t
u1=function('u1',t)
u2=function('u2',t)
tmp1 = r1*k1*u1-(r1/k1)*k1^2*u1^2-r1*b12/k1*k1*u1*k2*u2
tmp2 = r2*u2*k2-r2/k2*k2^2*u2^2-((r2*b21)/k2)*u1*u2*k1*k2    
v1=integral(tmp1,t)
v2=integral(tmp2,t)
sep1=tmp1.substitute_expression(u1==v1,u2==v2)
sep2=tmp2.substitute_expression(u1==v1,u2==v2)
trial=diff(sep1,t)
trial.substitute_expression((integrate(-b12*k2*r1*u1(t)*u2(t) - k1*r1*u1(t)^2 +    k1*r1*u1(t), t))==v1,  (integrate(-b12*k2*r1*u1(t)*u2(t) - k1*r1*u1(t)^2 + k1*r1*u1(t), t))==v2)

现在让我们回到原始版本:

d1=diff(tmp1,t)
d1.substitute_function((D[0](u1)(t)),tmp1)



Error in lines 13-13
Traceback (most recent call last):
  File "/projects/b501d31c-1f5d-48aa-bee3-73a2dcb30a39/.sagemathcloud/sage_server.py", line 733, in execute
    exec compile(block+'\n', '', 'single') in namespace, locals
 File "", line 1, in <module>
NameError: name 'D' is not defined

1 个答案:

答案 0 :(得分:0)

我不知道这是否真的是您想要的。但是它至少提供了一些相似之处。

sage: def myfunc(self, *args, **kwds): return e^(args[0])^2
sage: foo = function('foo', nargs=1, tderivative_func=myfunc)
sage: foo(x)
foo(x)
sage: foo(x).diff(x)
e^(x^2)
sage: foo(x).diff(x,3)
4*x^2*e^(x^2) + 2*e^(x^2)

您需要非常仔细地阅读function(通过键入function?得到的文档)才能很好地使用它,尤其是评论

  

请注意,自定义方法必须是实例方法,即期望      符号函数的实例作为第一个参数。

该文档非常微妙,可以进行一些改进。