
Matlab调试时出现“??? Input argument "A" is undefined.这个是什么意思?.请哪位高手指点,谢谢!
我代码如下:如何改才好?functiony=diaglink(A,B)if~besquare(A)|~besquare(B)error('Thematrixyouinpu...
我代码如下:如何改才好?
function y=diaglink(A,B)
if~besquare(A)|~besquare(B)
error ('The matrix you input is not a Jordan one');
return;
end
if isempty(A)
if length(B)>1
y=diag(diag(A))+dia(diag(B,1),1);
else
y=B;
end
elseif isempty(B)
if length(A)>1
y=diag(diag(A))+diag(diag(A,1),1);
else
y=A;
end
else
da=diag(A)';
db=diag(B)';
da1=diag(A,1)';
db1=diag(B,1)';
if length(A)==1
da1=[];
end
if length(B)==1
db1=[];
end
d=[da db];
d1=[da1 0 db1];
c1=diag(d);
c2=diag(d1,1);
y=c1+c2;
end
function y=besquare(A)
c=size(A);
nx=c(1);
ny=c(2);
y=1;
if nx~=ny
y=0;
return;
end
function[ks,kn,kr]=cc(A)
[v e]=eig(A);
e=diag(e);
ne=length(e);
for i=1:ne-1
for j=i+1:ne
if e(i)>e(j)
temp=e(i);e(i)=e(j);e(j)=temp;
end
end
end
e=real(e);
f=e;
n=length(A);
ks=[];kn=[];kr=[];
while~isempty(e)
c=e(1);
ks=[ks c];
s=sum(abs(e-c)<0.0001);
F=v(:,find(abc(f-c)<0.0001));
r=rank(F);
kn=[kn s];
kr=[kr r];
e(find(abc(e-c)<0.0001))=[];
end
function y=lk(k,n)
n=fix(n);
if n<1
error('the argument n should be great than 0');
return
end
if n==1
y=k;
elseif n>1
c=diag(ones(1,(n-1)),1);
d=k*eye(n);
y=c+d;
end
function[cc,y]=lkk(A,k,v)
n=length(v);
AA=A-k*eye(length(A));
D=null(AA);
kk=1;
cc=[];
y=[];
for i=1:n
for j=1:v(i)
cc=[cc D(:,kk)];
b=D(:,kk);
for l=2:i
x=pinv(AA)*b;
cc=[cc x];
b=x;
end
kk=kk+1;
c=lk(k,i);
y=diaglink(c,y);
end
end
function[p,y]=jordan(A)
if~besquare(A)
error('The Matrix must be square');
return
end
y=[];
n=length(A);
p=[];
if n==0
error('The Matrix should not be empyt');
return;
end
if n==1
p=1;
y=A;
return
end
y=[];
n=length(A);
p=[];
[ks kn kr]=cc(A);
for i=1:length(ks)
v=[];
if kn(i)==1
v(1)=1;
elseif kr(i)==1
v(kn(i))=1;
elseif kn(i)==kr(i)
v(1)=kn(i);
else
v(1)=0;
RA=A-ks(i)*eye(n);
j=2;
while 1
v(j)=rank(RA^(j-1))+rank(RA^(j+1))-2*rank(RA^j);
ss=0;
rr=0;
for ii=2:j
ss=ss+ii*v(ii);
rr=rr+v(ii);
end
aa=kn(i)-ss;
if aa==(kr(i)-rr)
v(1)=aa;
break;
end
j=j+1;
end
end
[cc AA]=lkk(A,ks(i),v);
p=[p cc];
y=diaglink(y,AA);
end
这段运行后如何给两个参数A和B的数值?如何运行?请哪位高手详细给我讲一下,谢谢 展开
function y=diaglink(A,B)
if~besquare(A)|~besquare(B)
error ('The matrix you input is not a Jordan one');
return;
end
if isempty(A)
if length(B)>1
y=diag(diag(A))+dia(diag(B,1),1);
else
y=B;
end
elseif isempty(B)
if length(A)>1
y=diag(diag(A))+diag(diag(A,1),1);
else
y=A;
end
else
da=diag(A)';
db=diag(B)';
da1=diag(A,1)';
db1=diag(B,1)';
if length(A)==1
da1=[];
end
if length(B)==1
db1=[];
end
d=[da db];
d1=[da1 0 db1];
c1=diag(d);
c2=diag(d1,1);
y=c1+c2;
end
function y=besquare(A)
c=size(A);
nx=c(1);
ny=c(2);
y=1;
if nx~=ny
y=0;
return;
end
function[ks,kn,kr]=cc(A)
[v e]=eig(A);
e=diag(e);
ne=length(e);
for i=1:ne-1
for j=i+1:ne
if e(i)>e(j)
temp=e(i);e(i)=e(j);e(j)=temp;
end
end
end
e=real(e);
f=e;
n=length(A);
ks=[];kn=[];kr=[];
while~isempty(e)
c=e(1);
ks=[ks c];
s=sum(abs(e-c)<0.0001);
F=v(:,find(abc(f-c)<0.0001));
r=rank(F);
kn=[kn s];
kr=[kr r];
e(find(abc(e-c)<0.0001))=[];
end
function y=lk(k,n)
n=fix(n);
if n<1
error('the argument n should be great than 0');
return
end
if n==1
y=k;
elseif n>1
c=diag(ones(1,(n-1)),1);
d=k*eye(n);
y=c+d;
end
function[cc,y]=lkk(A,k,v)
n=length(v);
AA=A-k*eye(length(A));
D=null(AA);
kk=1;
cc=[];
y=[];
for i=1:n
for j=1:v(i)
cc=[cc D(:,kk)];
b=D(:,kk);
for l=2:i
x=pinv(AA)*b;
cc=[cc x];
b=x;
end
kk=kk+1;
c=lk(k,i);
y=diaglink(c,y);
end
end
function[p,y]=jordan(A)
if~besquare(A)
error('The Matrix must be square');
return
end
y=[];
n=length(A);
p=[];
if n==0
error('The Matrix should not be empyt');
return;
end
if n==1
p=1;
y=A;
return
end
y=[];
n=length(A);
p=[];
[ks kn kr]=cc(A);
for i=1:length(ks)
v=[];
if kn(i)==1
v(1)=1;
elseif kr(i)==1
v(kn(i))=1;
elseif kn(i)==kr(i)
v(1)=kn(i);
else
v(1)=0;
RA=A-ks(i)*eye(n);
j=2;
while 1
v(j)=rank(RA^(j-1))+rank(RA^(j+1))-2*rank(RA^j);
ss=0;
rr=0;
for ii=2:j
ss=ss+ii*v(ii);
rr=rr+v(ii);
end
aa=kn(i)-ss;
if aa==(kr(i)-rr)
v(1)=aa;
break;
end
j=j+1;
end
end
[cc AA]=lkk(A,ks(i),v);
p=[p cc];
y=diaglink(y,AA);
end
这段运行后如何给两个参数A和B的数值?如何运行?请哪位高手详细给我讲一下,谢谢 展开
1个回答
展开全部
这个程序是调用的 不能直接运行 在命令区调用的方法是输入A= B= 然后diaglink(A,B)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询