Euler method with state space model

Illustration
trastri - 2020-12-16T10:41:59+00:00
Question: Euler method with state space model

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? 

Expert Answer

Profile picture of Neeta Dsouza Neeta Dsouza answered . 2025-11-20

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


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!