MATLAB 程序求助

MATLAB 程序求助,第1张

??? Error: File: untitled.m Line: 8 Column: 1

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 ......,

代表不是脚本而是函数,里面的变量跟命令行里定义的变量无关。

如果是两个脚本或者脚本文件跟你手动敲的命令里,都定义了同样名字的变量或函数(同为变量或者同为函数),那后面执行的脚本或命令里的变量或函数就覆盖前面的,不过同样名字的变量跟函数间不会混淆的。

如果是脚本跟函数内部的同名变量,它们之间不会混淆的,函数内部的是局部变量,不受外部同名变量的影响。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12222345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存