Optimise a loop with interpolation
Show older comments
Hello dear forum:
I am working on an battary optimization problem. As part of the problem, an electrical resistance should be dependent on T, C-Rate and SOC. I have a lot of sample values in between which it should be interpolated. Because the optimization problem is designed as a shortest path model, it iterates around 200 million times. My current approach is shown below and is currently very slow due to the interpolation. I used the griddata-command for interpolation.
Is there a faster way? My ideas:
- Interpolate a lot of values in the first rotation and then only select the closest one etc.
- Turn the sample values into a function. (I have heard about this but didnt find it).
I am glad for any suggestions!
Thank you and merry easter.
Here my current function:
function R = calculateResistance_neu_neu(R0,I,SOC,T,Q)
T = T;
C_Rate = I/Q;
SOC = SOC;
matrix = [5, 0.5, 0.1, 2.25, 135;
.....
45, 3, 0.8, 1, 60;
45, 3, 0.9, 1, 60];
Multiplikator = griddata(matrix(:,1),matrix(:,2),matrix(:,3),matrix(:,4),T,C_Rate,SOC);
R = R0*Multiplikator;
4 Comments
埃博拉酱
on 9 Apr 2023
Try to set the matrix as persistent. You'd better show more code outside this function. Optimization is hardly possible without your outer code.
Fabian Haslwanter
on 9 Apr 2023
Matt J
on 9 Apr 2023
Your mfile contains no function called calculateResistance_neu_neu()
Fabian Haslwanter
on 9 Apr 2023
Edited: Fabian Haslwanter
on 9 Apr 2023
Accepted Answer
More Answers (0)
Categories
Find more on MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!