How to Simulate Nonlinear Model Discrete Time?

31 views (last 30 days)
Ivan Dwi Putra
Ivan Dwi Putra on 19 Nov 2020
Answered: Jaynik on 30 Jul 2024
This is My Nonlinear Model
function [PositionN, VelocityN, TorqueN] = traindiscretemodel(u,Tim_step,Position,Velocity,Torque,Mass,Ca_0,Ca_1,Ca_2,Tao,R,Eta)
% Train Model
PositionN = Position + Velocity*Tim_step;
VelocityN = Velocity + 1/Mass *(Eta*Torque/R - (Ca_0 + Ca_1*Velocity + Ca_2*Velocity^2))*Tim_step;
TorqueN = Torque - 1/Tao*Torque*Tim_step + 1/Tao*u*Tim_step;
end
This is parameters i used
clc;clear;close all;
Eta = 0.96;
% Parameter Massa
Mass = [8095;8500;8457;8500;8443;8396;8491];
Tim_step = 0.01;
R = [0.290736184319659;0.295289596853781;0.256349340814675;0.295668792806951;0.281617962311270;0.254877020249970;0.263924910943352];
Tao = [0.744417105917954;0.771737581122686;0.538096044888052;0.774012756841706;0.689707773867623;0.529262121499823;0.583549465660115];
Torquebound = [-3297.53650110286,3297.53650110286;-3517.25332991404,3517.25332991404;-1805.63954664794,1805.63954664794;-3535.78455981619,3535.78455981619;-2873.13552926226,2873.13552926226;-1748.36142518872,1748.36142518872;-2108.92205347325,2108.92205347325];
% Parameter Resistansi
Ca_0 = [5.2;5.2;5.2;5.2;5.2;5.2;5.2;];
Ca_1 = [0.038;0.038;0.038;0.038;0.038;0.038;0.038;];
Ca_2 = [0.00112;0.00112;0.00112;0.00112;0.00112;0.00112;0.00112;];
v0 = 20;
cd('G:\Ivan\Semester 10\Tugas Akhir II\matlab\Train Model Open Loop');
save parametersvalue.mat
with that discrete time model and parameters i used, I want simulated the model open loop. Can i used ode45?

Answers (1)

Jaynik
Jaynik on 30 Jul 2024
Hi,
The ode45 function is used for solving ordinary differential equations (ODEs) and it is typically used for continuous-time models. However, the model given is a discrete-time model as it uses a time step (Tim_step) for updating the states.
For discrete-time models, you can use a simple loop to update the states at each time step. Here’s a basic example of how you can simulate your model in an open-loop fashion:
% Initial conditions
Position = 0;
Velocity = v0;
Torque = 0;
T_end = 10; % for example, simulate for 10 seconds
t = 0:Tim_step:T_end;
PositionN = zeros(size(t));
VelocityN = zeros(size(t));
TorqueN = zeros(size(t));
% Open-loop control input
u = 0; % for example, no control input
% Simulation loop
for i = 1:length(t)
[PositionN(i), VelocityN(i), TorqueN(i)] = traindiscretemodel(u,Tim_step,Position,Velocity,Torque,Mass(1),Ca_0(1),Ca_1(1),Ca_2(1),Tao(1),R(1),Eta);
Position = PositionN(i);
Velocity = VelocityN(i);
Torque = TorqueN(i);
end
plot(t, PositionN);
xlabel('Time (s)');
ylabel('Position');
This code will simulate the model for 10 seconds with no control input (u = 0). The simulation time and the control input can be adjusted as needed. Also, please make sure to use the correct parameters for your model. This is just a basic example and might need to be adjusted based on your specific needs.
Hope this helps!

Categories

Find more on Programming in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!