HankelMatrix[n]
第1行と第1列が連続する整数である n×n のハンケル(Hankel)行列を返す.
HankelMatrix[{c1,c2,…,cn}]
第1列が成分 c1, c2, … からなるハンケル行列を返す.
HankelMatrix[{c1,c2,…,cm},{r1,r2,…, rn}]
第1列の成分が ci,最終行の成分が riのハンケル行列を返す.
HankelMatrix
HankelMatrix[n]
第1行と第1列が連続する整数である n×n のハンケル(Hankel)行列を返す.
HankelMatrix[{c1,c2,…,cn}]
第1列が成分 c1, c2, … からなるハンケル行列を返す.
HankelMatrix[{c1,c2,…,cm},{r1,r2,…, rn}]
第1列の成分が ci,最終行の成分が riのハンケル行列を返す.
詳細とオプション
- ハンケル行列は,通常,近似理論,関数解析,数値解析,信号処理等に関連した応用で使われる.
- ハンケル行列は,その反対角行列に沿って一定の行列である.ハンケル行列
の成分は,
のときは
で,それ以外のときは
で与えられる. - 成分 cmは r1と同じでなければならない. »
- m=n のとき,ハンケル行列は対称行列で,成分 ciと rjが実数なら実固有値を持つ.
- HankelMatrix[…,TargetStructure->struct]はハンケル行列を struct で指定された形式で返す.次は,その可能な設定である.
-
Automatic 返す際の表現を自動選択する "Dense" 行列を密な行列として表す "Structured" 行列を構造化配列として表す "Symmetric" 行列を対称行列として表す - HankelMatrix[…,TargetStructureAutomatic]の設定では,行列の成分数が設定された閾値未満の場合は密な行列が返され,それ以外の場合は構造化配列が返される.
- 構造化されたHankelMatrix sa は,次の特性"prop"に sa["prop"]でアクセスできる.
-
"ColumnVector" 第1列の成分のベクトル "RowVector" 最終行の成分のベクトル "Properties" サポートされる特性のリスト "Structure" 構造化配列の型 "StructuredData" 構造化配列で保存されている内部データ "StructuredAlgorithms" 構造化配列に対して特別なメソッドを持つ関数のリスト "Summary" Datasetとして表される要約情報 - Normal[HankelMatrix[…]]は構造化ハンケル行列を通常の行列に変換する.
例題
すべて開く すべて閉じる例 (3)
スコープ (9)
N[HankelMatrix[3]]//MatrixFormHankelMatrix[{1., 2., 3.}, {3., 2., 1.}]//MatrixFormN[HankelMatrix[3], 20]//MatrixFormHankelMatrix[{1`20, 2`20, 3`20}, {3`20, 2`20, 1`20}]//MatrixFormHankelMatrix[{1, 1 + 2 I, 3 + 4 I}]//MatrixFormHankelMatrix[{1, 1 + 2 I, 3 + 4 I}, {3 + 4I, 5 + 6 I, 7 + 8 I}]//MatrixFormHankelMatrix[{1, 2, 3, 4}, {4, 5, 6, 0, 0, 0}] //MatrixFormHankelMatrix[{1, 2, 3, 4, 5, 6}, {6, 0, 0, 0}] //MatrixFormhm[n_] := HankelMatrix[Array[Subscript[𝒽, #]&, n], Array[Subscript[𝒽, #]&, n, n]]hm[5] // MatrixFormhm = HankelMatrix[N[Range[100]], N[Range[100, 199]], TargetStructure -> "Structured"]ByteCount[hm]ByteCount[Normal[hm]]HankelMatrixオブジェクトには配列についての情報を与える特性が含まれる:
hm = HankelMatrix[1 / Range[2, 5]!, 1 / Range[5, 8]!, TargetStructure -> "Structured"]hm["Properties"]"ColumnVector"特性はハンケル行列の第1列を与える:
hm["ColumnVector"]hm["RowVector"]"Summary"特性は配列についての情報の簡単な要約を与える:
hm["Summary"]"StructuredAlgorithms"特性は構造化アルゴリズムを持つ関数のリストを与える:
hm["StructuredAlgorithms"]構造化アルゴリズムは,適切な場合は別のHankelMatrixオブジェクトを返す:
hm = HankelMatrix[1 / (10 - 2Range[5] + 1), 1 / (3 - 2Range[3]), TargetStructure -> "Structured"]転置もまたHankelMatrixである:
Transpose[hm]Transpose[hm].hmHankelMatrix[(| | | | |
| ----- | ----- | ------ | ------ |
| (1/7) | (1/5) | (1/3) | 1 |
| (1/5) | (1/3) | 1 | -1 |
| (1/3) | 1 | -1 | -(1/3) |
| 1 | -1 | -(1/3) | -(1/5) |)]オプション (2)
TargetStructure (2)
HankelMatrix[3, TargetStructure -> "Dense"]HankelMatrix[3, TargetStructure -> "Structured"]HankelMatrix[3, TargetStructure -> "Symmetric"]TargetStructureAutomaticの設定のとき,小さい次元については密な行列が返される:
HankelMatrix[5, TargetStructure -> Automatic]HankelMatrix[10000, TargetStructure -> Automatic]アプリケーション (4)
次パデ(Padé)近似はハンケル行列式を使って計算できる.Exp[z]のベキ級数の最初の 2n+1の部分和を生成する:
n = 5;
Short[psum = Accumulate[Table[(x^k/k!), {k, 0, 2n}]]]Δ2sum = Differences[psum, 2]Shanks変換は,
次パデ近似を2つのハンケル行列式の比として表す:
rat = Cancel[Det[HankelMatrix[Take[psum, n + 1], Take[psum, {n + 1, 2n + 1}]]] / Det[HankelMatrix[Take[Δ2sum, n], Take[Δ2sum, {n, 2n - 1}]]]]PadeApproximantの結果と比較する:
PadeApproximant[Exp[x], {x, 0, n}] == rat//SimplifyeSum[x_] := (2/3)E^-x / 2 + (1/4)E^-x / 5 + (1/7)E^-2x / 9n = 3;
data = Table[N[eSum[x]], {x, 0, 2n - 1}]プロニー法(Prony's method)[Wikipedia]を使ってデータから指数関数の和を回復する:
pk = LinearSolve[HankelMatrix[Take[data, n], Take[data, {n, 2n - 1}]], -Take[data, -n]];
rts = x /. NSolve[FromDigits[Prepend[Reverse[pk], 1], x], x];
phases = Log[Abs[rts]] + I Im[Log[Sign[rts]]];
coefs = LinearSolve[Transpose[VandermondeMatrix[rts]], Take[data, n]];
newSum[x_] = coefs.Exp[x phases]ハンケル行列の行列式は関数の連分数展開に現れる.関数の最初のいくつかの級数展開の係数を生成する:
f[z_] := Sinc[2z]Exp[-3z];
n = 4;
coefs = Table[SeriesCoefficient[f[z], {z, 0, k}], {k, 0, n}]級数係数からハンケル行列式を構築するための効用関数を定義する:
toHankel[v_] /; OddQ[Length[v]] := With[{h = Quotient[Length[v] + 1, 2]}, Det[HankelMatrix[Take[v, h], Take[v, -h]]]]cfNum = Table[Which[
k == 1, coefs[[2]],
k == 2, -(coefs[[3]]/coefs[[2]]),
k == 3, -(toHankel[Take[coefs, {2, 4}]]/coefs[[2]]coefs[[3]]),
True,
With[{r = Quotient[k, 2]},
If[EvenQ[k],
-((toHankel[Take[coefs, {3, 2 r + 1}]]toHankel[Take[coefs, {2, 2 r - 2}]]) / (toHankel[Take[coefs, {2, 2 r}]]toHankel[Take[coefs, {3, 2 r - 1}]])),
-((toHankel[Take[coefs, {2, 2 r + 2}]]toHankel[Take[coefs, {3, 2 r - 1}]]) / (toHankel[Take[coefs, {2, 2 r}]]toHankel[Take[coefs, {3, 2 r + 1}]]))]]], {k, n}]cfrac[z_] = coefs[[1]] + ContinuedFractionK[Indexed[cfNum, k]z, 1, {k, Length[cfNum]}]Plot[{f[z], cfrac[z]}, {z, -1, 2}, PlotLegends -> {"original function", "continued fraction"}]区間
上の重み関数
に対応する n 点のガウス求積法は重み関数のモーメントから導出できる.重み関数と区間を定義する:
w[x_] := Sin[x];
{a, b} = {0, π};n = 4;
momList = N[Table[Subsuperscript[∫, a, b]x^kw[x]ⅆx, {k, 0, 2n - 1}], 25]指定された重み関数に対応する n 次直交多項式は,モーメントから構築されたハンケル系を解くことで入手できる:
gaussPolyGen[mom_ ? VectorQ, t_] := Module[{n = Quotient[Length[mom], 2]}, Expand[Fold[(#1 t + #2)&, 1, Reverse[LinearSolve[Apply[HankelMatrix, Partition[mom, n, n - 1]], -Take[mom, -n]]]]]]poly[x_] = gaussPolyGen[momList, x]nodes = x /. NSolve[poly[x], x, 20]n 点ガウス求積法の重みは,Vandermonde系を解くことで入手できる:
weights = LinearSolve[Transpose[VandermondeMatrix[nodes]], Take[momList, n]]weights.((x E^-x) /@ nodes)NIntegrateで得られた答と比較する:
NIntegrate[E^-xw[x], {x, a, b}, WorkingPrecision -> 20]特性と関係 (6)
TableForm[Table[{n, Det[HankelMatrix[n]], (-1) ^ Floor[n / 2] n ^ n}, {n, 10}]]cr = RandomReal[1, 9];
c = Take[cr, 5];
r = Take[cr, -5];
h = HankelMatrix[c, r]SymmetricMatrixQ[h]HankelMatrix[c,RotateRight[c]]は正方の反循環行列である:
c = RandomReal[1, 4];
MatrixForm[h = HankelMatrix[c, RotateRight[c]]]正方反循環行列は固有値 c1+c2+…の固有ベクトル{1,…}を持つ:
λ = Total[c];
𝓋 = ConstantArray[1, Length[c]];
h.𝓋 - λ 𝓋//ChopHankelMatrixとToeplitzMatrixは,交換行列 (逆恒等行列) との乗算によって関連している:
(h = HankelMatrix[{Subscript[a, 2], Subscript[a, 1], Subscript[a, 0]}, {Subscript[a, 0], Subscript[a, -1], Subscript[a, -2]}])//MatrixFormToeplitzMatrix[{Subscript[a, 0], Subscript[a, 1], Subscript[a, 2]}, {Subscript[a, 0], Subscript[a, -1], Subscript[a, -2]}]//MatrixFormReverse[IdentityMatrix[3]].h//MatrixForm同様に,ハンケル行列の逆変換はテプリッツ(Toeplitz)行列を与える:
h = HankelMatrix[{Subscript[a, 2], Subscript[a, 1], Subscript[a, 0]}, {Subscript[a, 0], Subscript[a, -1], Subscript[a, -2]}, TargetStructure -> "Structured"]MatrixForm[h]t = Reverse[h]MatrixForm[t]対角行列,Vandermonde行列,ハンケル行列について,Vandermonde行列の逆行列の因数分解を示す:
xl = {x1, x2, x3, x4, x5};
Inverse[VandermondeMatrix[xl]] == HankelMatrix[Rest[CoefficientList[Apply[Times, x - xl], x]]].Transpose[VandermondeMatrix[xl]].DiagonalMatrix[1 / Table[Apply[Times, xl[[k]] - Delete[xl, k]], {k, Length[xl]}]]//Simplifyコーシー行列を,対角行列,Vandermonde行列,ハンケル行列の積として表す:
xl = {x1, x2, x3, x4, x5};
yl = {y1, y2, y3, y4, y5};
CauchyMatrix[xl, yl] == DiagonalMatrix[1 / (Times@@@Outer[Plus, xl, yl])].VandermondeMatrix[xl].HankelMatrix[Rest[CoefficientList[Apply[Times, y + yl], y]]].Transpose[VandermondeMatrix[-yl]]//Simplify考えられる問題 (1)
おもしろい例題 (3)
ListPlot3D[HankelMatrix[15], InterpolationOrder -> 0, Mesh -> None]facHankel[n_] := HankelMatrix[1 / Range[n]!, 1 / Range[n, 2n - 1]!]facHankel[5]//MatrixFormその行列式はバーンズ(Barnes)のG関数で表すことができる:
Table[Det[facHankel[n]] == ((-1) ^ Binomial[n, 2]BarnesG[n + 1] ^ 2) / BarnesG[2n + 1], {n, 9}]成分がベルヌーイ(Bernoulli)数であるハンケル行列を定義する:
bernoulliHankel[n_] := HankelMatrix[BernoulliB[Range[0, n - 1]], BernoulliB[Range[n - 1, 2n - 2]]]bernoulliHankel[5]//MatrixFormTable[Det[bernoulliHankel[n]] == ((-1) ^ Binomial[n, 2]BarnesG[n + 1] ^ 6) / BarnesG[2n + 1], {n, 9}]テキスト
Wolfram Research (2007), HankelMatrix, Wolfram言語関数, https://reference.wolfram.com/language/ref/HankelMatrix.html (2024年に更新).
CMS
Wolfram Language. 2007. "HankelMatrix." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/HankelMatrix.html.
APA
Wolfram Language. (2007). HankelMatrix. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/HankelMatrix.html
BibTeX
@misc{reference.wolfram_2026_hankelmatrix, author="Wolfram Research", title="{HankelMatrix}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/HankelMatrix.html}", note=[Accessed: 08-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_hankelmatrix, organization={Wolfram Research}, title={HankelMatrix}, year={2024}, url={https://reference.wolfram.com/language/ref/HankelMatrix.html}, note=[Accessed: 08-November-2026]}