matlab如何进行n次循环,如何实现n次循环,并将结果显示在矩阵中

时间:2025-01-15 07:01:17

本帖最后由 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的值啊,希望一次能出来。

求各位大神帮个忙,应该是个比较简单的循环