我正在用Qt(C ++)开发一个模拟软件,它必须为由矩阵A,B,C,D定义的SISO动态系统输入(u),并根据初始值得到输出(y)州(x0):
dx = Ax + Bu
y = Cx + Du
这种东西可以通过使用Matlab的函数LSIM来完成...... 我知道我可以定义微分方程并用数值求解它们,但是定义它们并以正确的顺序求解它们有点棘手,所以,我想知道是否有人知道是否有现有的C ++库或C ++示例能做到这一点......
从这里编辑......
我正在开发我的Qt应用程序作为一个独立的应用程序,没有Matlab ......所以我认为如果我有一个2状态系统用于系统的一个状态,有一种方式我有这样的东西:
double y(double A[2][2], double B[2], double C[2], double D, double XAct[2], double XNext[2], double u)
但是没关系,我发现我可以这样做:
X[k+1] = A*X[k] + B*u[k]
y[k] = C*X[k] + D*u[k]
但是我担心时间戳所以...我不知道这是否适用于以数组作为输入的系统...我想是的但是......
答案 0 :(得分:0)
查看Gnu科学图书馆(GSL),它可以为您解决差异问题。我有类似的问题,这就是我用过的东西
答案 1 :(得分:0)
您可以使用C(++)中的方程式或任何语言,但A,B,C,D必须来自离散状态空间模型:Ad,Bd,Cd,Dd。
X[k+1] = A*X[k] + B*u[k]
y[k] = C*X[k] + D*u[k]
输入数据的采样时间(Ts)将用于离散连续状态空间模型。 MATLAB具有c2d功能。
sys = ss(A,B,C,D);
sysd = c2d(sys,Ts);
Ad = sysd.A;
Bd = sysd.B;
Cd = sysd.C;
Cd = sysd.D;
一旦你有了Ad,Bd,Cd,Dd,就可以使用以下公式在C(++)代码中使用它们:
X[k+1] = Ad*X[k] + Bd*u[k]
y[k] = Cd*X[k] + Dd*u[k]