近似与在python欧拉方法正弦波

问题描述 投票:0回答:1

嗨,我试图用欧拉方法在Python绘制一个正弦波函数sin(A)。

使用下面的算法:

  1. 定义F(T,y)的
  2. 输入t0和Y0。
  3. 输入步长,h和步数n。
  4. 对于j从1到n做: 4A。 M = F(T 0,Y0) 4B。 Y1 = Y0 + H * M 4C。 T1 = T0 + H 4D。打印t1和Y1 4E。 T0 = T1 4F。 Y0 = Y1 4克。结束

在我的情况,我逼近函数sin(A),所以我的功能就是罪(A)的deriviative这是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)向零头,但从来没有得到为负。它为负,使正弦波功能下降。因此它可以振荡。我erroneuos结果是这里拍照:enter image description here

我必须做一些非常愚蠢的,但我不明白。

任何帮助表示赞赏。

python numpy ode approximation
1个回答
2
投票

您解决ODE

y'(t) = cos(y(t))

其在y=pi/2的吸引稳定点,你达到t=10所有图形宗旨,经过该解决方案是恒定的。正如你在图中得到。

您需要用一个系统

x' = -y
y' =  x

或在一个有限的时间间隔

y' = sqrt(1-y^2)

或在一个简单的集成

y'(t) = cos(t).
© www.soinside.com 2019 - 2024. All rights reserved.