⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pendmode.cpp

📁 matlab 专业设计 源于课本的原文件 适合于编程人员
💻 CPP
字号:
// Model: pend_model 
// Sampling period = 0.010000 seconds
// Generated at 06:55:29 on 17-Mar-2003

class pend_model
{
public:
    // n = #states, m = #outputs, r = #inputs
    enum {n = 4, m = 3, r = 1};

    void Initialize(const double x0[n]);
    void Update(const double u[r]);
    const double* Output(void) { return y; }
    const double* State(void) { return x; }

private:
    static const double a[n*n], b[n*r], c[m*n], d[m*r];
    double x[n], y[m];
};

const double pend_model::a[n*n] =
{
     1.004530917e+000,  0.000000000e+000,  1.001509850e-002,  0.000000000e+000,
    -1.130852937e-004,  1.000000000e+000, -3.768372393e-007,  1.000000000e-002,
     9.068671693e-001,  0.000000000e+000,  1.004530917e+000,  0.000000000e+000,
    -2.263412261e-002,  0.000000000e+000, -1.130852937e-004,  1.000000000e+000
};

const double pend_model::b[n*r] =
{
    -2.313229468e-003,
     3.081305201e-004,
    -2.320207355e-001,
     3.083046783e-002
};

const double pend_model::c[m*n] =
{
     1.000000000e+000,  0.000000000e+000,  0.000000000e+000,  0.000000000e+000,
     0.000000000e+000,  1.000000000e+000,  0.000000000e+000,  0.000000000e+000,
     0.000000000e+000,  0.000000000e+000,  0.000000000e+000,  0.000000000e+000
};

const double pend_model::d[m*r] =
{
    -3.848408621e-004,
     5.133768100e-005,
     1.000000000e+000
};

void pend_model::Initialize(const double x0[n])
{
    int i;
    
    // Initialize x
    for (i=0; i<n; i++)
        x[i] = x0[i];
}

void pend_model::Update(const double u[r])
{
    int i, j;
    double x_next[n];
    
    // Evaluate x_next = A*x + B*u
    for (i=0; i<n; i++)
    {
        x_next[i] = 0;
        for (j=0; j<n; j++)
            x_next[i] += a[i*n+j]*x[j];
            
        for (j=0; j<r; j++)
            x_next[i] += b[i*r+j]*u[j];
    }
    
    // Evaluate y = C*x + D*u
    for (i=0; i<m; i++)
    {
        y[i] = 0;
        for (j=0; j<n; j++)
            y[i] += c[i*n+j]*x[j];
            
        for (j=0; j<r; j++)
            y[i] += d[i*r+j]*u[j];
    }
    
    // Update x to its next value
    for (i=0; i<n; i++)
        x[i] = x_next[i];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -