конечно-разностные методы в python - PullRequest
1 голос
/ 02 февраля 2020

Я пытаюсь вычислить g (x_ (i + 2)) из значений g (x_ (i + 1)) и g (x_i), i является целым числом, предполагая, что I (x) и s (x) являются гауссовской функцией. Если мы знаем x_i = 100, то при суммировании от 0 до 100 я не знаю, как обрабатывать g (x_i) с индексом в python, зная первое и второе значение, мы можем найти третье значение, после n цикла, мы можем найти n-е значение.

Уравнение: enter image description here

код:

import numpy as np
from matplotlib import pyplot as p
from math import pi

def f_s(x, mu_s, sig_s):
    ss = -np.power(x - mu_s, 2) / (2 * np.power(sig_s, 2))
    return np.exp(ss) / (np.power(2 * pi, 2) * sig_s)

def f_i(x, mu_i, sig_i):
    ii = -np.power(x - mu_i, 2) / (2 * np.power(sig_i, 2))
    return np.exp(ii) / (np.power(2 * pi, 2) * sig_i)

# problems occur in this part
def g(x, m, mu_s, sig_s, mu_i, sig_i):
    for i in range(1, m):                 # specify the number x, x_1, x_2, x_3 ......X_m
        h = (x[i + 1] - x[i]) / e
        for n in range(0, x[i]):          # calculate summation
            sum_f = (f_i(x[i], mu_i, sig_i) - f_s(x[i] - n, mu_s, sig_s) * g_x[n]) * np.conj(f_s(n + 
x[i], mu_s, sig_s))
        g_x[1] = 1       # initial value
        g_x[2] = 5
        g_x[i + 2] = h * sum_f + 2 * g_x[i + 1] - g_x[i]

    return g_x[i + 2]


x = np.linspace(-10, 10, 10000)
e = 1
d = 0.01
m = 1000
mu_s = 2
sig_s = 1
mu_i = 1
sig_i = 1

p.plot(x, g(x, m, mu_s, sig_s, mu_i, sig_i))
p.legend()
p.show()

результат: I (x) и s (x) enter image description here

...