Possible error with dot product

12 vues (au cours des 30 derniers jours)
William Kett
William Kett le 22 Sep 2021
Commenté : William Kett le 4 Oct 2021
There appears to be an issue with the dot function which computes the dot product between 2 vectors. Either that, or I am using it incorrectly.
xa = -4.2162; % x-component of vector a
ya = -7.1335;% y-component of vector a
xb = -1.4941e-08; % x-component of vector b
yb = 1.7922e-08; % y-component of vector b
% dot product = a_i*b_i + a_j*b_j =|a|*|b|*cos(theta)
%% Get values for above formulae
dotprod1 = xa * xb + ya * yb
dotprod1 = -6.4852e-08
theta = rad2deg(acos((xa*xb+ya*yb)/(sqrt(xa^2+ya^2)*sqrt(xb^2+yb^2))));
dotprod2 = sqrt(xa^2+ya^2)*sqrt(xb^2+yb^2) * cos(deg2rad(theta))
dotprod2 = -6.4852e-08
dotprod1 == dotprod2 % Should give 1
ans = logical
1
%% Using the dot function
% a = a_i + a_j
% b = b_i + b_j
dotprod3 = dot(xa+ya,xb+yb) % dot of full vectors a and b
dotprod3 = -3.3833e-08
dotprod1 == dotprod3
ans = logical
0
Why isn't dot producing the same value?

Réponse acceptée

Geoff Hayes
Geoff Hayes le 22 Sep 2021
William - from dot, this function returns the scalar dot product of the two input vectors. So in your case, the
dot(xa+ya,xb+yb)
is equivalent to
(xa + ya) * (xb + yb)
which is not the same as what you calculated previously as
dotprod1 = (xa * xb) + (ya * yb) % I added the brackets
Note also that your code and comment
dotprod1 == dotprod2 % Should give 1
is not necessarily true for floating point numbers. See Compare Floating-Point Numbers for details.
  1 commentaire
William Kett
William Kett le 4 Oct 2021
Thank you for your response. I needed to use this for computing advection and was uncertain if dot worked.

Connectez-vous pour commenter.

Plus de réponses (0)

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by