accelerating code in matlab - for loop
显示 更早的评论
Hi Guys,
int = zeros(1,length(x));
if k <= 0
int = x ;
return
end
for n = 3:length(x)
y1 = x(2:n) ;
t1 = ((n-2):-1:0)*dt ;
y2 = x(1:n-1) ;
t2 = t1 +dt;
int(n) = sum (t1.^(k-1)/factorial(k-1).*y1 + t2.^(k-1)/factorial(k-1).*y2)*dt/2 ;
end
is there any suggestion to write this part of code more optimal? It is used for computing Integration. The most time consuming line is int(n)= ... Whether I can change and remove the for loop here, and implement the for functionality in another way, e.g. vectors? Any suggestions would be appreciated ...
2 个评论
Ryan
2012-7-5
for n = 3:length(x )
y1 = x(2:n) ;
t1 = ((n-2):-1:0)*dt ;
y2 = x(1:n-1) ;
t2 = t1 +dt;
int(n) = sum (t1.^(k-1)/factorial(k-1).*y1 + t2.^(k-1)/factorial(k-...
1).*y2)*dt/2 ;
end
Jan
2012-7-11
@Sara: You can delete your question using the "Delete" button left beside the question. If such a button does not appear although you are logged in, please contact an editor or files@mathworks.com and ask for deleteing the thread. Duplicate posts waste the time of the ones, who want to help you.
采纳的回答
更多回答(1 个)
Matt Kindig
2012-7-5
Could you please format your code properly? It is difficult to tell which lines are commented, etc. Please edit your question to include proper line breaks, and then apply the 'code' tag (see the {} Code icon in the editor window).
Also, as a first observation, you should pre-allocate your variable 'int'--that is the reason that it is taking so long. Prior to the loop, add this line:
int = NaN(length(x), 1);
I think that this change alone will substantially improve your performance.
2 个评论
Jan
2012-7-11
int is pre-allocated by zeros already.
Matt Kindig
2012-7-12
Ah yes, I think I missed that before.
类别
在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!