Привет. Я пытаюсь использовать метод Эйлера в Python для построения волновой функции sin (sin).
Используя следующий алгоритм:
определить f (t, y)
входные t0 и y0.
- введите размер шага, h и количество шагов, n.
для j от 1 до n сделайте:
4a.m = f (t0, y0)
4b.y1 = y0 + h ∗ m
4c.t1 = t0 + h
4d.Выведите t1 и y1
4e.t0 = t1
4f.y0 = y1
4g.end
в моем случае я аппроксимирую функцию sin (A), поэтому моя функция является производной от sin (A), которая равна cos (A).
Iмы реализовали это в коде, как показано ниже
def dSindt(A):
dSindt = cos(A) ;
return dSindt;
%matplotlib inline
import matplotlib.pyplot as plt
A0 = 0
t0 = 0;
tf = 3600
del_t = .1;
num_steps = int((tf - t0)/del_t);
A_mesh = [0]*(num_steps + 1);
time_mesh = [0]*(num_steps + 1);
A_mesh[0] = A0;
time_mesh[0] = t0;
for i in range(num_steps):
A_mesh[i+1] = A_mesh[i] + dTindt(A_mesh[i])*del_t
time_mesh[i+1] = time_mesh[i] + del_t;
plt.plot(time_mesh,A_mesh,color='b');
plt.title('Approx. Sin Wave');
plt.xlabel('Time (min)');
plt.ylabel('A')
Кажется, что независимо от того, что я делаю с размером шага, производная cos (A) движется к нулю, но никогда не становится отрицательной.Это должно быть отрицательным, чтобы заставить синусоидальную функцию понижаться.так что это может колебаться.Мои ошибочные результаты приведены здесь:
Я, должно быть, делаю что-то действительно глупое, но я не могу понять это.
Любая помощь приветствуется.