How to write a line of statement with two vector of different size using no loops

1 view (last 30 days)
I am not sure if the title us correct. But here's what i want to do.
n = -10:10;
p = [-0.6 0.2];
r = [ -1.7500 2.7500];
H = zeros(size(n));
for i=1:length(p)
H = H + r(i)*(p(i).^n).*(n>=0);
end
I want to write this for loop in one line of statement. Is there a way?

Accepted Answer

Cedric Wannaz
Cedric Wannaz on 22 Oct 2017
Edited: Cedric Wannaz on 22 Oct 2017
>> H2 = (n >= 0) .* sum(r.' .* p.'.^n) ;
>> isequal( H2, H )
ans =
logical
1
if it doesn't work, you may have a MATLAB version < 2016b. In such case:
>> H3 = (n >= 0) .* sum(bsxfun(@times, r.', bsxfun(@power, p.', n))) ;
>> isequal( H3, H )
ans =
logical
1
  2 Comments
Cedric Wannaz
Cedric Wannaz on 24 Oct 2017
My pleasure! It's worth getting the latest version if it is distributed at your institution, because a lot of new features appeared between 2016b and 2017b. Here in my first solution we use an implicit automatic expansion for example, using a very simple syntax.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by