范德波尔方程可视化

Van der Pol方程如下所示
d x d t = y d y d t = − x + ( 1 − x 2 ) y \begin{equation} \begin{aligned} \frac{dx}{dt} & = y \\ \frac{dy}{dt} & = -x+(1-x^2)y \end{aligned} \end{equation} dtdxdtdy=y=x+(1x2)y

相应的程序如下

为了观看长期趋势,将仿真时间定为100s

# 此脚本用以绘制Van der Pol微分方程的方向场

# 必要的包
import math
import matplotlib.pyplot as plt
import numpy as np 
# 这里的x y应该是泛型的,既可以是标量也可以是向量也可以是矩阵
def diff_x(x, y):
    return y

def diff_y(x, y):
    return -x + (1 - x**2)*y;


x_cord = np.linspace(-3, 3, 10);
y_cord = x_cord;

X, Y = np.meshgrid(x_cord, y_cord);
U = diff_x(X, Y);
V = diff_y(X, Y);
# 归一化
N = np.sqrt(U ** 2 + V ** 2);
U = U / N;
V = V / N;

plt.quiver(X, Y, U, V, color='r');

# 画一个解的曲线
x0 = np.array([-3,-2.5, -2.7, 3, 3, -0.1]); 
y0 = np.array([-3, 3, 3, 3, -3, 0]);

delta_t = 0.05;
time = np.arange(0, 100+delta_t, delta_t);
x_sol = np.zeros([len(x0), len(time)]); # 5行 几百列
y_sol = np.zeros([len(y0), len(time)]);


for i in range(len(time)):
    if i == 0:
        x_sol[:,i] = x0;
        y_sol[:,i] = y0;
    else:
        x_sol[:,i] = x_sol[:,i-1] + diff_x(x_sol[:,i-1], y_sol[:,i-1]) * delta_t;
        y_sol[:,i] = y_sol[:,i-1] + diff_y(x_sol[:,i-1], y_sol[:,i-1]) * delta_t;
    
for j in range(len(x0)):    
    plt.plot(x_sol[j,:], y_sol[j,:]);
plt.title(r"$Direction\  Field\  of\  Van\  der\  Pol\  system$");
plt.xlabel(r"$x$");
plt.ylabel(r"$y$");

在这里插入图片描述

Van der Pol方程是一个非线性方程, 对于非线性方程, 我们目前还没有通用的工具分析, 但如果把比例尺放大, 只在平衡点附近观察, 更细致地观看平衡点(0,0)附近, 同时缩小仿真仿真的时间,我们会发现平衡点附近该方程的行为有点像线性系统中的spiral source 也就是二阶线性系统的不稳定焦点
这也给了我们一个启示, 即可以在平衡点附近, 在较小的时间间隔内, 把非线性系统看做线性系统
以下就是系统在平衡点附近的行为
仿真时间减小为10s
x y坐标缩小到±0.3

代码如下

x_cord = np.linspace(-0.3, 0.3, 10);
y_cord = x_cord;

X, Y = np.meshgrid(x_cord, y_cord);
U = diff_x(X, Y);
V = diff_y(X, Y);
# 归一化
N = np.sqrt(U ** 2 + V ** 2);
U = U / N;
V = V / N;

plt.quiver(X, Y, U, V, color='r');


# 画一个解的曲线
x0 = np.linspace(-0.001,0.001, 5); 
y0 = x0;

delta_t = 0.005;
time = np.arange(0, 10.5+delta_t, delta_t);
x_sol = np.zeros([len(x0), len(time)]); # 5行 几百列
y_sol = np.zeros([len(y0), len(time)]);


for i in range(len(time)):
    if i == 0:
        x_sol[:,i] = x0;
        y_sol[:,i] = y0;
    else:
        x_sol[:,i] = x_sol[:,i-1] + diff_x(x_sol[:,i-1], y_sol[:,i-1]) * delta_t;
        y_sol[:,i] = y_sol[:,i-1] + diff_y(x_sol[:,i-1], y_sol[:,i-1]) * delta_t;
    
for j in range(len(x0)):    
    plt.plot(x_sol[j,:], y_sol[j,:]);
plt.title(r"$Direction\  Field\  of\  Van\  der\  Pol\  system$");
plt.xlabel(r"$x$");
plt.ylabel(r"$y$");

如图所示
在这里插入图片描述
这个就很像二阶系统的不稳定焦点

如果(任一)柯西序列收敛,则蕴含完备性。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值