Как использовать дифференцирование в функции в Sage - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь создать функцию, которая принимает функцию в качестве входных данных и возвращает кортеж с функцией и ее производной. Во всех моих попытках производная функции оценивается как ноль или единица, даже если она является символом c: я упростил код, чтобы он возвращал только его производную:

t = var("t")
q = function("q")(t)

print("Expected",diff(q,t))  # return diff(q(t), t) as expected

Gamma(a) = diff(a)
print("Unexpected_v1 ",Gamma(q))  # return 1

Gamma(a) = diff(a,a.arguments()[0]) 
print("Unexpected_v2 ", Gamma(q)) # return 1

Gamma(a,b) = diff(a,b)
print("Unexpected_v3 ", Gamma(q,t)) # return 0

Как этого достичь

1 Ответ

0 голосов
/ 21 марта 2020

Я не совсем уверен, чего вы пытаетесь достичь. Но, во всяком случае, ваша строка

Gamma(a) = diff(a)

опасна, потому что это недопустимо Python (a не определено). Происходит следующее: Sage «готовит» его:

sage: preparse('Gamma(a) = diff(a)')
'__tmp__=var("a"); Gamma = symbolic_expression(diff(a)).function(a)'

Итак, вы можете видеть, что a теперь является символической c переменной, и поэтому она имеет переменную по умолчанию a, поэтому производная очевидно, будет 1, и вы назначили Gamma(a), чтобы всегда возвращать это. Другие будут вести себя аналогично.

Если вы уверены, что ваш ввод всегда будет правильным, вам следует https://sagecell.sagemath.org/?z=eJxLSU1T8K10K81L1kjTtOLlUgCCotSS0qI8hTSdlMy0NKAwLxcvV4mCrUJZYpGGUokSkF8I5KUB9ZRk5udpKBUqaWqUAEWh5hRqAgD_FBee&lang=sage&interacts=eJyLjgUAARUAuQ==.

def MyFunc(f):
    return f,diff(f)

t = var("t")
q = function("q")(t)
MyFunc(q)

Это супер обобщенно c, хотя, так это может быть слишком много для ваших целей. Надеюсь, это направит вас в правильном направлении.

...