Index exceeds the number of array elements. Index must not exceed 1.

3 次查看(过去 30 天)
function cost = optimize_PID(k)
assignin('base', 'k', k);
sim('DABvoltagecontrol.slx');
ITAE = load('ITAE.mat');
num_samples = size(ITAE.ans , 1);
ITAE_value = ITAE.ans(1, num_samples);
cost = ITAE_value(num_samples);
end
while executing the code, error is showing : Index exceeds the number of array elements. Index must not exceed 1. the ITAE is loaded to .mat format

回答(2 个)

Torsten
Torsten 2024-2-7
编辑:Torsten 2024-2-7
num_samples = size(ITAE.ans , 1);
ITAE_value = ITAE.ans(1, num_samples);
num_samples is the number of rows of ITAE.ans, but you use it in setting ITAE_value as if it were the number of columns.
Maybe you mean
ITAE_value = ITAE.ans(num_samples,1);
?
  2 个评论
Deepti t
Deepti t 2024-2-7
Still the error shows.
Index exceeds the number of array elements. Index must not
exceed 1.
Error in optimize_PID (line 7)
cost = ITAE_value(num_samples);
Torsten
Torsten 2024-2-7
ITAE_value is a scalar - there is no element number num_samples of ITAE_value because there is only one.

请先登录,再进行评论。


Sam Chak
Sam Chak 2024-2-7
I would recommend calculating the ITAE (Integral of Time-weighted Absolute Error) within the Simulink model and connecting the output to the 'Outport' block. This approach is more straightforward. However, it appears that you are searching for a single parameter, k in the 3-gain PID controller, to minimize the ITAE. Here is a code snippet that may help you with that:
function cost = optimize_PID(k)
assignin('base', 'k', k);
[t, x, y] = sim('DABvoltagecontrol.slx');
cost = y(end, 1); % number 1 Outport block
end
  10 个评论
Deepti t
Deepti t 2024-2-8
移动:Sam Chak 2024-2-8
I am able to get out.ITAE in the array format and also the cost variable showing the out.ITAE values, but the whole function is not working, " unrecognised field: ITAE"
Sam Chak
Sam Chak 2024-2-8
But your error says that out.ITAE is a time series data. Despite setting the To Workspace block to send data as 'Array', it seems that the logged data is still in the 'Time series' format. Am I missing something?
out.ITAE
timeseries
Common Properties:
Name: ''
Time: [328012x1 double]
TimeInfo: [1x1 tsdata.timemetadata]

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Genetic Algorithm 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by