不同阻尼比下的相图

image

image


import numpy as np
import matplotlib.pyplot as plt

def second_order_system_response(omega_n, zeta, t):
    """
    计算二阶系统的响应。
    """
    if zeta == 1:
        return np.exp(-omega_n * t) * (1 + omega_n * t)
    elif zeta > 1:
        s1 = -omega_n * (zeta + np.sqrt(zeta**2 - 1))
        s2 = -omega_n * (zeta - np.sqrt(zeta**2 - 1))
        return np.exp(s1 * t) / (2 * np.sqrt(zeta**2 - 1)) * ((s2 - s1) * np.exp((2 * np.sqrt(zeta**2 - 1)) * t) + s2 + s1)
    else:
        wd = omega_n * np.sqrt(1 - zeta**2)
        return np.exp(-zeta * omega_n * t) * (np.cos(wd * t) + zeta / np.sqrt(1 - zeta**2) * np.sin(wd * t))

def plot_phase_trajectories(omega_n=1):
    """
    绘制不同阻尼比下的二阶系统相轨迹,分为三个子图。
    """
    t = np.linspace(0, 10, 1000)
    fig, axes = plt.subplots(1, 3, figsize=(15, 5))

    # 子图 1:低阻尼比
    zetas_low = [0.2, 0.5,0.7]
    for zeta in zetas_low:
        x = second_order_system_response(omega_n, zeta, t)
        v = np.diff(x) / np.diff(t)
        axes[0].plot(x[:-1], v, label=f'ζ = {zeta}')
    axes[0].set_title('Low Damping Ratio')
    axes[0].set_xlabel('Position (x)')
    axes[0].set_ylabel('Velocity (v)')
    axes[0].legend()
    axes[0].grid(True)

    # 子图 2:临界阻尼和过阻尼
    zetas_mid = [ 1, 1.2,1.5]
    for zeta in zetas_mid:
        x = second_order_system_response(omega_n, zeta, t)
        v = np.diff(x) / np.diff(t)
        axes[1].plot(x[:-1], v, label=f'ζ = {zeta}')
    axes[1].set_title('Medium to High Damping Ratio')
    axes[1].set_xlabel('Position (x)')
    axes[1].set_ylabel('Velocity (v)')
    axes[1].legend()
    axes[1].grid(True)

    # 子图 3:无阻尼
    zeta = 0
    x = second_order_system_response(omega_n, zeta, t)
    v = np.diff(x) / np.diff(t)
    axes[2].plot(x[:-1], v, label=f'ζ = {zeta}')
    axes[2].set_title('No Damping')
    axes[2].set_xlabel('Position (x)')
    axes[2].set_ylabel('Velocity (v)')
    axes[2].legend()
    axes[2].grid(True)

    plt.tight_layout()
    plt.show()

plot_phase_trajectories()
posted @ 2024-11-08 15:09  redufa  阅读(80)  评论(0)    收藏  举报