Может быть, это должно быть опубликовано на Math.StackEchange , где уравнения могут быть набраны правильно, если вы хотите правильное теоретическое объяснение.Но если просто нужен код ...
Во-первых, если N
- это размерность вашей матрицы, это ограничивает значение k
до:
k=sqrt(1/N);
A(1,:) = k*ones(1,N);
Затем,вторая строка может быть построена с помощью:
A(2,:) = sqrt(0.5)*[1,-1,zeros(1,N-2)];
Это создает простой вектор, ортогональный первому.
Третья строка может быть вычислена с помощью:
aux = [1,1,-2,zeros(1,N-3)];
A(3,:) = aux/norm(aux);
четвертый:
aux = [1,1,1,-3,zeros(1,N-4)];
A(4,:) = aux/norm(aux);
и т. д.
Короче:
A=zeros(N);
k=sqrt(1/N);
A(1,:) = k*ones(1,N);
for i=2:N
aux = [ones(1,i-1),-(i-1),zeros(1,N-i)];
A(i,:) = aux/norm(aux);
end