【问题标题】:converting ODE from maple to python将 ODE 从 maple 转换为 python
【发布时间】:2017-08-20 18:49:02
【问题描述】:

如何将下面用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;

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

【问题讨论】:

标签: python ode maple numerical-analysis


【解决方案1】:

可以使用命令CodeGeneration:-Python 让 Maple 将代码转换为 Python。然后,您可以将代码编写为过程并进行转换。问题是,如果您尝试这样做,您会遇到 Maple 无法识别的麻烦,例如dsolve 在 Python 中,它只会将这些函数调用逐字复制到 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)

【讨论】:

  • 是的,代码生成不同,但我写了正确的表格,我明天将其评论为答案。我的代码不是将maple代码转换成python,它只是一个新的编写代码
【解决方案2】:

首先,我纠正了正确的括号

ode := diff(y(x), x) = 1/x

sol := dsolve({ode, y(1) = 0.73}, numeric, output = listprocedure):

然后

fy := eval(y(x), sol);nn := 100; for x to nn do fy(5.1*x/nn);end do;

带有代码生成包

与(代码生成):

我得到的是这个错误信息:

«错误,(在 CodeGeneration:-IssueError 中)无法翻译过程中定义的模块或过程»

如果我单击该链接,我会得到一个网页,上面说没有关于此的网页帮助。链接是here

我将研究它并尝试回答这个问题。

【讨论】:

    猜你喜欢
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多