早教吧 育儿知识 作业答案 考试题库 百科 知识分享

初学matlab,遇到一个问题,就是前面定义了u但是没有定义u(i),怎么后面突然用上了直接用上了u(i)clearall;closeall;h=0.3;%设置步长l=15/h;%求得步数lz=[-1-2];p=[-4-0.5+j-0.5-j];k=2.5;[A,B,C,D]=zp2ss(z,p,

题目详情
初学matlab,遇到一个问题,就是前面定义了u但是没有定义u(i),怎么后面突然用上了直接用上了u(i)
clear all;
close all;
h=0.3; %设置步长
l=15/h; %求得步数l
z=[-1 -2];
p=[-4 -0.5+j -0.5-j];
k=2.5;
[A,B,C,D]=zp2ss(z,p,k); %将零极点转换成状态方程x'(t)=Ax(t)+Bu(t);y(t)=Cx(t)+Du(t);
u=1*ones(l,1);
u0=0 %设定初值
n=length(p); %求得极点的个数;对象阶次
x0=zeros(n,1); %x0初始值设为0
xe0=zeros(n,1); %Xe0初始值也设为0
for i=1:l
time(i)=i*h;
%欧拉法
xe=xe0+h*(A*xe0+B*u0);%X(k+1)=X(k)+h*f(X,t)
ye(i)=C*xe; %y=Cx
%Runge-Kutta
k1=A*x0+B*u0; %k1=f(x,u)
k2=A*(x0+h*k1/2)+B*u0;%k2=f(x+h/2,u+k1/2)
k3=A*(x0+h*k2/2)+B*u0;%k3=f(x+h/2,u+k2/2)
k4=A*(x0+h*k3)+B*u0; %k4=f(x+h,u+k3)
x=x0+h*(k1+2*k2+2*k3+k4)/6;
y(i)=C*x;
%updata datas
u0=u(i); %
x0=x;
xe0=xe;
end
plot(time,u,'k-',time,ye,':',time,y,'r');
xlabel('t');ylabel('y_r(t)、y(t)');
legend('y_r(t) ','Euler:y(t)','Runge-Kutta:y(t)');
▼优质解答
答案和解析
由这h=0.3; l=15/h;两句结果:l =50
u=1*ones(l,1);-----------产生50行1列的全1列向量
所以从这句以后,u就是一个有50个元素的全1列向量了
当然有u(1)、u(2).u(50)了