目次
利点: MATLAB に関する完全な情報が記事の最後にあります。
導入
配列演算は MATLAB 計算の基礎であると言え、数値配列は MATLAB の最も重要な組み込みデータ型です。行列自体は特別な配列ですMATLAB は、配列と行列の重要性を示す行列の研究室を目的としています。
まず、配列の作成と操作
配列内の同じ行の要素はカンマまたはスペースで ,
区切られ 、;
異なる行の間にはセミコロンが使用されます。
-
>> A = [6 5 4 3 2 1] A = 6 5 4 3 2 1 >> B = [6, 5, 4, 3, 2, 1] B = 6 5 4 3 2 1 >> C = [6;5;4;3;2;1] C = 6 5 4 3 2 1 >> D = B' % 转置 D = 6 5 4 3 2 1
配列要素へのアクセス ()
には、ほとんどのプログラミング言語で使用されるのではなく、 括弧が使用されることに注意してください[]
。さらに、 MATLAB 配列の添字は 1 から始まり、複数の要素のクエリと変更を実現するために添字リストを渡すこともできます。(これはジュリアと一致しています):
-
>> A = [6 5 4 3 2 1] A = 6 5 4 3 2 1 >> A(3) = 0 A = 6 5 0 3 2 1 >> A([1 4]) = [1 1] A = 1 5 0 1 2 1
経由: 1 次元配列を作成する
MATLAB では、 :
1 次元配列 を作成することによって 1 次元配列を作成 できますX=A:step:B
。ここで、 は A
1 次元配列を作成する最初の変数であり、 は、 step
絶対値になるまで毎回増加または減少する値です。最後の要素と B の差が絶対値以下である step
。指定しない場合 step
、デフォルトでは 1 単位の長さだけ増加します。
-
>> 2:6 ans = 2 3 4 5 6 >> 2.1:1.5:6 ans = 2.1000 3.6000 5.1000 >> 2.1:6 ans = 2.1000 3.1000 4.1000 5.1000 >> 2.1:-1.5:-6 ans = 2.1000 0.6000 -0.9000 -2.4000 -3.9000 -5.4000
logspace 関数を使用して 1 次元配列を作成する
-
y=logspace(a,b)
y
:最初の要素が 10^a、最後の要素が 10^b である行ベクトルを作成し 、合計 50 要素の等比数列を形成します。 -
y=logspace(a,b,n)
y
: この関数は、最初の要素が 10^a で最後の要素が 10^b である行ベクトルを作成し 、合計 n 要素を持つ等比数列を形成します。
-
>> A = logspace(1, 2, 10) A = 10.0000 12.9155 16.6810 21.5443 27.8256 35.9381 46.4159 59.9484 77.4264 100.0000
linspace 関数を使用して 1 次元配列を作成する
-
y=linspace(a,b)
y
: a を最初の要素、 b を最後の要素とする行ベクトルを作成し 、合計 100 個の要素を持つ線形に配置されたベクトル (算術シーケンス) を形成します。 -
y=logspace(a,b,n)
y
: この関数は、最初の要素 a と最後の要素 b からなる行ベクトルを作成し、 合計 n 要素の線形に間隔を置いたベクトル (算術シーケンス) を形成します。
-
>> A = linspace(1, 100) A = 1 至 21 列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 至 42 列 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 至 63 列 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 至 84 列 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 至 100 列 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 >> B = linspace(1, 36, 1) B = 36
次に、配列の操作
配列の演算は配列の要素全体から開始され、配列内の各要素に対して演算が実行されます。基本的な演算には、加算、減算、乗算、左除算、右除算、累乗が含まれます。
-
>> A = [1 5 6 8 9 6] A = 1 5 6 8 9 6 >> B = [9 85 6 2 4 0] B = 9 85 6 2 4 0 >> C = [1 1 1 1 1] C = 1 1 1 1 1 >> D = A + B D = 10 90 12 10 13 6 >> E = A - B E = -8 -80 0 6 5 6 >> F = A * 2 F = 2 10 12 16 18 12 >> G = A + 3 G = 4 8 9 11 12 9 >> H = A - G H = -3 -3 -3 -3 -3 -3
配列の乗算は行列の乗算とは異なることに注意してください。sum と同じ次元が必要で A
、 B
演算は配列の対応する要素の乗算演算であり、計算結果は sum と 同じ 次元の配列になります。当然、分割の場合は対応する要素を分割します。A
B
-
>> A = [1 2 3] A = 1 2 3 >> B = [2 3 4] B = 2 3 4 >> C = A .* B % 数组的点乘 C = 2 6 12 >> D = A * 3 % 数组与常数的乘法 D = 3 6 9
配列の分割:
-
>> A = [1 2 3] A = 1 2 3 >> B = [2 3 4] B = 2 3 4 >> A ./ B % 左除 ans = 0.5000 0.6667 0.7500 >> A .\ B % 右除,等价于 B ./ A ans = 2.0000 1.5000 1.3333 >> B / 2 ans = 1.0000 1.5000 2.0000
アレイのパワー:
-
>> A = [1 2 3 4] A = 1 2 3 4 >> B = [1 2 3 4] B = 1 2 3 4 >> C = A .^ B % 数组的乘方 C = 1 4 27 256 >> D = 3 .^ A % 常数与数组的乘方 D = 3 9 27 81
配列の内積演算は関数 で dot()
実現できますが、演算規則では配列 と の 次元が同じである必要があり、呼び出し形式は次のとおりです。A
B
-
C=dot(A,B)
-
C=dot(A,B,dim)
-
>> A = [1 2 3 4] A = 1 2 3 4 >> B = [1 2 3 4] B = 1 2 3 4 >> dot(A, B) ans = 30
配列のリレーショナル演算
<
MATLAB には、(より小さい)、(以下 <=
)、(より大きい >
)、 >=
(以上)、 ==
(等しい)、 ~=
(等しくない)という 6 つの配列関係演算子が用意されています 。運用ルール:
-
スカラーのサイズが直接比較され、関係が確立された場合は 1 が返され、それ以外の場合は 0 が返されます。
-
比較値が同じ次元の配列の場合、同じ位置の要素を一つずつ比較し、比較結果を返します。最終結果は、比較された配列と同じ次元を持つ 0 または 1 個の要素の配列になります。
-
>> A = [1 2 3 4 5] A = 1 2 3 4 5 >> B = [0 2 3 4 5] B = 0 2 3 4 5 >> A > B ans = 1×5 logical 数组 1 0 0 0 0 >> A >= 3 ans = 1×5 logical 数组 0 0 1 1 1
配列の論理演算
&
MATLAB の配列には、 (and)、 |
(or)、および ~
(not)の 3 つの論理演算子が用意されています 。非ゼロ要素の場合は True (1 で示されます)。要素がゼロの場合は false となり、0 で表されます。
-
>> A = [1 2 3 4 5 6] A = 1 2 3 4 5 6 >> B = [0 1 2 3 4 5] B = 0 1 2 3 4 5 >> A & B ans = 1×6 logical 数组 0 1 1 1 1 1 >> A | B ans = 1×6 logical 数组 1 1 1 1 1 1 >> ~B ans = 1×6 logical 数组 1 0 0 0 0 0
3. マトリックス
MATLAB の行列と配列の間には、次のような多くの違いがあります。
-
行列は数学的な概念ですが、配列はコンピューター プログラミングの分野の概念です。
-
数学における変換演算子またはマッピング演算子の現れとして、行列演算には明確で厳密な数学的規則があります。配列操作は MATLAB ソフトウェアによって定義されたルールであり、その目的はデータ管理をより便利にすることです。
この 2 つの関係は、行列が配列の形式で存在するということです。したがって、1 次元配列はベクトルに相当し、2 次元配列は行列に相当します。つまり、行列は配列の部分集合です。
マトリックス構造
行列を構築するには 2 つの方法があり、1 つは cell 配列に似ていて変数に直接値を代入する方法、もう 1 つは、あらかじめ提供されている特別な行列コマンドを使用する方法です。
関数名 | 関数関数 |
---|---|
ones(n) |
n×n 1行列(要素はすべて1) |
zeros(n) |
n×n 0行列(要素はすべて0) |
eye(n) |
n×n単位行列 |
eye(m,n) |
m×n単位行列 |
rand(n) |
n×n 行列、要素 0 ~ 1 の間に一様に分散された乱数 |
diag(x) |
主要な対角要素はベクトルから取得され x 、残りの要素の値は 0 になります。 |
triu(A) |
Aと同じ上三角行列を構築します。主対角上の要素は A の対応する要素で、残りは 0 です。 |
tril(A) |
Aと同じ下三角行列を構築します。主対角線上の要素は A の対応する要素で、残りは 0 です。 |
ルービック キューブ
magic
、パスカルpascal
、ヴァンデルモンドなど、他の行列タイプもあります。
-
>> A = ones(3) A = 1 1 1 1 1 1 1 1 1 >> B = rand(3) B = 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575 >> C = [1 2 3; 4 5 6; 7 8 9] C = 1 2 3 4 5 6 7 8 9 >> triu(C) ans = 1 2 3 0 5 6 0 0 9
行列への添字参照
通常の 2 次元配列要素のインデックスは、二重添字インデックスと単一添字インデックスに分かれます。二重添え字インデックスのインデックスは、バイナリ配列を介して行列内の要素の行と列の位置に対応します。たとえば、A(2, 3) は、行列 A の 2 行目と 3 列目の要素を示します。単一添字インデックスの方法は、列要素の優先順位の原則 を採用 し、列の順序に従ってm
行と A (5) は要素の要素を表します。 3行目と2列目。n
表現 | 関数 |
---|---|
A(1) |
2 次元行列A を1 次元配列に再編成し、配列の最初の要素を返します。 |
A(:,j) |
2 次元行列 A の j 番目の列ベクトルを返します。 |
A(i,:) |
2 次元行列 A の i 番目の行ベクトルを返します。 |
A(:,j:k) |
2 次元行列 A の j 列から k 列までの列ベクトルで構成される部分行列を返します。 |
A(i:k,:) |
2 次元行列 A の i 行目から k 行目までの行ベクトルで構成される部分行列を返します。 |
A(:) |
行列 A の各列を 1 つの長い列ベクトルにマージします。 |
マトリックス構造テスト:
名前 | 関数 |
---|---|
isempty(A) |
マトリックスが空かどうかを確認する |
isscalar(A) |
行列が 1 つの要素を持つスカラー行列かどうかを確認します |
isvector(A) |
行列の要素が 1 行のみか 1 列のみかを検出する 1D ベクトル |
issparse(A) |
配列が疎行列かどうかを確認する |
-
>> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> A(5) ans = 5 >> B = [1] B = 1 >> isempty(B) ans = logical 0 >> isscalar(B) ans = logical 1
マトリックスサイズ
行列のサイズには通常、次元数、各次元の長さ、行列要素の数が含まれます。この目的のために、MATLAB は行列の形状に関する情報を取得するために使用される 4 つの関数を提供します。
呼び出し形式 | 関数 |
---|---|
n=ndims(X) |
行列の数を取得する |
[m,n]=size(X) |
各次元の行列の長さを取得します |
n=length(X) |
行列の最長次元の長さを取得する |
n=numel(X) |
行列要素の数を取得する |
-
>> A = eye(5, 3) A = 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 >> ndims(A) ans = 2 >> length(A) ans = 5 >> numel(A) ans = 15
MATLAB コードを最適化するための鍵の 1 つは、行列のメモリ使用量を理解することです。を使用すると、 whos
変数名、行列サイズ、メモリ使用量、データ型など、現在のワークスペース内の指定された変数のすべての情報を表示できます。
-
>> m = rand(2) m = 0.9649 0.9706 0.1576 0.9572 >> whos m Name Size Bytes Class Attributes m 2x2 32 double
第四に、行列要素の演算
行列演算を使用するには、行列の数学的定義に従う必要があります。たとえば、行列の加算および減算演算の前提は、演算に関与する 2 つ以上の行列の行数と列数が同じでなければならないということです。
満たされる: 交換法則 A+B=B+A、結合法則 A+(B+C)=(A+B)+C、ゼロ要素の存在 A+0=0+A=A、負の要素の存在 A+(- A) =(-A)+A
行列の乗算演算には、数値と行列の乗算、および行列の乗算が含まれます。行列の乗算は、乗算された行列の列数が乗算された行列の行数に等しいという事実を満たさなければなりません。さらに、行列間の乗算は交換法則に従いませんが、次の演算法則を満たします。
-
結合法則: (A×B)×C=A×(B×C)
-
左の分配法則: A×(B+C)=A×B+A×C
-
右分配法則: (B+C)×A=B×A+C×A
-
単位行列の存在: E×A=A、A×E=A
行列の除算は乗算の逆演算であり、左除算と右除算に分けられます。演算子の記号 \
と /
表現を使用します。一般的な 2 次元行列 A および B の場合、A\B演算を実行する場合、 A の行数は Bの行数と 等しい必要があります。 A/B演算を実行する場合、 A およびBの列数は同じである必要があります。 Bは等しい必要があります。
-
>> A = [1 2; 1 3]; >> B = [1 0; 1 2]; >> C = A / B C = 0 1.0000 -0.5000 1.5000 >> D = A\B D = 1 -4 0 2 >> C * B ans = 1 2 1 3 >> A * D ans = 1 0 1 2
行列が正方行列の場合、行列のべき乗演算を実行でき、MATLAB はそれを使用して ^
べき乗演算を表します。
-
>> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> A2 = A^2 A2 = 91 67 67 67 91 67 67 67 91
行列の差
diff()
関数は行列の差を計算することです。つまり、行列の前の行(列)と次の行(列)の差分が、前の行(列)の対応する位置に配置されます。
-
Y=diff(X,n)
: 行列の各列の要素の n 次の差分を計算します。 -
Y=diff(X,n,dim)
:指定された次元の行列dim
の要素の 差を計算しますn
。その際dim=1
、行列の各列の要素の差分が計算されます。その際dim=2
、行列の各行の要素の差分が計算されます。
-
>> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> B = diff(A) B = -5 4 1 1 4 -5 >> C = diff(A, 2) C = 6 0 -6 >> D = diff(A, 1, 2) D = -7 5 2 2 5 -7
行列演算
行列演算は、行列解析、固有値解決、特異値など、線形代数の非常に重要な部分です。
マトリックス分析
MATLAB が提供する行列解析関数は次のとおりです。
関数名 | 説明 |
---|---|
norm |
行列またはベクトルのノルムを求める |
normest |
行列の第 2 ノルムを推定する |
rank |
マトリックスのランク |
det |
行列の行列式 |
trace |
行列のトレース、つまり対角要素の合計 |
null |
スペース0 |
orth |
直交化空間 |
rref |
縮小列エシュロンフォーム |
subspace |
2 つの行列空間の角度を求める |
-
>> norm(1:6, 2) % 2阶范数 ans = 9.5394 >> normest(1:6) ans = 9.5394
行列の次元が比較的大きい場合、ノルムの計算に時間がかかり、近似的なノルム値が要件を満たしている場合は、関数を使用して 2 次ノルム値を推定することを検討できます
normset()
。
-
>> A = [1 2 3; 3 4 5; 7 8 9]; >> B = magic(3); >> r1 = rank(A) r1 = 2 >> r2 = rank(B) r2 = 3 >> det(B) ans = -360 >> trace(B) ans = 15 >> Z = null(A) Z = 0.4082 -0.8165 0.4082
行列分解
行列分解は、行列をいくつかの「単純な」行列乗算形式に分解することです。行列分解は、理論と工学アプリケーションの両方で非常に重要です。
名前 | 説明 |
---|---|
chol |
Cholesky 分解 |
choline |
疎行列の不完全コレスキー分解 |
lu |
行列LU分解 |
luinc |
スパース行列の不完全な LU 分解 |
qr |
直交三角形分割分解 |
svd |
特異値分解 |
gsvd |
一般的な特異値分解 |
schur |
シュール分解 |
ショーチャージングジュンは最新かつ最も包括的な解釈をできるだけ早くお届けします、トリプルウェーブを忘れないでください。
公式アカウントにご注意ください: Resource Charging Bar
返信: チャット GPT
Charging Jun が送信しました: 無料で中国語版をお楽しみください
小さなカードをクリックしてフォローし、返信: IT
欲しい情報はすべて揃っています