开发者社区> 问答> 正文

将ODE从Maple转换为python

如何将以下以Maple编写的代码转换为Python框架

ode:=diff(y(x),x)= #=An equation
sol:=dsolve([ode, y(1)=0.73}, numeric, output=listprocedure)
fy:=eval(y(x),sol);nn:=100
for x from 1 to nn do fy(5.1*x/nn) end do;

我找不到类似于上述程序的代码。谢谢您的帮助

展开
收起
祖安文状元 2020-02-22 17:48:01 1422 0
2 条回答
写回答
取消 提交回答
  • Maple可以使用命令将代码转换为Python CodeGeneration:-Python

    2020-03-14 14:24:59
    赞同 展开评论 打赏
  • Maple可以使用命令将代码转换为Python CodeGeneration:-Python。然后,您可以将代码作为过程编写并转换。问题是,如果您尝试这样做,将会遇到Maple无法识别的麻烦,例如dsolve,它只会逐字地将那些函数调用复制到Python。也就是说,我不确定是否可以让Maple自动执行此操作。

    这是我未成功的尝试,无视for令人烦恼的循环,因为

    myproc := proc(ode,ic)
        local sol,fy,out,i,nn;
        sol := dsolve({ode,ic},numeric,output=listprocedure);
        nn := 100;
    
        fy := eval(y(x),sol);
        out := [];
    
        for i to nn do;
            out := [op(out),fy(5.1*i/nn)];
        end do;
        out;
    end proc:
    
    ## Example of use:
    ## myproc(diff(y(x),x) = 1/x,y(1) = 0.73);
    
    ## Convert to Python
    CodeGeneration:-Python(myproc);
    Warning, the function names {dsolve, eval, y} are not recognized in the target language
    #def myproc (ode, ic):
    #    sol = dsolve(set([ode,ic]), numeric, output == listprocedure)
    #    nn = 100
    #    fy = eval(y(x), sol)
    #    out = []
    #    for i in range(1, nn + 1):
    #        out = [tuple(out),fy(0.51e1 * i / nn)]
    #    return(out)
    
    2020-02-22 17:48:12
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载