In an assignment A(I) = B, the number of elements in B and I must be the same.

조회 수: 1 (최근 30일)
at first i wrote below code to solve mechanism equations and find best parameters for my linkages
my first code:
l1=x(:,1);
l2=2;
l3=x(:,3);
l4=x(:,4);
l5=3;
l6=4;
theta1=0*pi/180;
alpha=acos((l3.^2+l5.^2-l6.^2)/(2*l3*l5)); % tha angle of coupler triangle
%%Gerashof principle %%
if l2+l3<=l1+l4;
A=1;
else
A=0;
end
R1=l1*exp(1i*theta1); %%length of 1 body
n=400; %%points
u=0; %%initial point for creating loop
for t2=0:2*pi/n:2*pi %%theta2 and step which it goes
u=u+1;
R2=l2*exp(1i*t2); %%length of 2 body
D=R1-R2; %%length of interact of 1 and 2 bodies
d=norm(D); %%mesure of interact body
tD=angle(D); %%angle of interact body wich called "D"
delta=abs(acos((l3.^2.+d.^2-l4.^2)/(2*l3*d))); %%angle between two bodies
sigma=abs(acos((l4.^2.+d.^2-l3.^2)/(2*l4*d))); %%angle between two bodies
theta3(u,1)=tD + delta;
theta2(u,1)=t2 %%tehta 2
P=A*(l2*exp(1i*t2)+l5*exp(1i*(alpha+theta3(u,1)))); %%length of distance between input and specific point
px(u,1)=real(P); %%real measure
py(u,1)=imag(P); %%imagine measure
But i encountered with this Error:
??? Error using ==> plus
Matrix dimensions must agree.
Error in ==> costFunction at 42
theta3(u,1)=tD + delta;
then i changed that to this code:
l1=x(:,1);
l2=2;
l3=x(:,3);
l4=x(:,4);
theta1=0*pi/180;
%%Gerashof principle %%
if l2+l3<=l1+l4;
A=1;
else
A=0;
end
R1=l1*exp(1i*theta1); %%length of 1 body
n=3; %%points
u=0; %%initial point for creating loop
for t2=0:2*pi/n:2*pi %%theta2 and step which it goes
u=u+1;
R2=l2*exp(1i*t2); %%length of 2 body
D=R1-R2; %%length of interact of 1 and 2 bodies
d=norm(D); %%mesure of interact body
t_D=angle(D) %%angle of interact body wich called "D"
Delta=abs(acos((l3.^2+d.^2-l4.^2)/(2*l3*d))) %%angle between two bodies
sigma=abs(acos((l4.^2+d.^2-l3.^2)/(2*l4*d))) %%angle between two bodies
tD=t_D
delta=Delta
for nn=1:n
theta3(nn)=tD+delta(nn)
end
theta2(u,1)=t2 %%theta 2
% theta3(u,1)=delta+tD %%theta3
P=A*(l2*exp(1i*t2)+l3*exp(1i*(theta3(u,1)))); %%length of distance between input and specific point
px(u,1)=real(P); %%real measure
py(u,1)=imag(P); %%imagine measure
if true
% code
end
now i encounter with this Error:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.
Error in ==> costtFunction at 41
theta3(nn)=tD+delta(nn)
i tried and read alot to solve this code but i couldn't.
would you please guide me ?
regards
  댓글 수: 4
Image Analyst
Image Analyst 2017년 1월 2일
x is not a function. It can't be. I don't know why you just don't say what x is.
Anyway, I made up something for x, a 30 by 4 columns array. If x has N rows then tD is an N by 1 column vector and delta is an N by N square matrix. Thus you cannot add them because they are different shapes. You need to go over the logic some more.
And you shouldn't do this:
for t2=0:2*pi/n:2*pi
You should use integers and then get the angle inside the loop. Like
theta2 = t2=0:2*pi/n:2*pi
for t2= 1 : length(theta2)
thisTheta2 = theta2(t2);
Niels
Niels 2017년 1월 2일
thats exactly what i mean, use the command
keyboard
to check the size of td and delta and tell us
1.the size
2. if it has the size u wanted it to have

댓글을 달려면 로그인하십시오.

채택된 답변

Morteza.Moslehi
Morteza.Moslehi 2017년 1월 6일
편집: Stephen23 2017년 1월 6일
Answer: i should write inputs same below:
cost=zeros(size(x,1),1);
for ii= 1:size(x)
l1=x(ii,1);
l2=2;
l3=x(ii,3);
l4=x(ii,4);
l5=3;
l6=4;

추가 답변 (2개)

Niels
Niels 2017년 1월 2일
편집: Niels 2017년 1월 2일
i tried to run it, but i could not at that moment i asked myself what your x might be
can u tell me?
if it is a vecor why would you type
l1=x(:,1);
if it is a matrix -> here is your problem
because then your R1 is also a vector, same for D and td
thats why u cant set theta3(1,1) a vector which is supposed to be a scalar
use
keyboard
to check if i am right
replace this part of your code and run it, afterwards type l1 in the cmd window
delta=abs(acos((l3.^2.+d.^2-l4.^2)/(2*l3*d))); %%angle between two bodies
sigma=abs(acos((l4.^2.+d.^2-l3.^2)/(2*l4*d))); %%angle between two bodies
keyboard
theta3(u,1)=tD + delta;
l1
  댓글 수: 11
Walter Roberson
Walter Roberson 2017년 1월 3일
Strictly speaking, if works the same way for vectors and scalars: it is just that the way it works tends to surprise people when it is applied to vectors or matrices.
Morteza.Moslehi
Morteza.Moslehi 2017년 1월 5일
편집: Morteza.Moslehi 2017년 1월 5일
@Niels sorry for being late.I've just arrived home from Hospital. the current code is about path generation of mechanism which designed just with 4 linkages.
l2 is input and can rotate for 360 degree and in following l3 and l4 rotate too. theta 2 in the angle between l2 and l1 that l1 is gound as you can see in code.
function cost = costtFunction(x)
global LowerBand UpperBand
l1=x(:,1); l2=2; l3=x(:,3); l4=x(:,4); l5=5 l6=4 theta1=0*pi/180; alpha=acos((l3.^2+l5.^2-l6.^2)/(2.*l3.*l5))
%% Gerashof principle %%
if l2+l3<=l1+l4; A=1; else A=0; end
R1=l1*exp(1i*theta1); %%length of 1 body
n=3; %% points u=0; %%initial point for creating loop
for t2=0:2*pi/n:2*pi %% theta2 and step which it goes u=u+1;
R2=l2*exp(1i*t2); %%length of 2 body
D=R1-R2; %%length of interact of 1 and 2 bodies
d=norm(D); %%mesure of interact body
tD=angle(D); %%angle of interact body wich called "D"
delta=abs(acos((l3.^2.+d.^2-l4.^2)/(2*l3*d))); %%angle between two bodies
sigma=abs(acos((l4.^2.+d.^2-l3.^2)/(2*l4*d))); %%angle between two bodies
for nn=1:n
theta3(nn)=tD(nn)+delta(nn)
end
theta2(u,1)=t2 %%theta 2
% theta3(u,1)=delta+tD %%theta3
% % P=A*(l2*exp(1i*t2)+l3*exp(1i*(theta3(u,1)))); %%length of distance between input and specific point P=A*(l2*exp(1i*t2)+l5*exp(1i*(alpha+theta3(nn))))
px(u,nn)=real(P(nn)); %%real measure
px(u,nn)=image(P(nn));%%imagine measure
end % G=sum(px)/n; %Sum of the x values and divide on total number of x % D=sum(py)/n; %Sum of the y values and divide on total number of y
% hold on % plot(px,py), xlabel('P_x (m)'), ylabel('P_y (m)'), title('Path of the point P') LowerBand = [4 2 1 3]; UpperBand = [5 2 3 9]; for ii = 1:length(LowerBand) x(:,ii) = LowerBand(ii)+(UpperBand(ii)-LowerBand(ii))*x(:,ii); end cost = ((x(:,1)) - (2)).^2 + ((x(:,3)) + (x(:,4))).^2;
i want to use this function to find best parameters of l1,l3 and l4. would you please guide me.?

댓글을 달려면 로그인하십시오.


Morteza.Moslehi
Morteza.Moslehi 2017년 1월 6일
Dears @Niels and @Walter Roberson thank you so much for your favor. finally i found my mistake.. is should write my inputs like below to find scalar amount NOt vector.
cost=zeros(size(x,1),1); for ii= 1:size(x) l1=x(ii,1); l2=2; l3=x(ii,3); l4=x(ii,4); l5=3; l6=4;

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by