piecewise matrix multiplication with vector

6 次查看(过去 30 天)
Hi,
I am trying to minimize a function s = b - Yr in a vectorized form. Y is a projection matrix and r the coordinates. I would like to multiply the first two rows of Y with the first vector in r and then the two second ones in y with the second one in r. Now this works:
b = zeros(2,1);
Y = [1 2 3 ; 0 0 1 ]
r = [0 0 1]';
s =
-3
-1
Now how could I extend this? Like this:
Y = [1 2 3 ; 0 0 1 ; 4 5 6 ; 0 0 1]
r = [0 0 1 ; 0 0 1]';
Such that I have the same form answer as in b variable? like b = zeros(2,90);
The variable Y i make like this:
angles = -88:2:90
for i= 1:size(angles,2)
if i== 1
Y = [cos(angles(1,i)) 0 sin(angles(1,i)); 0 1 0];
else
Y = vertcat(Y,[cos(angles(1,i)) 0 sin(angles(1,i)); 0 1 0]);
end
end
And in the minimization I try to find the z coordinate in r variable: r = [0 0 x]
Many thanks for any help!

采纳的回答

dpb
dpb 2015-1-11
Sometimes it's just easiest to write a loop...
j=0;
for i=1:2:length(Y)
j=j+1;;
p(:,j)=Y(i:i+1,:)*r(:,j);
end
s=b-p; % objective function
With some thought this could be written w/ accumarray or the like but the above is straightforward and easy to debug. If it turns out the loop is a bottleneck verified by profiler, then I'd worry about it.
  1 个评论
mb
mb 2015-1-11
thanks dpb! this will not be in the cost function so this will be perfect!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Language Fundamentals 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by