フィルターのクリア

Simulating linear model, can't understand error

1 回表示 (過去 30 日間)
Valeriy
Valeriy 2024 年 4 月 16 日
コメント済み: Valeriy 2024 年 4 月 17 日
I have a linear system called "ss" identified using "velocity", "position", and "time_sec_" vectors imported from a CSV file.
Used time interval of 0.02, delay of 0.4, included disturbance.
The 3rd order system looks like this:
>> [A,B,C,D,K,x0,dA,dB,dC,dD,dx0] = idssdata(ss)
A =
-0.2101 -3.0985 -0.8638
2.5007 -4.9519 -11.9558
0.1966 0.4627 8.4746
B =
0.0056
-0.0048
-0.0562
C =
31.8116 -0.8537 0.0245
D =
0
K =
1.3349
-32.7004
40.9704
x0 =
-0.0165
-0.0724
0.0023
dA =
1.0e+14 *
1.2124 0.1556 0.1185
2.6893 1.5376 1.1212
2.1587 1.5017 1.2671
dB =
1.0e+11 *
0.2318
4.1463
5.7636
dC =
1.0e+14 *
1.0754 0.0817 0.0737
dD =
0
dx0 =
1.0e+14 *
0.0877
1.6986
2.8014
I want to simulate the system. It's SISO (velocity -> position) but because it's third order I have to duplicate the velocity three times, one for each system state variable.
U = velocity * ones(1, 3)
Here is what I am calling lsim with:
>> size(U)
ans =
2415 3
>> size(time_sec_)
ans =
2415 1
I attempt to simulate the system:
lsim(ss, U, time_sec_)
Matlab returns the following error:
Error using DynamicSystem/lsim
When simulating the response to a specific input signal, the input
data U must be a matrix with as many rows as samples in the time
vector T, and as many columns as input channels.
This error message doesn't make sense because:
  • U has as many rows as time samples in time_sec_ vector
  • U has as many columns as rows in "B" matrix in the model (third order model, B has 3 rows)
  • time_sec_ vector has one row for each time sample
  • Time samples are absolute values increasing in time, in seconds

採用された回答

Paul
Paul 2024 年 4 月 16 日
編集済み: Paul 2024 年 4 月 17 日
Hi Valeriy,
Because the B matrix has one column, the input to the system is a scalar. Hence the U input to lsim should have one column and as many rows as time samples. Each entry in U is the scalar input to the the system at the corresponding time sample in time_sec_
Also, I suggest not using ss as a variable name. Doing so overrides the same-named functions in a couple of different toolboxes.
which ss -all
/MATLAB/toolbox/control/ctrlmodels/@ss/ss.m % ss constructor /MATLAB/toolbox/control/ctrlmodels/@DynamicSystem/ss.m % DynamicSystem method /MATLAB/toolbox/ident/ident/@idParametric/ss.m % idParametric method /MATLAB/toolbox/mpc/mpc/@mpc/ss.m % mpc method /MATLAB/toolbox/shared/controllib/engine/@StaticModel/ss.m % StaticModel method
  1 件のコメント
Valeriy
Valeriy 2024 年 4 月 17 日
This is the first thing I tried but it didn't work. I finally realized that the first error message I got was complaining about the time vector, because it was the original time samples which were not completely evenly spaced.
It finally succeeded when I generated the time samples synthetically, and used that as the time input to lsim:
linspace(7, 64, 29000)

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeResponse Computation and Visualization についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by