matlab中调用函数,为什么总是说被调用的函数未定义呢?

clear all; close all;

a=[1 -1.6065 0.6065]; b=[0.1065 0.0902]; d=3; Am=[1 -1.3205 0.4966];
na=length(a)-1; nb=length(b)-1; nam=length(Am)-1;
??? Undefined command/function 'diophantine'.
nf1=nb+d+2-(na+1)+1; ng=2;

[F,G]=diophantine(conv(a,[1 -1]),b,d,1,Am);
F1=conv(F,[1 -1]); R=sum(G);

L=400;
uk=zeros(d+nb,1);
yk=zeros(na,1);
yr=10*[ones(L/4,1);-ones(L/4,1);ones(L/4,1);-ones(L/4,1)];
e=2*ones(L,1);

for k=1:L
time(k)=k;
y(k)=-a(2:na+1)*yk+b*uk(d:d+nb)+e(k);
u(k)=(-F1(2:nf1+1)*uk(1:nf1)+R*yr(k)-G*[y(k);yk(1:ng)])/F1(1);¿

for i=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);

for i=na:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
end
subplot(2,1,1);
plot(time,yr(1:L),'r:',time,y);
xlabel('t'); ylabel('y_r(t)、y(t)');
legend('y_r(t)','y(t)');
subplot(2,1,2);
plot(time,u);
xlabel('t'); ylabel('u(t)');

function [F1,G]=diophantine(A,B,d,A0,Am)

dB=[zeros(1,d) B];
na=length(A)-1; nd=length(dB)-1;
T1=conv(A0,Am); nt=length(T1); T=[T1';zeros(na+nd-nt,1)];

AB=zeros(na+nd);
for i=1:na+1
for j=1:nd
AB(i+j-1,j)=A(i);
end
end
for i=1:nd+1
for j=1:na
AB(i+j-1,j+nd)=dB(i);
end
end
L=(AB)\T;
F1=[ L(1:nd)]';
G=[ L(nd+1:na+nd)]';
??? Undefined command/function 'diophantine'在最后

可能是你这个m文件的名称没有和自定义的函数名称一致。应该要一样的,保存之后才能成功调用。因为我刚刚发现我就在这里出错了,把m文件命名成了work2,但是函数名定义的时候写的f2。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-08
是不你这个函数所在文件夹路径没加对??就是工作空间上面那个路径。
要么就是你函数写法错误。
第2个回答  2010-05-08
调用函数和主函数要分别写在两个文件中本回答被提问者采纳
相似回答