本帖最后由 JasonE_Yang 于 2015-5-23 14:00 编辑
首先说一下我课题的大致内容,主要是算出等时间间隔上各点的坐标,然后转化成对应的三个角度。需要实现的是取100个点(n=100)之后可以在一个3*100的矩阵中列出所有的解。具体如何从坐标算出角度有固定的算式,是一个分段函数(用那个if语句实现,唯一变量就是时间t),计算角度的过程中会调用一个KMN函数,是原有的,这些都没问题不需要考虑。
我的程序是:
a=input('速度的输入加速度,要不我怎么知道它有多快 a=');
X=input('速度的输入横坐标,要不我怎么知道它在哪儿 X=');
Y=input('速度的输入横坐标,要不我怎么知道它在哪儿 Y=');
n=input('要几个点,随便说 n=');
s=0.2+sqrt(X.^2+Y.^2);
T=sqrt(8*s*pi/((2+pi)*a));
c=T/3;
d=2*c;
R=0.2;
r=0.135;
L=0.3;
l=0.78;
f=T/n;
theta=zeros(3,n);
for e=0:1:n;
t=e*f;
if t>=0,t<=T/8;
z=0.8-(-(T/(4*pi)).^2*a*sin(4*pi*t/T)+a*t*T/(4*pi));
x=0;
y=0;
end
if t>T/8,t<=c;
z=0.8-(0.5*a*t.^2+(1/(4*pi)-1/8)*a*T*t+(1/128-1/(16*pi^2))*a*T.^2);
x=0;
y=0;
end
if t>c,t<=3*T/8;
b=0.5*a*t.^2+(1/(4*pi)-1/8)*a*T*t+(1/128-1/(16*pi^2))*a*T.^2-0.1;
z=0.7;
y=Y*b*sqrt(1/(X.^2+Y.^2));
x=X*b*sqrt(1/(X.^2+Y.^2));
end
if t>3*T/8,t<=5*T/8;
b=-(T/(4*pi)).^2*a*cos(4*pi*(t-3*T/8)/T)+(1/(4*pi)+1/4)*a*t*T-a*T.^2/16-(0.5*a*(T/3)^2+(1/(4*pi)-1/8)*a*T.^2/3+(1/128-1/(16*pi^2))*a*T.^2);
y=Y*b*sqrt(1/(X.^2+Y.^2));
x=X*b*sqrt(1/(X.^2+Y.^2));
z=0.7;
end
if t>5*T/8,t<=d;
b=-0.5*a*t.^2+(1/(4*pi)+7/8)*a*t*T+(1/(16*pi^2)-33/128)*a*T.^2-(0.5*a*c^2+(1/(4*pi)-1/8)*a*c*T+(1/128-1/(16*pi^2))*a*T.^2);
y=Y*b*sqrt(1/(X.^2+Y.^2));
x=X*b*sqrt(1/(X.^2+Y.^2));
z=0.7;
end
if t>d,t<=7*T/8;
z=0.8-(0.5*a*c^2+(1/(4*pi)-1/8)*a*c*T+(1/128-1/(16*pi^2))*a*T.^2)-0.5*a*t.^2+(1/(4*pi)+7/8)*a*t*T+(1/(16*pi^2)-33/128)*a*T.^2-(-0.5*a*d^2+(1/(4*pi)+7/8)*a*T*d+(1/(16*pi^2)-33/128)*a*T.^2);
x=X;
y=Y;
end
if t>7*T/8,t<=T;
z=(T/(4*pi))^2*a*cos(4*pi*(t-7*T/8)/T)+a*t*T/(4*pi)+a*T.^2/8-(-0.5*a*d^2+(1/(4*pi)+7/8)*a*T*d+(1/(16*pi^2)-33/128)*a*T.^2)+0.8-(0.5*a*c^2+(1/(4*pi)-1/8)*a*c*T+(1/128-1/(16*pi^2))*a*T.^2);
y=Y;
x=X;
end
[K(1),M(1),N(1),K(2),M(2),N(2),K(3),M(3),N(3)]=KMN(x,y,z,R,r,L,l);
for i=1:3;
theta(i,1)=rad2deg(2*atan((-M(i)-sqrt(power(M(i),2)-4*K(i)*N(i)))/(2*K(i))));
end
end
计算结果是只填写了矩阵的第一列三个角度,其他都是0,而且唯一算的角度还是错误的角度。
当我把n步循环这些都删除之后,不输入n而是输入t,语句是正确的,但老师要求算出一百个点来,我可不想输入一百次t的值啊,希望一次能出来。
求各位大神帮个忙,应该是个比较简单的循环