Projecting a vector to another vector
    322 views (last 30 days)
  
       Show older comments
    
I would like to project a vector to another vector. You can find more information here:
For example I would like to project vector A to vector B. I have used these tricks but it does not work: Any comment is appreciated.
-----------------------
Solution 1)
A=[-10,10,0];
B=[0,0,1];
C=(dot(A,B)/norm(B)^2)*B
---------------------------------
Solution 2)
A=[-10,10,0];
B=[0,0,1];
CosTheta = dot(A,B)/(norm(A)*norm(B));
ThetaInDegrees = acos(CosTheta)*180/pi;
c=norm(A)*cos(ThetaInDegrees)
-----------------------------
1 Comment
Accepted Answer
  Jan
      
      
 on 1 Mar 2011
        You have to tell DOT, that it must work on the 2nd dimension. Finally BSXFUN is needed to multiply the [88 x 1] and the [88 x 3] arrays. Unfortunalely NORM replies a matrix norm when operating on a matrix. Either use DNorm2: http://www.mathworks.com/matlabcentral/fileexchange/29035-dnorm2 or create the vector norm manually:
A = repmat([10,10,-10] ,[88,1]);
B = repmat([1,1,-1], [88,1]);
lenC = dot(A, B, 2) ./ sum(B .* B, 2);  % EDITED, twice
C = bsxfun(@times, lenC, B)
4 Comments
More Answers (9)
  Paulo Silva
      
 on 28 Feb 2011
        A=[-10,10,0];
B=[0,0,1];
%calculation of the projection of A into B
C=(sum(A.*B)/(norm(B)^2))*B;
%versors of each vector
An=A/norm(A);
Bn=B/norm(B);
Cn=C/norm(C);
%graphic representation
clf
line([0 A(1)],[0 A(2)],[0 A(3)],'LineWidth',10,'Color',[0 0 1])
line([0 B(1)],[0 B(2)],[0 B(3)],'LineWidth',8,'Color',[0 1 0])
line([0 C(1)],[0 C(2)],[0 C(3)],'LineWidth',5,'Color',[1 0 0])
legend('A','B','proj A into B')
xlabel('X')
ylabel('Y')
zlabel('Z')
view(80,10)
5 Comments
  Jan
      
      
 on 1 Mar 2011
        What exactly does "but it does not work" mean?
Your solution 1:
A = [-10,10,0];
B = [0,0,1];
C = (dot(A,B)/norm(B)^2)*B
This looks ok. If you get C = [0,0,0], the method works. A and B are orthogonal, such that the projection is zero.
Your solution 2:  wrong
CosTheta = dot(A,B)/(norm(A)*norm(B));
ThetaInDegrees = acos(CosTheta)*180/pi;
c=norm(A)*cos(ThetaInDegrees)
Now c is a scalar, but you wanted a vector. Converting Theta in degrees is not correct here: COS works win radians. Use COSD for degerees. Improved:
CosTheta = dot(A,B) / (norm(A)*norm(B));
C = norm(A) * CosTheta * B / norm(B);
And as expected: If you insert CosTheta in the 2nd line, you get your solution 1 again.
2 Comments
  Paulo Silva
      
 on 1 Mar 2011
				I failed somehow to find the function dot and done sum(A.*B) instead :) but the results are the same
  Jan
      
      
 on 1 Mar 2011
				sum(A.*B) and A*B' are faster then DOT. But for [1 x 3] vectors this does not matter.
  Foday Samura
 on 1 May 2020
        Find the length (or norm) of the vector that is the orthogonal projection of the vector a = [ 1  2 4 ] onto b = [6 10 3 ].    Type an answer that is accurate to 3 decimal places.  (For example, if your answer is 4+2/3, you should type 4.667).
0 Comments
  fatema hasan
 on 13 Dec 2020
        - Write the complete MATLAB commands to find the unit vector parallel to the projection of #5
0 Comments
  fatema hasan
 on 13 Dec 2020
        - If A= <1,2,3>, B = <4,5,6>, write the complete MATLAB commands to compute the projection of A on B
0 Comments
  fatema hasan
 on 13 Dec 2020
        - Compute the partial derivative of x2y3sin(e2xy) in MATLAB with respect to y
Answer: 
          Syms x,y,z 
             f=x^2 + y^3 +  sin(x*y);
              diff(f,x)
              diff(f,y)
0 Comments
  fatema hasan
 on 13 Dec 2020
        - Given two vectors: <1,4,3> and <1,0, -2>
Write the complete MATLAB commands to  find the  dot product 
0 Comments
  Brandon O'Neill
 on 26 Mar 2021
        At a certain time of day the radiant energy from the sun reaches the roof along the direction given by the unit vector
The fraction of the sun’s energy which is falling perpendicularly on the roof is the projection of vector (A)  onto the direction perpendicular to the roof – this is the dot product of (A) with the unit vector.
Q1) Use Matlab to calculate the fraction of the sun’s energy which is falling perpendicularly on the roof.
can anyone help with this?
 the univ vector is [0.7627;0.5509;0.3390] 
 the vector A = 1/sqrt(21)[1;2;-4]
0 Comments
See Also
Categories
				Find more on Entering Commands 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!





