下午3点在论坛上发贴问了一下判空,原来是isempty。

改到现在,终于运行成功!喜极而泣!!!72行代码,全部循环当家,拖了整整38天!平均下来是一天写2行的速度啊……必然贻笑大方。不过对我已经足够。

全部程序如下:

%变量说明:用m-2记录累积人数,用b存储邻接矩阵,用c存储一维作者及其编号列表,用d存放a数组的元素及其系数的对应关系

I=97;J=6;

m=2;dm=1;

for i=1:I; %搭建邻接矩阵的框架

for j=1:J;

    if ~isnan(a{i,j})

        d{dm}={a{i,j},dm,i,j};             %将a数组的元素、序号及位置信息读入d数组,包括重复

        dm=dm+1;

        c{m-1}={a{i,j},m-1};               %将a数组的元素及序号信息读入c数组,不包括重复

        if m>2

            for c1=1:m-2 

                if isequal(c{m-1}(1),c{c1}(1)) %若出现重复,则删除新读入的c{c1};

                    c{m-1}=[];

                    break;

                end

            end

        end         

        if ~isempty(c{m-1})

            b{1,m}=c{m-1}{1};

            b{m,1}=c{m-1}{1};

            b{m,m}=0;

            m=m+1;        

        end

    end

end

end

for d1=1:dm-2 % 给邻接矩阵赋值

for d2=d1+1:dm-1

    if isequal(d{d1}{1},d{d2}{1})          % 处理重复元素

        c2=1;                              % 读取重复者的序号:c2。

        while ~isequal(c{c2}{1},d{d1}{1})

            c2=c2+1;

        end

        e={};                              % 读取重复者同一行的序号

        e1=1;

        for d3=1:dm-1                

            if isequal(d{d3}{3},d{d2}{3})&(d3~=d2)

                e{e1}=[d{d3}{1}];

                e1=e1+1;

            end                

        end

        for e2=1:e1-1

            for c3=1:c1+1

                if isequal(c{c3}{1},e{e2})

                    b{c2+1,c3+1}=1;

                    b{c3+1,c2+1}=1;

                end

            end

        end

    else                                   %处理不重复元素

        if d{d1}{3}==d{d2}{3}              %这个序号也要转为c序号

            for c4=1:c1+1

                if isequal(c{c4}{1},d{d1}{1})

                    for c5=1:c1+1

                        if isequal(c{c5}{1},d{d2}{1})

                            b{c{c4}{2}+1,c{c5}{2}+1}=1;

                            b{c{c5}{2}+1,c{c4}{2}+1}=1;

                        end

                    end

                end

            end

        end          

    end        

end

end

for b1=2:c1+1

for b2=2:c1+1

    if isempty(b{b1,b2})

        b{b1,b2}=0;

    end

end

end

for b1=2:c1+2

for b2=2:c1+2

    if isempty(b{b1,b2})

        b{b1,b2}=0;

    end

end

end