Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

null

説明

Z = null(A) は、A のヌル空間の正規直交基底を返します。

Z = null(A,tol) は、許容誤差も指定します。tol より小さい A の特異値はゼロとして扱われ、これは Z 内の列数に影響する場合があります。

Z = null(A,"rational") は、A のヌル空間の有理基底を返します。これは通常は正規直交ではありません。A が小さな行列で、要素が小さな整数の場合、Z の要素は小さな整数の比率となります。この方法は、null(A) より数値的に精度が低くなります。

すべて折りたたむ

関数 null を使用して、行列のヌル空間の正規直交基底ベクトルと有理基底ベクトルを計算します。行列のヌル空間には、Ax=0 を満たすベクトル x が含まれます。

1 からなる 3 行 3 列の行列を作成します。この行列はランク落ちであり、特異値の 2 つが 0 と等しくなっています。

A = ones(3)
A = 3×3

     1     1     1
     1     1     1
     1     1     1

A のヌル空間の正規直交基底を計算します。Ax1=0 であり、丸め誤差の範囲内であることを確認します。

x1 = null(A)
x1 = 3×2

   -0.5774   -0.5774
   -0.2113    0.7887
    0.7887   -0.2113

norm(A*x1)
ans = 9.6148e-17

次に、ヌル空間の有理基底を計算します。Ax2=0 であることを確認します。

x2 = null(A,"rational")
x2 = 3×2

    -1    -1
     1     0
     0     1

norm(A*x2)
ans = 0

x1x2 は似ていますが、正規化では別になります。x1'*x1 は単位行列ですが、x2'*x2 は違います。

x1'*x1
ans = 2×2

    1.0000   -0.0000
   -0.0000    1.0000

x2'*x2
ans = 2×2

     2     1
     1     2

多くの場合、直交性は数値計算の正確性に不可欠です。そのため、"rational" オプションは、すべて整数の小規模な行列を扱う際に、出力がスキャン可能な数値で構成されていると役立つような場合にのみ使用します。

行列に小さい特異値がある場合、許容誤差を指定して、ゼロとして扱われる特異値を変更します。

7 行 7 列のヒルベルト行列を作成します。この行列はフル ランクですが、いくつかの小さい特異値があります。

H = hilb(7)
H = 7×7

    1.0000    0.5000    0.3333    0.2500    0.2000    0.1667    0.1429
    0.5000    0.3333    0.2500    0.2000    0.1667    0.1429    0.1250
    0.3333    0.2500    0.2000    0.1667    0.1429    0.1250    0.1111
    0.2500    0.2000    0.1667    0.1429    0.1250    0.1111    0.1000
    0.2000    0.1667    0.1429    0.1250    0.1111    0.1000    0.0909
    0.1667    0.1429    0.1250    0.1111    0.1000    0.0909    0.0833
    0.1429    0.1250    0.1111    0.1000    0.0909    0.0833    0.0769

s = svd(H)
s = 7×1

    1.6609
    0.2719
    0.0213
    0.0010
    0.0000
    0.0000
    0.0000

H のヌル空間を計算します。H はフル ランクであるため、Z は空です。

Z = null(H)
Z =

  7x0 empty double matrix

次に、ヌル空間を再度計算します。ただし、許容誤差を 1e-4 に指定します。この許容誤差により、null は特異値のうち 3 つをゼロとして扱うようになるため、ヌル空間は空ではなくなります。

Ztol = null(H,1e-4)
Ztol = 7×3

    0.0160   -0.0025    0.0002
   -0.2279    0.0618   -0.0098
    0.6288   -0.3487    0.0952
   -0.2004    0.6447   -0.3713
   -0.4970   -0.1744    0.6825
   -0.1849   -0.5436   -0.5910
    0.4808    0.3647    0.1944

H*Ztol には、指定された許容誤差と比べ非常に小さい要素があることを確認します。

norm(H*Ztol)
ans = 2.9386e-05

劣決定システムについてある特定の解を求め、その後すべての解について一般的な形式を求めます。

劣決定の線形システム Ax=b は方程式より未知数の数が多くなります。劣決定システムは、無限に解をもつ場合もあれば、解がない場合もあります。システムの解が無限にある場合、その解はすべて一直線上にあります。直線上のすべての点は、ヌル空間ベクトルの線形結合により得られます。

2 行 4 列の係数行列を作成し、バックスラッシュを使用して方程式 Ax0=b を解きます。ここで、b は 1 から成るベクトルです。バックスラッシュにより、問題の最小二乗解が計算されます。

A = [1 8 15 67; 7 14 16 3]
A = 2×4

     1     8    15    67
     7    14    16     3

b = ones(2,1);
x0 = A\b
x0 = 4×1

         0
         0
    0.0623
    0.0010

劣決定システムの完全な一般解は x=x0+Ny という形式になります。ここで、以下のようになります。

  • NA のヌル空間。

  • y は適切な長さの任意のベクトル。

  • x0 はバックスラッシュにより計算された解。

A のヌル空間を計算し、その結果を使用してこの方程式系の別の解を求めます。新しい解が、丸め誤差の範囲内で Ax=b を満たしていることを確認します。

N = null(A)
N = 4×2

   -0.2977   -0.8970
   -0.6397    0.4397
    0.7044    0.0157
   -0.0769   -0.0426

x = x0 + N*[1; -2]
x = 4×1

    1.4963
   -1.5192
    0.7354
    0.0093

norm(A*x-b)
ans = 1.8510e-14

入力引数

すべて折りたたむ

入力行列。

データ型: single | double
複素数のサポート: あり

特異値の許容誤差。実数値スカラーとして指定します。許容誤差未満の A の特異値はゼロとして扱われ、これは null によって返されるヌル空間ベクトルの数に影響を与えます。既定の許容誤差は max(size(A)) * eps(norm(A)) です。

出力引数

すべて折りたたむ

ヌル空間の基底ベクトル。行列の列として返されます。Z は以下の特性を満たします。

  • A*Z に非常に小さい要素がある。

  • size(Z,2)A の退化次数の推定値である。

rank(A) (または rank(A,tol)) が size(A,2) と等しい場合、Z は空です。

アルゴリズム

null(A) は、A = U*S*V' となるように、行列 A の特異値分解を計算します。(許容誤差内で) ゼロと等しい特異値に対応する V の列は、ヌル空間の一連の正規直交基底ベクトルを形成します。

ヌル空間 null(A,"rational") の有理基底は、rref によって計算される A の行簡約階段形から得られます。

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する

参考

| | |