MATLAB在C ++中的函数LSIM

时间:2011-07-07 02:40:06

标签: c++ matlab

我正在用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]

但是我担心时间戳所以...我不知道这是否适用于以数组作为输入的系统...我想是的但是......

2 个答案:

答案 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]