VandermondeMatrix[{x1,x2,…,xn}]
ノード xiに対応する n×n Vandermonde行列を与える.
VandermondeMatrix[{x1,x2,…,xn},k]
n×k Vandermonde行列を与える.
VandermondeMatrix[vmat]
Vandermonde行列 vmat を構造化配列に変換する.
VandermondeMatrix
VandermondeMatrix[{x1,x2,…,xn}]
ノード xiに対応する n×n Vandermonde行列を与える.
VandermondeMatrix[{x1,x2,…,xn},k]
n×k Vandermonde行列を与える.
VandermondeMatrix[vmat]
Vandermonde行列 vmat を構造化配列に変換する.
詳細とオプション
- Vandermonde行列は,構造化配列として表された場合は,Det,Inverse,LinearSolve等の効率的な格納とより効率的な操作を可能にする.
- Vandermonde行列は多項式補間に関係する計算および単項式基底におけるモーメントの計算に出現する.
- ノード xiは数値である必要はなく,すべてが異なっていなくてもよい.
- 合流型ではないVandermonde行列(xiは異なる)の成分は
で与えられる. - 合流型のVandermonde行列(xiがすべて異なる訳ではない)は,2つあるいはそれ以上のノードが互いに近付くことができるのであれば非合流型Vandermonde行列の制限された形である. »
- 非合流型の場合,解{a0,…}=LinearSolve[V,{b1,…}]は,
となるように点{xi,bi}を補関する多項式
の係数を与える. - 合流型の場合,解{a0,…}=LinearSolve[V,{b1,…}]はエルミート補間多項式の係数を与える.ただし,繰り返される xiは与えられる派生情報に相当する.
- VandermondeMatrixについて加速される操作には以下がある.
-
Det time 
Inverse time 
LinearSolve time 
- VandermondeMatrix sa については,sa["prop"]で次の特性"prop"にアクセスすることができる.
-
"Nodes" ノード xiのベクトル "Multiplicities" 一意的な各ノードの多重度 "Permutation" 置換リスト "Confluent" 行列が合流型かどうか "Transposed" 行列が転置されているかどうか "Properties" サポートされる特性のリスト "Structure" 構造化配列の型 "StructuredData" 構造化配列によって格納された内部データ "StructuredAlgorithms" 構造化配列に対して特別なメソッドを持つ関数のリスト "Summary" Datasetとして表される情報の要約 - Normal[VandermondeMatrix[x]]はVandermonde行列を通常の行列として与える.
- VandermondeMatrix[…,TargetStructure->struct]は,Vandermonde行列を struct で指定された形式で返す.次はその可能な設定である.
-
Automatic 返す表現を自動選択する "Dense" 行列を密な行列として表す "Structured" 行列を構造化配列として表す - VandermondeMatrix[…,TargetStructureAutomatic]はVandermondeMatrix[…,TargetStructure"Structured"]に等しい.
例題
すべて開く すべて閉じる例 (2)
v = VandermondeMatrix[{Subscript[x, 1], Subscript[x, 2], Subscript[x, 3], Subscript[x, 4]}]MatrixForm[v]Det[v]v = VandermondeMatrix[{0.5, 1., 2., 4.}]Normal[v]a = LinearSolve[v, Cos[{0.5, 1., 2., 4.}]]Plot[{Cos[x], a.{1, x, x ^ 2, x ^ 3}}, {x, 0, 4}, Epilog -> Point[{{0.5, 1., 2., 4.}, Cos[{0.5, 1., 2., 4.}]}], PlotLegends -> {"cosine", "interpolating polynomial"}]スコープ (8)
v = VandermondeMatrix[{0, (1/4), (1/3), (1/2), (2/3), (3/4), 1}, 11]MatrixForm[v]v = VandermondeMatrix[{Subscript[𝓍, 1], Subscript[𝓍, 2], Subscript[𝓍, 2], Subscript[𝓍, 2], Subscript[𝓍, 3], Subscript[𝓍, 3], Subscript[𝓍, 4], Subscript[𝓍, 5]}]MatrixForm[v]vr = VandermondeMatrix[{Subscript[𝓍, 1], Subscript[𝓍, 2], Subscript[𝓍, 2], Subscript[𝓍, 2], Subscript[𝓍, 3], Subscript[𝓍, 3], Subscript[𝓍, 4], Subscript[𝓍, 5]}, 12]MatrixForm[vr]vm = VandermondeMatrix[(| | | | | | | |
| - | ----- | ------ | ------- | -------- | ---------- | ---------- |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | (1/4) | (1/16) | (1/64) | (1/256) | (1/1024) | (1/4096) |
| 1 | (1/3) | (1/9) | (1/27) | (1/81) | (1/243) | (1/729) |
| 1 | (1/2) | (1/4) | (1/8) | (1/16) | (1/32) | (1/64) |
| 1 | (2/3) | (4/9) | (8/27) | (16/81) | (32/243) | (64/729) |
| 1 | (3/4) | (9/16) | (27/64) | (81/256) | (243/1024) | (729/4096) |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |)]MatrixForm[vm]ByteCount[v = VandermondeMatrix[N[Range[123]]]]ByteCount[Normal[v]]VandermondeMatrixオブジェクトは配列についての情報を与える特性を含んでいる:
v = VandermondeMatrix[{-3, -2, -2, 1, 1, 1, 2}]v["Properties"]"Nodes"特性は,Vandermonde行列を生成するノードのベクトルを与える:
v["Nodes"]"Permutation"特性は,Vandermonde行列に関連付けられた置換ベクトルを与える:
v["Permutation"]"Multiplicities"特性は,一意的な各ノードの多重度を与える:
v["Multiplicities"]"Confluent"特性は,Vandermonde行列が合流型のときはTrueを,それ以外のときはFalseを与える:
v["Confluent"]"Transposed"特性はVandermonde行列が転置されているときはTrueを,それ以外の場合はFalseを与える:
v["Transposed"]"Summary"特性は,配列についての情報の簡単な要約を与える:
v["Summary"]"StructuredAlgorithms"特性は,表現の構造を使うアルゴリズムを有する関数のリストを与える:
v["StructuredAlgorithms"]v = VandermondeMatrix[-Cos[Pi Range[0, 47] / 47.]]AbsoluteTiming[dv = Det[v]]nv = Normal[v];
AbsoluteTiming[dnv = Det[nv]]ev = VandermondeMatrix[-Cos[Pi Range[0, 47] / 47]];
Short[dev = Det[ev]]VandermondeMatrixから計算された値ははるかに正確である:
{N[dev], dev - dv, dev - dnv}n = 101;
(* Chebyshev nodes *)
x = N[Cos[(π/n)(Range[n] - (1/2))], 20];
v = VandermondeMatrix[x]VandermondeMatrixを使って線形系
を解く:
b = Sin[π x Cos[x]];
AbsoluteTiming[a = LinearSolve[v, b];]nv = Normal[v];
AbsoluteTiming[na = LinearSolve[nv, b];]剰余はVandermondeMatrixを使った方が小さい:
{Norm[v.a - b], Norm[v.na - b]}Plot[{Sin[π x Cos[x]] - a.(x ^ Range[0, 100])}, {x, -1, 1}, PlotRange -> All]Plot[{Sin[π x Cos[x]] - na.(x ^ Range[0, 100])}, {x, -1, 1}, PlotRange -> All]構造化アルゴリズムは,適切な場合は別の構造化アルゴリズムを返す:
v = VandermondeMatrix[Exp[2 π I Range[0, 12] / 12.]]ConjugateTranspose[v]もとの行列との積はもはやVandermonde行列ではない:
Chop[%.v]オプション (1)
アプリケーション (7)
f[x_] := BesselJ[0, x];
{xValues, fValues} = Transpose@Table[{x, f[x]}, {x, Range[0, 10, 10. / (n = 6)]}]VandermondeMatrixを使ってそれらのサンプルにおける関数を補間する次数 n の多項式を求める:
Vm = VandermondeMatrix[xValues];
coefficients = LinearSolve[Vm, fValues];poly[x_] = coefficients.x^Range[Length[coefficients]] - 1Plot[{f[x], poly[x]}, {x, 0, 10}, Epilog -> {PointSize[Medium], Point[{xValues, fValues}//Transpose]}, PlotLegends -> "Expressions"]補間条件
と導関数の条件
を満足する多項式
の係数を定義する:
coefs = LinearSolve[VandermondeMatrix[{0, 0, 1, 1, 1}], {1, 0, 1 / 2, -1, 0}]poly[x_] = coefs.x^Range[Length[coefs]] - 1{poly[0], poly'[0]}{poly[1], poly'[1], poly''[1]}points = {{Subscript[x, 0], Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]}, {Subscript[f, 0], Subscript[f, 1], Subscript[f, 2], Subscript[f, 3]}} = {{0, 2, 4, 6}, {0.63662, 0.63050, -0.23360, -0.04297}};二次Vandermonde多項式をこれらの点にフィットする:
vInv = Inverse[VandermondeMatrix[{Subscript[x, 0], Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]}]];coefficients = vInv.{Subscript[f, 0], Subscript[f, 1], Subscript[f, 2], Subscript[f, 3]};
vanderPoly = Function[x, coefficients.x^Range[Length[coefficients]] - 1];VandermondeMatrixの逆行列の列は,ラグランジュ(Lagrange)多項式と呼ばれる次数 n の多項式
の集合を定義する:
Subscript[L, i_][u_] := (vInv[[All, i + 1]]).Table[u^k, {k, 0, 3}]Table[Subscript[L, i][x] /. x -> Subscript[x, j], {i, 0, 3}, {j, 0, 3}]//MatrixFormVandermonde多項式をラグランジュ多項式によって表す:
lagPoly = Function[x, Subsuperscript[∑, i = 0, 3]Subscript[L, i][x]Subscript[f, i]];
(lagPoly[x] == vanderPoly[x])//SimplifyShow[
Plot[{vanderPoly[x], lagPoly[x], Subscript[L, 0][x], Subscript[L, 1][x], Subscript[L, 2][x], Subscript[L, 3][x], 1}, {x, 0, 6.2}, IconizedObject[«Plot options»]],
ListPlot[points//Transpose, IconizedObject[«ListPlot options»]]]poly = Subsuperscript[∏, i = 1, n = 4](x - Subscript[λ, i]);VandermondeMatrixを根から構築する:
Vm = VandermondeMatrix[roots = Table[Subscript[λ, i], {i, 1, n}]];既知の根がある多項式のフロベニウス(Frobenius)同伴行列はこの根を持つ対角行列と相似であり,Vandermonde行列が相似変換として機能する:
(compMat = Inverse[Vm].DiagonalMatrix[roots].Vm//Simplify)//MatrixFormフロべニウス同伴行列の最終列には n-1次数までの多項式の負の係数が含まれている:
compMat[[All, -1]] == -Most[CoefficientList[poly, x]]//SimplifycompMat[[All, -1]] == Table[(-1)^k + 1SymmetricPolynomial[k, roots], {k, n, 1, -1}]//Simplifyn = 5;
coef = LinearSolve[Transpose[VandermondeMatrix[Range[0, n]]], UnitVector[n + 1, n + 1]n!](coef.Map[f, x + h Range[0, n]]/h^n)これはDifferenceQuotientの結果に等しい:
DifferenceQuotient[f[x], {x, n, h}] == %//Simplify閉じたニュートン・コーツ(Newton–Cotes)の公式のノードと重みを計算する関数を定義する[MathWorld]:
newtonCotesRule[a_, b_, ord_] := Module[{cof, xt},
xt = Subdivide[0, 1, ord];
cof = LinearSolve[Transpose[VandermondeMatrix[xt]], 1 / (1 + Range[0, ord])];
{Rescale[xt, {0, 1}, {a, b}], (b - a)cof}]{nodes, weights} = newtonCotesRule[a, b, 1];
weights.(f /@ nodes){nodes, weights} = newtonCotesRule[a, b, 2];
weights.(f /@ nodes){nodes, weights} = newtonCotesRule[a, b, 4];
weights.(f /@ nodes)eSum[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のメソッド[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]特性と関係 (6)
合流型Vandermonde行列は,非合流型行列の極限として得ることができる:
n = 4;
vh = Normal[VandermondeMatrix[x + h Range[0, n - 1]]]Table[((-1)^j - k/h^j - 1)Binomial[j - 1, k - 1], {j, n}, {k, n}].vhLimit[%, h -> 0] == VandermondeMatrix[ConstantArray[x, n]]FourierMatrixはVandermondeMatrixとして表すことができる:
{n, a, b} = {13, 1, -1};
fm = FourierMatrix[n, FourierParameters -> {a, b}];
fm == (1/n^(1 - a) / 2)VandermondeMatrix[n^(1 - a) / 2fm[[2]]]多項式の行列式はVandermondeMatrixのDet の平方として表すことができる:
poly = Subsuperscript[∏, i = 1, n = 5](x - Subscript[λ, i]);
(Discriminant[poly, x] == Det[VandermondeMatrix[Table[Subscript[λ, i], {i, 1, n}]]]^2)//SimplifyLinearSolve[VandermondeMatrix[{0, 0, 1, 2, 3, 3, 3}], {1, 0, 2, 1, 0, -1, 1}]これは,微分値を指定したInterpolatingPolynomialの係数である:
CoefficientList[InterpolatingPolynomial[{{{0}, 1, 0}, {{1}, 2}, {{2}, 1}, {{3}, 0, -1, 1}}, x], x]対角行列,Vandermonde行列,ハンケル(Hankel)行列によって,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おもしろい例題 (2)
a = {{-19, -10, -2, -18}, {-23, -12, -3, -19}, {6, 6, 5, 6}, {38, 18, 2, 33}};
v0 = {1, 0, -1, 2};与えられた行列とベクトルからKrylov行列を計算する関数を定義する:
krylovMatrix[m_ ? SquareMatrixQ, v_ ? VectorQ] /; Length[m] == Length[v] := Transpose[NestList[m.#&, v, Length[v] - 1]]λ = Eigenvalues[a]ベクトルに対する指数行列の動作はKrylov行列とVandermonde行列の逆行列によって表すことができる:
sol = krylovMatrix[a, v0].Inverse[VandermondeMatrix[λ]].Exp[λ t]MatrixExpからも同じ結果が得られることを確認する:
MatrixExp[a t, v0] == sol//SimplifyDSolveValueからも同じ結果が得られることを確認する:
DSolveValue[{v'[t] == a.v[t], v[0] == v0}, v[t]∈Vectors[Length[v0]], t] == sol//Simplify線形Caputo微分方程式もまた,Mittag–Leffler関数MittagLefflerEとともに,Krylov行列とVandermonde行列の逆行列によって解くことができる:
α = 3 / 4;
solα = krylovMatrix[a, v0].Inverse[VandermondeMatrix[λ]].MittagLefflerE[α, λ t^α]DSolveValueで同じ結果が得られることを確認する:
DSolveValue[{CaputoD[v[t], {t, α}] == a.v[t], v[0] == v0}, v[t]∈Vectors[Length[v0]], t] == solα//FullSimplify陰的ルンゲ・クッタ(Runge–Kutta)法のブッチャー(Butcher)配列は,ルジャンドル(Legendre)多項式の根から構築された主Vandermonde系を解くことで得られる:
With[{s = Quotient[6 + 1, 2]},
rts = Sort[x /. Solve[LegendreP[s, 1 - 2 x] == 0, x], Less];
vt = Transpose[VandermondeMatrix[rts]];
rkgctab = {Transpose[LinearSolve[vt, DiagonalMatrix[1 / Range[s]].vt.DiagonalMatrix[rts]]], LinearSolve[vt, 1 / Range[s]], rts}]//Simplify陰的ルンゲ・クッタ・ガウス係数を指定精度で計算する関数を定義する:
ImplicitRungeKuttaGaussCoefficients[6, p_] := N[rkgctab, p];NDSolveValueの係数を使ってShampine法による火炎伝播をモデル化する硬い微分方程式を解く:
δ = 10^-3;
sol = NDSolveValue[{y'[t] == y[t]^2(1 - y[t]), y[0] == δ}, y, {t, 0, 2 / δ},
Method -> {"FixedStep", Method -> {"ImplicitRungeKutta", "Coefficients" -> ImplicitRungeKuttaGaussCoefficients, "DifferenceOrder" -> 6}}, StartingStepSize -> 1 / 20]Plot[{With[{a = (1/δ) - 1}, (1/1 + ProductLog[a E^a - t])], sol[t]}, {t, 0, 2 / δ}, IconizedObject[«Plot options»]]関連するガイド
-
▪
- 構造化配列
テキスト
Wolfram Research (2022), VandermondeMatrix, Wolfram言語関数, https://reference.wolfram.com/language/ref/VandermondeMatrix.html (2023年に更新).
CMS
Wolfram Language. 2022. "VandermondeMatrix." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2023. https://reference.wolfram.com/language/ref/VandermondeMatrix.html.
APA
Wolfram Language. (2022). VandermondeMatrix. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/VandermondeMatrix.html
BibTeX
@misc{reference.wolfram_2026_vandermondematrix, author="Wolfram Research", title="{VandermondeMatrix}", year="2023", howpublished="\url{https://reference.wolfram.com/language/ref/VandermondeMatrix.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_vandermondematrix, organization={Wolfram Research}, title={VandermondeMatrix}, year={2023}, url={https://reference.wolfram.com/language/ref/VandermondeMatrix.html}, note=[Accessed: 02-November-2026]}