# Implement PID in ode45 code

52 views (last 30 days)
Kashish Pilyal on 16 Aug 2022
Commented: Kashish Pilyal on 17 Aug 2022
So, I have a ode45 function and I have an error defined in it which changes at different iterations of the solver. I was able to define the derivative part by just differentiating the error formula but I am unable to implement the integral part. The error expression is: , where q represents position and v represents velocity. Is it possible to get the PID part in the ode function.

Sam Chak on 16 Aug 2022
Edited: Sam Chak on 17 Aug 2022
If the error is defined as then
P part is I part is D part is and you can arrange then in the state-space form. For example, a Double Integrator system can be rewritten in state-space as: .
The PID has 3 terms, and the state-space is in differential form. So you have no issue with the P and the D part, because they are part of the state variables. The I part is in integral form, so you have to create an additional state variable. See Example below:
[t, x] = ode45(@DIsystem, [0 20], [0; 0; 0]);
plot(t, x(:,1), 'linewidth', 1.5)
grid on, xlabel('t'), ylabel('y(t)'), % ylim([-0.2 1.2]) function dxdt = DIsystem(t, x)
dxdt = zeros(3, 1);
% construction of PID
r = 1; % reference signal
e = x(1) - r; % error signal
Kp = 1 + sqrt(2); % proportional gain
Ki = 1; % integral gain
Kd = 1 + sqrt(2); % derivative gain
u = - Kp*e - Ki*x(3) - Kd*x(2); % the PID thing
% the dynamics
A = [0 1; 0 0]; % state matrix
B = [0; 1]; % input matrix
dxdt(1:2) = A*[x(1); x(2)] + B*u; % the Double Integrator system
dxdt(3) = e; % for integral action in PID
end
Kashish Pilyal on 17 Aug 2022
Thanks I got the idea, in my case I have the error:
e_1=x(1)-( x(4)+(h_i*x(5)) );
So, If I am right I need to introduce a new state which I will be equal to this error at the end of every iteration like you did with dxdt=x(3) and in the next iteration use this state as the integral of the error.

### Categories

Find more on Dynamic System Models in Help Center and File Exchange

R2021a

### Community Treasure Hunt

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

Start Hunting!