Question: 1) writing (Best_pos(1:4)) is right? because it gives me error that the dimensions of the array being concatenated [ParsListMain is 4 elements].
2) Why the Best_pos gives me the ub of the code which is [3.7,0.05,2.8,3.5]?
Thanks in advance.
[Best_score,Best_pos,GWO_cg_curve]= GWO(20,100,[3.6,0.045,2.7,3.4],[3.7,0.05,2.8,3.5],4,@ee_battery_lse);
% Update Battery block with optimized parameters
Pars = reshape([ParsListMain; cellstr(num2str('Best_pos(1:4)'))'],1,[]);
for k=1:2:length(Pars)
evalin('base',[Pars{k} '=' Pars{k+1} ';'])
end
% Display optimized parameters
fprintf(['Optimized parameters for the battery main ' ...
'dialog tab are:\n']);
fprintf('\t%5s = %s\n', Pars{:});
clear i_data v_data t_data T_data Ts

 채택된 답변

Walter Roberson
Walter Roberson 2022년 4월 24일

0 개 추천

cellstr(num2str('Best_pos(1:4)'))'
ans = 1×1 cell array
{'Best_pos(1:4)'}
'Best_pos(1:4)' is a character vector. num2str() applied to a character vector gives the character vector. cellstr() applied to the character vector wraps it in a cell array, giving you a 1 x 1 cell array.
You mention that ParsListMain is 1 x 4, but you do not indicate what data type it is. If it were numeric then in context of the [] with the 1 x 1 cell array, then the numeric content would be wrapped in a cell and you would get a 2 x 1 cell array. If, though, ParsListMain is a 1 x 4 cell array then you would be doing vertcat between a 1 x 4 cell and a 1 x 1 cell, and that would be an error.
If Best_pos happens to be a numeric row vector then in
Pars = reshape([ParsListMain; cellstr(num2str(Best_pos(1:4)))'],1,[]);
the indexing Best_pos(1:4) of the (assumed) row vector would give you a 1 x 4 numeric vector, and num2str() of a numeric vector gives you a 1 x whatever character vector, and you would be back to the same problem as before.
If Best_post happens to be any other shape other than row vector (in particular if it happens to be a column vector) then Best_pos(1:4) would give you a 4 x 1 numeric vector, and num2str() of that would give you a 4 x whatever character array, cellstr() of which would give you a 4 x 1 cell array. Which you then transpose to 1 x 4. vertical concatenation of that with a 1 x 4 cell array could work fine.

댓글 수: 5

Walter Roberson
Walter Roberson 2022년 4월 24일
We would need your function to test why you are getting the upper bound.
Hend Mostafa
Hend Mostafa 2022년 4월 24일
편집: Hend Mostafa 2022년 4월 24일
ParsListMain = {'Vnom', 'R1', 'AH', 'V1', 'AH1'}; this is ParsList Main
and Best-pos gives me the optimized values of ParsListMain first 4 parameters
ParsListMain and Best_pos are row vectors
Hend Mostafa
Hend Mostafa 2022년 4월 24일
편집: Walter Roberson 2022년 4월 25일
This is my code using GWO algorithm
% Load Battery data
load ee_battery_data.mat
assignin('base','T1',battery_data(find([battery_data(1:2).T]==25)).T);
assignin('base','T2',battery_data(find([battery_data(1:2).T]~=25)).T);
% Display the Battery model
Model = 'ee_battery';
open_system(Model)
%%
close_system(Model, 0);
ParsListMain = {'Vnom', 'R1', 'AH', 'V1', 'AH1'};
ParsListDyn = {'Rp1', 'tau1'};
ParsListTemp = {'Vnom_T2', 'R1_T2', 'V1_T2','Rp1_T2','tau1_T2'};
Pars0 = reshape([[ParsListMain ParsListDyn ParsListTemp]; cellstr(num2str([InitGuessMain InitGuessDyn InitGuessTemp]'))'],1,[]);
fprintf('\t%5s = %s\n', Pars0{:});
clear Pars0
% Load single cell Battery model and set parameters
load_system(Model);
% Enable Fast Restart to speedup the simulation
set_param(Model,'FastRestart','on')
%% Optimize Main Tab Dialog Parameters Without Charge Dynamics (Step 1)
% Find ambient temperature data index
idx_data = find([battery_data(1:num_lines).T]==25);
assignin('base','t_data',battery_data(idx_data).t);
assignin('base','i_data',battery_data(idx_data).i);
assignin('base','T_data',battery_data(idx_data).T*ones(length(t_data),1));
assignin('base','T0',battery_data(idx_data).T);
assignin('base','Ts',t_data(2)-t_data(1));
assignin('base','v_data',battery_data(idx_data).v);
% Optimize parameters in main dialog tab of Battery
assignin('base','ParsList',ParsListMain(1:4));
% InitGuess = InitGuessMain(1:4);
% OptPars = fminsearch(@ee_battery_lse_r, InitGuess, ...
[Best_score,Best_pos,GWO_cg_curve]= GWO(50,50,[3.6,0.045,2.7,3.4],[3.7,0.05,2.8,3.5],4,@ee_battery_lse);
% Update Battery block with optimized parameters
Pars = reshape([ParsListMain(1:4) ; cellstr(num2str(Best_pos'))'],1,[]);
for k=1:2:length(Pars)
evalin('base',[Pars{k} '=' Pars{k+1} ';'])
end
Display optimized parameters
fprintf(['Optimized parameters for the battery main ' ...
'dialog tab are:\n']);
fprintf('\t%5s = %s\n', Pars{:});
clear i_data v_data t_data T_data Ts
clear k InitGuess
If ParsListMain is a cell array of character vectors, then ParsListMain(1:4) would be {'Vnom', 'R1', 'AH', 'V1'} which would be a cell array of character vector. It is not clear what the intended output of num2str({'Vnom', 'R1', 'AH', 'V1'}) would be.
Pars0 = reshape([[ParsListMain ParsListDyn ParsListTemp]; cellstr(num2str([InitGuessMain InitGuessDyn InitGuessTemp]'))'],1,[]);
where the Init* variables are each numeric vectors.
Hend Mostafa
Hend Mostafa 2022년 4월 27일
Thank you!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

제품

릴리스

R2019b

질문:

2022년 4월 24일

댓글:

2022년 4월 27일

Community Treasure Hunt

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

Start Hunting!

Translated by