Числовая производная высшего порядка Python - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь реализовать числовую производную более высокого порядка, используя рекурсию. Я не вижу, что не так с моим кодом.

Чтобы уточнить, я хочу вычислить dy^n/dx^n.

import numpy as np
import matplotlib.pyplot as plt

def derivative(x,y,n):
    if(n==1):
        return np.gradient(y,x)
    else:
        return derivative(x,y,n-1)

a=0
b=10
N_points=10000

x=np.linspace(a,b,N_points)
y=np.cos(x)

plt.figure()
plt.plot(x,y,label="f(x)")
for n in range(1,8):
    plt.plot(x,derivative(x,y,n),label="fprime(x)")
plt.legend()
plt.title("function and derivative")

Я улучшил свой код до

import numpy as np
import matplotlib.pyplot as plt

def derivative(x,y,n):
    if(n==1):
        return np.gradient(y,x)
    else:
        return np.gradient(derivative(x,y,n-1),x)

a=0
b=10
N_points=10000

x=np.linspace(a,b,N_points, dtype=float)
y=np.cos(x, dtype=float)
plt.figure()
plt.plot(x,y,label="f(x)")

n_max=7
for n in range(1,n_max):
    yprime=derivative(x,y,n)
    yprime[0:n]=yprime[n]
    yprime[-n:]=yprime[-n-1]

    plt.plot(x,yprime,label=f"fprime{n}(x)")


plt.legend()
plt.title("function and derivative")

Теперь, для n_max<=5 все выглядит так, как должно. Но для n_max больше, чем это, производные начинают выглядеть очень шумно. Что происходит? И может ли это быть проблемой с типами данных?

First 4 derivatives look fine

After that they look noisy

1 Ответ

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

Если вы хотите получить производную от y ^ n по x, это код: (РЕДАКТИРОВАТЬ: добавлено пропущено x)

def derivative(x,y,n):
    if(n==1):
        return np.gradient(y,x)
    else:
        return np.gradient(derivative(x,y,n-1),x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...