How can i speed up my function?

1 回表示 (過去 30 日間)
Gerrit
Gerrit 2020 年 1 月 8 日
コメント済み: Gerrit 2020 年 1 月 12 日
Hello everybody,
I'm trying to increase the performance of my Matlab function. Input is a table with the same columns as airfoil_update.
The function splits the X-Coordinates of one AeroDataId at the minimum of X/C and does this for every AeroDataId in the table. Airfoil, the input table, will have a size of 131123421x4. But the fourth column "Upper" is empty and should be filled up with a 1, if the coordinate belongs to the upper airfoil and 0, if it belongs to the lower airfoil.
Thank you very much in advance.
function [airfoil_update] = splitAirfoil(airfoil)
%% create table for upper and lower airfoil
airfoil_update=array2table(zeros(0,4),'VariableNames',{'AeroDataId','X_C','CP','Upper'});
%% vector with unique AeroDataIds
DataId_unique=unique(airfoil.AeroDataId);
for i=1:1:size(DataId_unique)
%% temp vector filled with every point of specific AeroDataId
disp(DataId_unique(i,:));
AeroDataId=airfoil(airfoil.AeroDataId==DataId_unique(i,:),:);
%% find the minimum of X/C
[~, min_idx]=min(AeroDataId.X_C);
%% every point with same ID before minimum -> lower_airfoil -> Upper =0
airfoil_new=AeroDataId(1:min_idx,:);
airfoil_new.Upper(:,:)=0;
airfoil_update=[airfoil_update; airfoil_new];
%% every point with same ID after minimum = upper_airfoil -> Upper =1
airfoil_new=AeroDataId(min_idx+1:end,:);
airfoil_new.Upper(:,:)=1;
%% add new rows
airfoil_update=[airfoil_update; airfoil_new];
end
end
  4 件のコメント
Daniel Ribeiro Gonçalves
Daniel Ribeiro Gonçalves 2020 年 1 月 9 日
They wont be deleted.. Its only for the matter of performance.. It will lower your program computacional time
Gerrit
Gerrit 2020 年 1 月 9 日
編集済み: Gerrit 2020 年 1 月 9 日
Oh okay I understand. But where would I put it?
And I just saw sparse does not work for tables.

サインインしてコメントする。

採用された回答

Philippe Lebel
Philippe Lebel 2020 年 1 月 8 日
編集済み: Philippe Lebel 2020 年 1 月 8 日
In order to help you in a significant way, it would be useful to have a sample data set on which we could run the function.
On the top of my head, i'd remove the disp() function call. Printing info to the console takes a significant amount of time for no real benefit.
I would also pre-alocate the size of
airfoil_update
since you know it's maximum size, you can pre alocate it to that size and keep track of the number of elements you put in it then chop the unused space only once at the end of the script.
  9 件のコメント
Gerrit
Gerrit 2020 年 1 月 9 日
Thank you veryyy much Philippe!!
here is the link: https://de.mathworks.com/matlabcentral/answers/499639-how-can-i-speed-up-my-code
Gerrit
Gerrit 2020 年 1 月 12 日
Philippe, do you have any idea for my other problem?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange2-D and 3-D Plots についてさらに検索

製品


リリース

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by