在python中用欧拉法逼近正弦波
Approximating Sin wave with euler method in python
您好,我正在尝试使用 python 中的欧拉方法来绘制正弦波函数 sin(A)。
使用以下算法:
定义 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
4克。结束
在我的例子中,我正在逼近函数 sin(A),所以我的函数是 sin(A) 的导数,即 cos(A)。
我已经在下面的代码中实现了它
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) 都会趋向于零,但永远不会为负。它必须是负的才能使正弦波函数下降。所以它可以振荡。我的错误结果是这里的图片:
我一定是在做一些非常愚蠢的事情,但我想不通。
感谢任何帮助。
您正在求解 ODE
y'(t) = cos(y(t))
在 y=pi/2
处有一个吸引人的稳定点,您可以达到 t=10
用于所有图形目的,之后解是常数。正如您在图表中所看到的那样。
您需要一个系统
x' = -y
y' = x
或在有限的时间间隔内
y' = sqrt(1-y^2)
或者在一个简单的集成中
y'(t) = cos(t).
您好,我正在尝试使用 python 中的欧拉方法来绘制正弦波函数 sin(A)。
使用以下算法:
定义 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
4克。结束
在我的例子中,我正在逼近函数 sin(A),所以我的函数是 sin(A) 的导数,即 cos(A)。
我已经在下面的代码中实现了它
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) 都会趋向于零,但永远不会为负。它必须是负的才能使正弦波函数下降。所以它可以振荡。我的错误结果是这里的图片:
我一定是在做一些非常愚蠢的事情,但我想不通。
感谢任何帮助。
您正在求解 ODE
y'(t) = cos(y(t))
在 y=pi/2
处有一个吸引人的稳定点,您可以达到 t=10
用于所有图形目的,之后解是常数。正如您在图表中所看到的那样。
您需要一个系统
x' = -y
y' = x
或在有限的时间间隔内
y' = sqrt(1-y^2)
或者在一个简单的集成中
y'(t) = cos(t).