function [r,x,k,errout,G,F]=maxeigten1(A)
%输入m阶n维的非负张量A
%返回A的最大特征值r 对应特征向量x 和迭代次数k
%[r,v,k]=maxeigten1(A)

%判定是不是非负
tic
if ~isempty(A(A<0))
    error('A must be nonnegative.');
end

err=10^(-8);
q=size(A);
n=q(1);
m=size(q,2);

%构造单位张量
tm=-inf;
for i=1:n
    q=i*ones(1,m);
    a(i)=indnum(q,m,n); %把下标转换为A的序列号 比如4阶3维的张量A的下标(1,1,2,1)就对应4，这样做的目的是给A赋值方便，因为matlab不支持不确定下标输入。
    tm=max(abs(A(a(i))),tm);
end

for i=1:n
    A(a(i))=A(a(i))+tm;
end

%开始算法
% B=A+tm*I;
x=ones(n,1);
flag=1;k=1;kmax=100;

sstr=substr1(m-1,n);

A=reshape(A,n,n^(m-1))';
y=zeros(n,1);
for i=1:n
    y(i,1)=sum(prod([A(:,i),x(sstr)],2));
end

% disp('start');
while flag&&k<=kmax
    k
    x=(y/max(y)).^(1/(m-1));

    for i=1:n
        y(i,1)=sum(prod([A(:,i),x(sstr)],2));
    end

    %构建F 和 G
    temp=y(x>0)./x(x>0).^(m-1);% 点运算对每个元素执行
    F=min(temp);G=max(temp);
    if G-F<=err
        flag=0;
        r=(G+F)/2-1;

    else
        k=k+1;
    end
end
for i=1:n
    err(i,1)=y(i)-(r+1)*x(i)^(m-1);
end
G=G-1;
F=F-1;
errout=norm(err);
toc