out=sim('HydraulicComponents_pid2',[0,5]); % y=out.yout;怎么将y画图
时间: 2024-03-09 21:49:07 浏览: 87
要将模型输出变量 "y" 画成图形,可以使用matlab中的plot函数。plot函数可以用来绘制一维图形,它的基本语法如下:
```
plot(x,y)
```
其中,x和y分别是要绘制的数据的横坐标和纵坐标。下面是一个示例代码,可以将模型输出变量 "y" 的值在时间域上绘制出来:
```
out = sim('HydraulicComponents_pid2',[0,5]);
y = out.yout;
t = out.tout;
plot(t, y)
xlabel('Time (s)')
ylabel('Output')
title('Model Output')
```
在这个示例代码中,我们首先运行模型并将输出结果存储在变量 "out" 中。然后,我们从 "out" 中提取 "yout" 和 "tout" 变量的值,并将它们分别存储在变量 "y" 和 "t" 中。最后,我们使用plot函数将 "y" 变量的值绘制在时间域上,并添加了一些标签和标题来说明图形。运行这个代码,就可以得到一个表示模型输出变量 "y" 的时间波形图。
相关问题
%Delay Control with Dalin Algorithm clear all; close all; ts=0.5; %Plant sys1=tf([1],[0.4,1],'inputdelay',0.76); dsys1=c2d(sys1,ts,'zoh'); [num1,den1]=tfdata(dsys1,'v'); %Ideal closed loop sys2=tf([1],[0.15,1],'inputdelay',0.76); dsys2=c2d(sys2,ts,'zoh'); %Design Dalin controller dsys=1/dsys1*dsys2/(1-dsys2); [num,den]=tfdata(dsys,'v'); u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0; y_1=0.0; error_1=0.0;error_2=0.0;error_3=0.0; ei=0; for k=1:1:50 time(k)=k*ts; rin(k)=1.0; %Tracing Step Signal yout(k)=-den1(2)*y_1+num1(2)*u_2+num1(3)*u_3; error(k)=rin(k)-yout(k); M=1; if M==1 %Using Dalin Method u(k)=(num(1)*error(k)+num(2)*error_1+num(3)*error_2+num(4)*error_3... -den(3)*u_1-den(4)*u_2-den(5)*u_3-den(6)*u_4-den(7)*u_5)/den(2); elseif M==2 %Using PID Method ei=ei+error(k)*ts; u(k)=1.0*error(k)+0.10*(error(k)-error_1)/ts+0.50*ei; end %----------Return of dalin parameters------------ u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_1=yout(k); error_3=error_2;error_2=error_1;error_1=error(k); end plot(time,rin,'b',time,yout,'r'); xlabel('time(s)');ylabel('rin,yout');
这段代码实现了一个使用大林算法进行延迟控制的控制器。在第8-13行中,定义了待控制的系统和理想闭环系统,并将它们离散化。接下来,使用大林算法设计控制器,计算出控制器的分子和分母系数(第15-16行)。
在主循环内(第18-43行),首先计算出待控制系统的输出和误差信号,并根据选择的控制方法计算出控制器的输出。如果选择的是大林算法(M=1),则使用大林算法计算控制器的输出;如果选择的是PID方法(M=2),则使用PID方法计算控制器的输出。最后,更新控制器的历史输入输出和误差数据(第38-42行)。
这段代码中可能会出现的错误是,由于待控制系统具有延迟,因此在使用大林算法计算控制器输出时可能会出现非因果模型的情况(第25行)。如果使用非因果模型进行计算,则会出现线性代数运算错误。为了解决这个问题,您可以尝试使用因果模型或对延迟进行补偿。
load Z_data2.mat %加载Z数据 i=1; % %%%--------------------------------- f = 1e6:1e5:100e6; r=3.9904e-3; D=15.8e-3; mu_c=12.5664e-7; sigma_c=5.8e7; epslon=8.85e-12; tdelta = -5.7e-10.*f+0.075; delta = sqrt(1./pi./f./mu_c./sigma_c); R_solid = 1./pi./r./delta./sigma_c; R = (D./2./r)./sqrt((D./2./r).^2-1).*R_solid; Ls = R./2./pi./f; Lm = mu_c/pi*acosh(D/2/r); L = Ls+Lm; C = pi*epslon/acosh(D/2/r); G = 2.*pi.*f.*C.*tdelta; temp_a = complex(R, 2.*pi.*f.*L); temp_b = complex(G, 2.*pi.*f.*C); gama = sqrt(temp_a.*temp_b); z0 = sqrt(L./C); alfa = R./2./z0+G.*z0./2; beta = 2.*pi.*f.*sqrt(L.*C); gama = alfa+beta.*1i; F0=zeros(1,991); g=gama; %给γh赋值 %%%----------------------------------- M = zeros(1, 991); % 创建1x991的矩阵M,初始值为0 i = 1; %%%--------------------------------------- syms f F0=zeros(1,991); for x=0:100/991:100 for i=1:991 f0=Z_data2.*exp(-2.*gama.*x);%被积函数f0(f,x) F0=int(f0,f,1e6,100e6);%对f积分的F(x) end end figure(1) %图像1 xout = 0:100/991:100; yout = double(subs(F0,x,xout)); plot(xout,F0) xlabel('x') ylabel('h(x)') title('h(x)关于x的二维曲线')该程序中有什么问题
在程序中存在以下问题:
1. 在第一行加载数据文件Z_data2.mat时,应该加上文件名的引号,即改为load('Z_data2.mat')。
2. 在第38行,应该将F0的初始值设为一个与xout相同大小的矩阵,即F0=zeros(size(xout))。
3. 在第14行,gama的计算公式中,应该将beta的计算公式改为beta = 2.*pi.*f.*sqrt(L.*C)。
4. 在第30行,应该将gama的计算公式改为gama = sqrt(temp_a.*temp_b)。
5. 在第32行,应该将z0的计算公式改为z0 = sqrt(L./C)。
6. 在第33行,应该将alfa和beta的计算公式改为alfa = R./2./z0+G.*z0./2; beta = 2.*pi.*f.*sqrt(L.*C)。
7. 在第34行,gama的计算公式已经在第30行中计算了,无需再次计算。
8. 在第36行,将gama的值赋给g时,应该取gama的实部和虚部,即g = real(gama) + imag(gama)*1i。
9. 在第48行,应该将xout和F0的顺序颠倒,即plot(F0, xout),才能正确绘制出关于x的二维曲线。
10. 在第20行,应该将f0的计算公式中的x改为i,即f0=Z_data2.*exp(-2.*gama.*i)。
11. 在第21行,应该将int函数的参数f改为符号变量f,即F0=int(f0,f,1e6,100e6)。
12. 在第38行,应该将yout的计算公式改为yout = double(subs(F0,xout))。
综上所述,修正后的程序如下:
```
load('Z_data2.mat') % 加载Z数据
f = 1e6:1e5:100e6;
r = 3.9904e-3;
D = 15.8e-3;
mu_c = 12.5664e-7;
sigma_c = 5.8e7;
epslon = 8.85e-12;
tdelta = -5.7e-10.*f+0.075;
delta = sqrt(1./pi./f./mu_c./sigma_c);
R_solid = 1./pi./r./delta./sigma_c;
R = (D./2./r)./sqrt((D./2./r).^2-1).*R_solid;
Ls = R./2./pi./f;
Lm = mu_c/pi*acosh(D/2/r);
L = Ls+Lm;
C = pi*epslon/acosh(D/2/r);
G = 2.*pi.*f.*C.*tdelta;
temp_a = complex(R, 2.*pi.*f.*L);
temp_b = complex(G, 2.*pi.*f.*C);
gama = sqrt(temp_a.*temp_b);
z0 = sqrt(L./C);
alfa = R./2./z0+G.*z0./2;
beta = 2.*pi.*f.*sqrt(L.*C);
g = real(gama) + imag(gama)*1i; % 给g赋值
M = zeros(1, 991); % 创建1x991的矩阵M,初始值为0
F0 = zeros(size(xout)); % 给F0赋初值
for x = 0:100/991:100
for i = 1:991
syms f
f0 = Z_data2(i).*exp(-2.*g.*x); % 被积函数f0(f,x)
F0(i) = int(f0, f, 1e6, 100e6); % 对f积分的F(x)
end
end
figure(1) % 图像1
xout = 0:100/991:100;
yout = double(subs(F0, xout));
plot(yout, xout)
xlabel('x')
ylabel('h(x)')
title('h(x)关于x的二维曲线')
```
阅读全文