преобразование ODE из клена в 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;

Я не смог найти код, аналогичный приведенной выше программе. спасибо за помощь


person Ethan    schedule 20.08.2017    source источник
comment
sympy для символических docs.sympy.org/1.0/modules/solvers/ode.html scipy, numpy для числовых решателей с docs.sympy .org/1.0/modules/utilities/ для преобразования символических выражений sympy для числовой оценки в функции.   -  person f5r5e5d    schedule 21.08.2017
comment
у вас есть синтаксическая ошибка в вашем коде клена. ode:=diff(y(x),x)= неполный.   -  person Nasser    schedule 23.08.2017
comment
Да, но я написал, #=уравнение перед этой строкой   -  person Ethan    schedule 23.08.2017


Ответы (1)


Можно преобразовать код Maple в Python с помощью команды CodeGeneration:-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)
person Therkel    schedule 26.08.2017
comment
Да, генерация кода отличается, но я написал правильную форму и прокомментирую ее как ответ здесь завтра. Мой код не преобразуется в код Maple в Python, это просто новый написанный код. - person Ethan; 27.08.2017