Конечно-разностная схема в python

#python #finite-difference

Вопрос:

В python я пытаюсь разработать 2-D центральные коэффициенты конечно-разностной схемы (лексикографические). Мой код таков

 import numpy as np  import scipy as sp  x = np.linspace(0, 9, num=10)  nx = len(x)  hx = (x[-1] - x[0])/(nx - 1)  one_x = np.ones((nx, 1))  x_coeffs = np.hstack((one_x, one_x))  x_coeffs = np.insert(x_coeffs, 1, -2, axis=1)  # So far so good, then carry on  x_diff = spdiags(x_coeffs.transpose(), np.asarray([0, 1, 2]), nx-2, nx)  nx_id = identity(nx)  Dx = np.kron(nx_id, x_diff.transpose())  Dx = 1/hx*Dx  

Давайте попробуем это на фиктивном примере.

 x = np.linspace(0, 4, num=5) f = np.power(x, 2) dfdx = Dx * f  

Но результат для этого фиктивного примера таков (array([ -4., -6., -8., -10.]) . Есть какие-нибудь идеи о том, что может пойти не так?

Комментарии:

1. «Но результат для этого фиктивного примера таков (array([ -4., -6., -8., -10.]) «. Почему этот результат неверен? Как именно, по вашему мнению, должен быть результат вместо этого? Почему?

2. Результат должен быть [0, 2, 4, 6, 8].

3. Что происходит, когда вы пытаетесь отладить код? Где поведение кода в первую очередь отличается от того, что вы ожидаете?

4. Это мой вопрос. Все еще нужно кое-что отладить. Но, где?

5. Что ж, сначала ты должен попытаться выяснить это сам. Вы делаете это, сначала аргументируя себя тем, какие значения должна содержать каждая переменная в вашей программе на каждом этапе процесса, а затем используя отладчик, чтобы проверить, каковы эти значения на самом деле на каждом шаге.