Help I can't get my code to execute

2 次查看(过去 30 天)
clear
clc
r = 0.12; % in m
c = 0.250; % in m
t = linspace(0,0.12); % time equally spaced for 1 rev
thd = (50/3)*pi; % d(theta)/dt in rad/s
theta = thd*t; % theta as a product of time and d(theta)/dt
d1 = r*cos(theta);
h = r*sin(theta);
d2 = sqrt((c^2)-(h.^2)); % d2 and how its relates to c and h
x = d1 + d2; % The position (x)is a sum of d1 and d2
% Position vs time subplot
subplot(3,1,1), plot(t,x)
title('Problem #1 Answer'), ylabel('Position (m)')
% xd = d(x)/dt
numer = ((r^2) * thd * sin(2*theta)); % breaking down the equation.
denom = ((c^2)-(r^2)*(theta));
xd = (-1)*(r)*(thd)*sin(theta)-(numer/(2*sqrt(denom)));
% Do => Velocity (xd) vs time subplot
subplot(3,1,2),plot(t,xd), ylim([-8 8]) % subplot for velocity vs time
ylabel('Velocity (m/s)')
% Do => Acceleration (xdd) vs time
% Breakdown the eqn into small parts
numer1 = ((cos(2*theta))*4*(r^2)*(thd^2)) * ((c^2) - (r^2)*((sin(theta)).^2));
numer2 = ((r^2) * (thd) * (sin(2*theta)));
denom1 = (c^2) - (r^2)*((sin(theta))^2);
% combine the (xdd) eqns
xdd = (-1)*((thd)^2)*cos(theta) - (numer1 + (numer2)^2)/(4 * (denom1)^(3/2));
subplot(3,1,3), plot(t,xdd)
%% And this is the the error I get
"Warning: Imaginary parts of complex X and/or Y arguments ignored
Error using *
Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second
matrix. To perform elementwise multiplication, use '.*'.
Error in Makwera_Blessing_HW02 (line 39)
numer1 = ((cos(2*theta))*4*(r^2)*(thd^2)) * ((c^2) - (r^2)*((sin(theta)).^2));

采纳的回答

Walter Roberson
Walter Roberson 2019-9-15
xd = (-1)*(r)*(thd)*sin(theta)-(numer/(2*sqrt(denom)));
where
denom = ((c^2)-(r^2)*(theta));
but denom can be negative, and sqrt() of a negative value will be complex valued.
Looking at
numer = ((r^2) * thd * sin(2*theta)); % breaking down the equation.
I would tend to suggest that you should not be multiplying by theta itself, but instead by a trig function of theta.
numer1 = ((cos(2*theta))*4*(r^2)*(thd^2)) * ((c^2) - (r^2)*((sin(theta)).^2));
theta is a 1 x 100 vector, so the left side of the * operation cos(2*theta) is a 1 x 100 vector. The right side of the * operation involves sin(theta) and theta is a 1 x 100 vector, so the right side of the * operation is a 1 x 100 vector.
You therefore have (1 x 100 vector) * (1 x 100 vector) . But * is the algebraic matrix multiplication ("inner product") operator, for which the second dimension of the left operand must be the same as the first dimension of the right operand.
If you are looking for a 100 x 100 result, you will need to transpose() or ctranspose() the left side, so you have (100 x 1) * (1 x 100) giving 100 x 100. If you are looking for a 1 x 1 result, you will need to transpose() or ctranspose() the right side, so you have (1 x 100) * (100 x 1) giving 1 x 1. If you are looking for a 1 x 100 result then * is the wrong operation to use; perhaps you should be using the .* operation.
  1 个评论
Blessing Makwera
Blessing Makwera 2019-9-16
Thanks very much. This saved me a lot of stress. I am new to matlab and learning a lot.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by