Function definitions are not permitted at the prompt or in scripts.
这个是提示说你写的函数文件要单独建立在一个函数文件中,而不能直接将函数放在脚本文件中。具体方法如下:
一、先建立主程序 main.m
%define the sequence of the program
[A,B,U,Y,M]=define_matrix()
[H,D,I,R1,C2,C1,R2,P,Cd,RO,Q0,X1,P0,G]=input_parameter()
[X2,C,A1]=calculation_parameter(Q0,Cd,P,R2,D,RO,G)
[M]=calculation_matrix(M,A,B,U,Y,I,R1,C2,C1,R2,P0,P,X2,X2,A1,Q0,H,C)
graph_plot(M)
二、建立函数文件1 define_matrix.m
function [A,B,U,Y,M]=define_matrix()
%A_state_matrix
A=zeros(3,3)
%B=input_matrix
B=zeros(3,2)
%U_input_vector
U=zeros(2,1)
%Y_state_matrix
Y=zeros(3,1)
%M_output_matrix
M=zeros(1000,4)
三、建立函数文件2 input_parameter.m
function [H,D,I,R1,C2,C1,R2,P,Cd,RO,Q0,X1,P0,G]=input_parameter()
%步长H(s),阀芯直径D(cm),惯性质袜穗岁量I(kg),阀孔阻尼R1(bar_s/cm3)
%d簧柔度C2(cm/kg),管道液容C1(cm3/bar),泄油液阻R2(bar_s/cm3)
%设定压力P(bar),初始压力P0(bar),流量系数Cd,油液密度RO(kg/cm3)
%泵理论流量Q0(cm3/s),阀口遮盖量X1(cm),重力加速度G(cm/s2)
H=6e-5D=1.2I=6.3e-5R1=0.4R2=1.5C2=0.02
C1=0.08P=30Cd=0.7RO=0.0009Q0=460X1=0.14P0=6G=981
四、建立函数文件3 calculation_parameter.m
function [X2,C,A1]=calculation_parameter(Q0,Cd,P,R2,D,RO,G)
PI=3.1415926
X2=(Q0-P/R2)/(Cd*PI*D*sqrt(2*G*P/RO))
C=-Cd*PI*D*sqrt(2*G/RO)
A1=PI*D*D/4
五、建告睁立函数文件4 calculation_matrix.m
function [M]=calculation_matrix(M,A,B,U,Y,I,R1,C2,C1,R2,P0,P,X1,
X2,A1,Q0H,C)
T=0
A(1,1)=-A1*A1*R1/IA(1,2)=-1/C2A(1,3)=A1/C1
A(2,1)=1/IA(3,1)=-A1/IA(3,3)=-1/(R2*C1)
B(1,1)=-1B(3,2)=1
U(1)=P*A1-(X1+X2)/C2U(2)=Q0
Y(1)=0Y(2)=0Y(3)=P0*C1
M(1,1)=0M(1,2)=Y(1)/IM(1,3)=Y(2)M(1,4)=P0
for j=1:1000,
[Y,T]=R_T(A,B,U,Y,H,X1,C,C1,T)
M(j+1,1)=TM(j+1,2)=Y(1)/IM(j+1,3)=Y(2)M(j+1,4)=Y(3)/C1
end
六、建立函数文件5 R_T.m
function [Y,T]=R_T(A,B,U,Y,H,X1,C,C1,T)
%constrain
if Y(2)<族判0
Y(2)=0
end
if Y(2)==0&&Y(1)<0
Y(1)=0
end
%nonlinear_situation
if Y(2)>X1
A(3,3)=A(3,3)+C*(Y(2)-X1)*sqrt(Y(3)/C1)
end
W=1/3*[0.5,1,1,0.5]
Q=[0.5,0.5,1,0]
TW=TBB=YYW=Y
for i=1:4
Dy=A*Y+B*U
T=TW+W(i)*H
Y=YW+H*Q(i).*Dy
BB=BB+H*W(i).Dy
end
Y=BB
if Y(2)<0
Y(2)=0
else
if Y(2)==0&&Y(1)<0
Y(1)=0
end
end
七、建立函数文件6 graph_plot.m
function graph_plot(M)
%%plot_graph
figure(1)
plot(M(:,1),M(:,2))
figure(2)
plot(M(:,1),M(:,3))
figure(3)
plot(M(:,1),M(:,4))
length(x)函数是求x的长度,如果x是向量,那就是向哪坦链量长度或者说元素个数。
如果x是矩阵,那等于max(size(x)),也就是各维长度的最大值。比如二维的就是行数和列数的最大值。
你说P=length(generator)单独执行不了,
当然是了,要先有generator才能调用length()函数,要不它求谁的长度啊?
这个跟第一段里的length不同。
第一段的length是你自己定义的变量,而第三段的length()是个函数。
而且第一段是脚本文件或者信毁说命令文件,相当于把命令行执行的一系列命令保存到一个m文件李孙里。
而第二、三段是函数文件,虽然也是m文件,但首行是function ......,
代表不是脚本而是函数,里面的变量跟命令行里定义的变量无关。
如果是两个脚本或者脚本文件跟你手动敲的命令里,都定义了同样名字的变量或函数(同为变量或者同为函数),那后面执行的脚本或命令里的变量或函数就覆盖前面的,不过同样名字的变量跟函数间不会混淆的。
如果是脚本跟函数内部的同名变量,它们之间不会混淆的,函数内部的是局部变量,不受外部同名变量的影响。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)