2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение26.08.2021, 10:12 
Встроенная в Матлаб функция дает для заданного вектора ганкелеву матрицу, правый нижний угол которого заполнен нулями. Например:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
>> v=[1 2 3 4]
H=hankel(v)

v =

     1     2     3     4


H =

     1     2     3     4
     2     3     4     0
     3     4     0     0
     4     0     0     0
 
Мне нужно получить ганкелеву матрицу того же порядка, правый нижний угол которой является ее особенным единственным продолжением. Как?
P.S. О том, что это за продолжение см. Лемма 2 стр.242 вот здесь.

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение26.08.2021, 11:25 
До сюда вроде разобрался:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
% Делаем продолжение ганкелевой матрицы

% === Input Data ========
v=[1 2 3 4]

% ====== Algorithm ======
H=sym(hankel([v 0]));
s = sym('x', [1 size(v,2)+1]);
S=flipud(toeplitz(s));
for i=1:size(H,1)
    for j=1:size(H,2)
        if i+j<=5
            S(i,j)=0;
        end
    end
end
HS=H+S
Вот промежуточный результат:
Используется синтаксис Matlab M
HS =
 
[  1,  2,  3,  4, x1]
[  2,  3,  4, x1, x2]
[  3,  4, x1, x2, x3]
[  4, x1, x2, x3, x4]
[ x1, x2, x3, x4, x5]

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение26.08.2021, 12:51 
Уф, получилось! Выкладываю, может кому пригодится:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
% Делаем продолжение ганкелевой матрицы

% === Input Data ========
v=[1 2 3 4];

% ====== Algorithm ======
H=sym(hankel([v 0]));
s = sym('x', [1 size(v,2)+1]);
S=flipud(toeplitz(s));
for i=1:size(H,1)
    for j=1:size(H,2)
        if i+j<=5
            S(i,j)=0;
        end
    end
end
HS=H+S;
eqns=[];
for i=1:size(HS,1)
    eqns=[eqns sum(HS(i,:))==0];
end
SOL=solve(eqns, [s]);
C = struct2cell(SOL);
VS=zeros(1,size(HS,1));
for i=1:size(HS,1)
    VS(i)=C{i};
end
HVS=rot90(toeplitz(VS),1);
for i=1:size(H,1)
    for j=1:size(H,2)
        if i+j<=5
            HVS(i,j)=0;
        end
    end
end
HVS(:,end)=[];
HVS(end,:)=[];
res=HVS+hankel(v)
Результат:
Используется синтаксис Matlab M
>> hankelexTest

res =

     1     2     3     4
     2     3     4   -10
     3     4   -10     1
     4   -10     1     2

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение26.08.2021, 16:06 
Из статьи Иохвидов И. С. О ганкелевых матрицах и формах. // Ма-тем. сб., 1969, том 80, 241–252
Цитата:
Продолжением ганкелевой матрицы $H_{n-1}$ назовём ганкелеву матрицу $H_{n-1+\nu} = ||s_{i+j}||_{i,j=0}^{n-1+\nu}$ (при любом фиксированном $\nu=1,2,…,\infty$), у которой блок совпадает с матрицей $H_{n-1}$.
<..>
Если ранг матрицы $H_{n-1}$ равен $\rho$ ($ 0 \le \rho \le n$), то особыми продолжениями $H_{n-1+\nu}$ ($\nu = 1,2,\ldots$) назовём те продолжения матрицы $H_{n-1}$, ранги которых остаются равными $\rho$.
<…>
Лемма 2. Если ранг ганкелевой матрицы $H_{n-1}$ равен $\rho (<n)$ и $D_{\rho-1} \ne 0$, то у $H_{n-1}$ существует единственным образом определяющееся особое продолжение $H_n$.
Обратим внимание: особое продолжение строится для квадратной матрицы (по определению) и условием леммы 2 является равенство нулю определителя этой квадратной матрицы.
В приведенном выше сообщении задаётся вектор [1,2,3,4] — первая строка ганкелевой матрицы. Используя элементы этого вектора, можно получить при помощи функции hankel квадратную матрицу, но её определитель не равен нулю
Используется синтаксис Matlab M
>> MM = hankel([1,2,3,4])
MM =  1     2     3     4
      2     3     4     0
      3     4     0     0
      4     0     0     0
>> det(MM)
ans = 256
Продолжением матрицы 4x4 будет матрица 5x5.
maximkarimov в сообщении #1529675 писал(а):
Мне нужно получить ганкелеву матрицу того же порядка, правый нижний угол которой является ее особенным единственным продолжением. Как?
P.S. О том, что это за продолжение см. Лемма 2 стр.242 вот здесь.
Так как просят получить матрицу того же порядка, то, видимо, строится продолжение для матрицы, получающейся отбрасыванием последней строки и последнего столбца. Однако определитель такой матрицы не равен нулю
Используется синтаксис Matlab M
>> MM(:, 4) = []; MM(4, :)=[]
MM = 1     2     3
     2     3     4
     3     4     0
>> det(MM)
ans = 5.0000
Если ещё раз отбросить последнюю строку и столбец, то всё равно определитель не равен нулю. Т.е. как использовать лемму 2, не очевидно. Приведенная в качестве результата квадратная матрица имеет ранг 4, а матрица 3x3 ранг 3
Используется синтаксис Matlab M
>> M = [1,2,3,4; 2,3,4,-10; 3,4,-10,1; 4,-10, 1, 2]
M =  1     2     3     4
     2     3     4   -10
     3     4   -10     1
     4   -10     1     2
>> rank(M)
ans =  4
>> M(:, 4) = []; M(4, :) = []
M = 1     2     3
    2     3     4
    3     4   -10
>> rank(M)
ans =  3
Т.е. не является особым продолжением [как оно определено в статье Иохвидов И. С. О ганкелевых матрицах и формах.].

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение26.08.2021, 16:30 
Продолжение к исходной ганкелевой матрице H порядка n строю не отбрасыванием, а добавлением столбца и строки. Получаю матрицу H1 порядка $n+1$. Решаю. Затем отбрасываю лишние столбец и строку H1 - получаю матрицу Hex, порядок которой равен n. Элементы в правом нижнем углу Hex определены однозначно. Что не так?

P.S. Определитель равен 0 здесь:
Используется синтаксис Matlab M
     1     2     3     4   -10
     2     3     4   -10     1
     3     4   -10     1     2
     4   -10     1     2     3
   -10     1     2     3     4
 
И ранг у нее 4.

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение26.08.2021, 17:33 
Всё не так, поскольку не соответствует формулировкам статьи (я старательно цитировал их в своём предыдущем сообщении), а собственные Вы не привели. Заменим в приведенной матрице -10 на -1
Используется синтаксис Matlab M
>> M= [1,2,3,4; 2,3,4,-1; 3,4,-1,1; 4,-1, 1, 2]
M =  1     2     3     4
     2     3     4    -1
     3     4    -1     1
     4    -1     1     2
>> rank(M)
ans = 4
Матрица имеет одинаковые элементы вдоль линий, перпендикулярных главной диагонали; ранг матрицы 4. Где же единственность?

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение26.08.2021, 17:52 
Единственность имеет особое продолжение исходной матрицы в терминах цитируемого автора. А если говорить о произвольном продолжении, то вариантов действительно счетное множество (Лемма 1)! :D

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение27.08.2021, 00:20 
maximkarimov
Номер раз:
maximkarimov в сообщении #1529675 писал(а):
Мне нужно получить ганкелеву матрицу того же порядка, правый нижний угол которой является ее особенным единственным продолжением. Как?

(что уже ерунда, правый нижний угол не может быть продолжением. Уточните собственную терминологию и согласуйте с терминологией источника)
maximkarimov в сообщении #1529714 писал(а):
Продолжение к исходной ганкелевой матрице H порядка n строю не отбрасыванием, а добавлением столбца и строки. Получаю матрицу H1 порядка $n+1$.

Номер два. Вам вроде нужна была матрица того же порядка.

Приведите постановку задачи, пожалуйста. Иначе Вам никто не сможет помочь.

 
 
 
 Re: Матлаб: как получить особое продолжение ганкелевой матрицы?
Сообщение27.08.2021, 08:33 
Да я, собственно, разобрался уже, спасибо.
Что до формалистики, то строгая формулировка моей задачи такая: построить ганкелеву матрицу порядка n, первым столбцом которой является (любой) вектор v размера n, а остальные элементы определены ее особым продолжением порядка $n+1$.
Причесанный код:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
function [res] = hankelex(v)
H=sym(hankel([v 0]));
s = sym('x', [1 size(v,2)+1]);
S=flipud(toeplitz(s));
for i=1:size(H,1)
    for j=1:size(H,2)
        if i+j<=size(H,1)
            S(i,j)=0;
        end
    end
end
HS=H+S;
% составляем и решаем систему уравнений
eqns=sym(zeros(1,size(HS,1)));
for i=1:size(HS,1)
    eqns(i)=sum(HS(i,:))==0;
end
SOL=solve(eqns, [s]);
% вытаскиваем решения из структуры и формируем результат
C = struct2cell(SOL);
VS=zeros(1,size(HS,1));
for i=1:size(HS,1)
    VS(i)=C{i};
end
HVS=rot90(toeplitz(VS),1);
for i=1:size(H,1)
    for j=1:size(H,2)
        if i+j<=size(H,1)
            HVS(i,j)=0;
        end
    end
end
HVS(:,end)=[];
HVS(end,:)=[];
res=double(HVS+hankel(v));
end


-- 27.08.2021, 09:55 --

Замечание: существование и единственность особого продолжения ганкелевой матрицы - гениальное открытие И.С. Иохвидова.

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group