フィルターのクリア

Euler method with state space model

46 ビュー (過去 30 日間)
Michael Brehmer
Michael Brehmer 2020 年 12 月 10 日
回答済み: Michael Brehmer 2020 年 12 月 11 日
Hello,
Im trying solve an equation in form of a state space model with Eulers (forward) method.
My input u is a vector of accelerations that I have given on discrete points (ax). As output I expect a scalar for each discrete point on which eulers method is calculated.
What I did so far:
generate a PTD2 with those values:
s=tf('s');
pt2 = s/((s+0.1)*(s+4));
SYS = ss(pt2);
A = SYS.A;
B = SYS.B;
C = SYS.C;
D = SYS.D;
I created a linspaced timevector t_i that is equally distributed over all my discrete points. To make it easier to read I extracted some values of the real data:
% ax = traj.ax(1:10);
% you can use this vector of accelerations if you want
ax = [-0.7412; -0.749 ;-0.7525;-0.7508;-0.7443;-0.7331;-0.7178;-0.699;-0.6779;-0.6540];
t_i = linspace(1, 5, 10);
h = diff(t_i(1:2)); % calc step size
x = t_i(1) : h : t_i(end); % the range of x - not sure about this
y = zeros(length(x),2); % allocate the result y
u= ax; %make clear that ax is the input
Now I want to solve Eulers method as state space model:
for i=1:10-1
dx = A*x(i) + B*u(i);
x_k1 = x_k + dx*h; %x_k1 is x_k+1
x_k = x_k1;
% y should be a scalar output in my case, since I want to get weighted accelerations as output - but I can only compile if I put the (i,:) right now.
y(i,:) = C*x_k;
end
Is it possible to use x as a state vector of the ptd2 inside the eulers method? how should I define the range for x in this case, do I even need it?
I wrote this with the help of some code I found in the forum to differential equation problems, and tried to expand it to a state space model but im a bit lost right now. I tricked with the matrices for y, since I expect an output that is a scalar for each input but I have no idea how to achieve this.
Is it even possible to solve a state space model with this euler method?

採用された回答

Michael Brehmer
Michael Brehmer 2020 年 12 月 11 日
Hello, I figured it out by my own.
I had some major errors in the definition of x_k and y.
You have to initialize x_k as standing vector, that is updated in each step of the iteration
x_k = [0;0];
for i=1:N
dx = A*x_k + B*u(i);
x_k1 = x_k + dx*h;
y(i) = C*x_k1;
x_k = x_k1;
end

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeAssembly についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by