필터 지우기
필터 지우기

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 CenterFile Exchange에서 Assembly에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by