Error calculating vector dot product when vector elements are variables
5 次查看(过去 30 天)
显示 更早的评论
Hi,
I'm (mostly) new to MATLAB, and am doing an assignment for my Engineering Diploma. It's due in 3.5 hours' time, and I'm stuck on one of the questions.
I am asked to calculate the scalar triple product of
, where
,
, and
.
Here is the code I am attempting to use:
%% Question 3: Compute the scalar triple product U . (V x W) of the vectors U = [a 0 0], V = [0 b 0], and W = [0 0 c]
%
fprintf ("\n\n\nQuestion 3: Compute the scalar triple product U . (V x W) of the vectors U = [a 0 0], V = [0 b 0], and W = [0 0 c]\n\n"); % displays the question
clear; % clears any previously used variables
syms a b c; % creates a, b, and c as variables
U = [a 0 0]; % sets U as a vector as given in the question
V = [0 b 0]; % sets V as a vector as given in the question
W = [0 0 c]; % sets W as a vector as given in the question
STP = dot (U,cross(V,W)) % calculates the scalar triple product of U dot (V x W)
fprintf ("The scalar triple product of U . (V x W) is %s",STP); % displays the result in an easy-to-read format
%
Unfortunately, the answer returned is not what I expected:
STP =
b*c*conj(a)
According to my manual calculations,
, not 
I have tried breaking the operation into its two steps by first calculating the cross product, then finding the dot product, but it returns the same final answer:
%% Question 3: Compute the scalar triple product U . (V x W) of the vectors U = [a 0 0], V = [0 b 0], and W = [0 0 c]
%
fprintf ("\n\n\nQuestion 3: Compute the scalar triple product U . (V x W) of the vectors U = [a 0 0], V = [0 b 0], and W = [0 0 c]\n\n"); % displays the question
clear; % clears any previously used variables
syms a b c; % creates a, b, and c as variables
U = [a 0 0]; % sets U as a vector as given in the question
V = [0 b 0]; % sets V as a vector as given in the question
W = [0 0 c]; % sets W as a vector as given in the question
crossvw = cross (V,W) % calculates the cross-product of V x W
STP = dot (U,crossvw) % calculates the scalar triple product of U dot (V x W)
fprintf ("The scalar triple product of U . (V x W) is %s",STP); % displays the result in an easy-to-read format
%
This returns:
Question 3: Compute the scalar triple product U . (V x W) of the vectors U = [a 0 0], V = [0 b 0], and W = [0 0 c]
crossvw =
[b*c, 0, 0]
STP =
b*c*conj(a)
The scalar triple product of U . (V x W) is b*c*conj(a)
In the above, crossvw is correct. However, it is still returning an incorrect result for the dot product.
I have also tried using other functions instead of dot, such as dotprod and vector_dot, however both of them returned:
Undefined function 'dotprod' for input arguments of type
'sym'.
Error in <redacted> (line
33)
STP = dotprod (U,cvw) % calculates the scalar triple product of U dot (V x W)
and
Undefined function 'vector_dot' for input arguments of type
'sym'.
Error in <redacted> (line
33)
STP = vector_dot (U,cvw) % calculates the scalar triple product of U dot (V x W)
respectively.
Can anyone help?
1 个评论
Bruno Luong
2022-11-20
According to my manual calculations U . (V x W) = abc.
It depends on the convention of dot product. In some book
dot(u,v) := sum conj(u(i))*v(i) % MATLAB convention
In other
dot(u,v) := sum u(i)*conj(v(i)) % Probably your manual
I'm not sure what is a proper definition of cross product for complex entries.
The triple product for real entries can be also defined as the determinant of
A = [ux uy uz;
vx vy vz;
wx wy wz];
T = det(A)
instead of
T = u . (v x w)
I'm not quite sure which one can be extended to complex numbers. To be tolally symmetric wrt the inputs I would say for complex the determinant formula hold and the second formula must be modified
T = u* . (v x w) % MATlAb dot product convention
采纳的回答
Star Strider
2022-11-20
The Symbolic Math Toolbox makes the (usually appropriate) assumption that the variables are complex.
Force them to be real by declaring them as such:
syms a b c real
The the result is as expected —
syms a b c real % creates a, b, and c as variables
U = [a 0 0]; % sets U as a vector as given in the question
V = [0 b 0]; % sets V as a vector as given in the question
W = [0 0 c]; % sets W as a vector as given in the question
STP = dot (U,cross(V,W)) % calculates the scalar triple product of U dot (V x W)
.
2 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!