MATLAB基础篇——线性代数应用
MATLAB基礎篇——線性代數應用
- 向量組的極大線性無關組
- 化二次型為標準形
- 二次型的正定性
- 解線性方程組
在MATLAB基礎篇——基礎語法介紹了有關矩陣的基本運算和線性代數中的一些基本問題。這里我們再討論如下問題:1.求向量組的極大線性無關組;2.化二次型為標準形;3.判斷二次型的正定性;4.解線性方程組
向量組的極大線性無關組
通過向量組的秩來討論向量組的線性相關性。由于矩陣的秩=行秩=列秩,所以求向量組的秩相當于求由向量組作為列(行)向量構建的矩陣的秩——通過rank函數,再利用rref函數可以得到該矩陣的標準階梯形矩陣,從而得到向量組的極大線性無關組,及其他向量用該極大線性無關組的表示
a1=[2 1 3 2]; a2=[3 2 -2 -3]; a3=[1 0 8 7]; a4=[-3 -2 3 4]; a5=[-7 -4 0 3]; A=[a1;a2;a3;a4;a5]'; %轉置作為列向量 rank(A) rref(A) % 秩為3 ans =3% a1' ,a2',a4'作為極大線性無關組,a3=2*a1-a2,a5=-2*a1+3*a2+4*a4 ans =1 0 2 0 -20 1 -1 0 30 0 0 1 40 0 0 0 0化二次型為標準形
線代里面,我們學習到化二次型f=xTAxf=x^TAxf=xTAx為標準形f=yTByf=y^TByf=yTBy的過程就是二次型的實對稱矩陣AAA正交相似化的過程,二次型標準形的系數就是AAA的特征值λ1,...,λn\lambda_1,...,\lambda_nλ1?,...,λn?,即B=diag(λ1,...,λn)B=diag(\lambda_1,...,\lambda_n)B=diag(λ1?,...,λn?),由AAA的特征值構成的對角陣,而該線性變換x=Pyx=Pyx=Py中的PPP為特征值對應的特征向量,所以該問題轉化為求實對稱矩陣AAA的特征值和特征向量——通過eig函數
%eig(A),e=eig(A) 得到A的特征值構成的列向量 %[P,E]=eig(A) P為特征向量作為列向量構成的矩陣,E為對角線元素為特征值的對角陣 %注意,若A為實對稱矩陣,則得到的特征向量矩陣是正交矩陣clear clc A=[-5 2 2;2 -6 0;2 0 -4]; %二次型的實對稱矩陣 [P,E]=eig(A); syms y1 y2 y3 y=[y1;y2;y3]; x=P*y; %線性變換(正交變換) f1=x'*A*x; %原二次型 f2=y'*E*y; %標準二次型二次型的正定性
在線性代數的學習中,可以知道二次型的正定性判斷可以通過二次型的實對稱矩陣的特征值或者順序主子式來判斷。
二次型的分類:
| 正定 | ?\forall? x≠0,f=xTAx>0x^TAx>0xTAx>0 | ?λk\forall \lambda_k?λk?>0 | ?Ak\forall A_k?Ak?>0 |
| 負定 | ?\forall? x≠0,f=xTAx<0x^TAx<0xTAx<0 | ?λk\forall \lambda_k?λk?<0 | ?Ak\forall A_k?Ak?>0,kkk為偶, ?Ak\forall A_k?Ak?<0,kkk為奇 |
| 半正定 | ?\forall? x≠0,f=xTAx≥0x^TAx≥0xTAx≥0 | ?λk\forall \lambda_k?λk?≥0 | ?Ak\forall A_k?Ak?≥0 |
| 半負定 | ?\forall? x≠0,f=xTAx≤0x^TAx≤0xTAx≤0 | ?λk\forall \lambda_k?λk?≤0 | ?Ak\forall A_k?Ak?≥0,kkk為偶, ?Ak\forall A_k?Ak?≤0,kkk為奇 |
| 不定 | ?\forall? x≠0,存在f>0,也存在f<0 | <0,>0 | 不滿足其他類型即是不定 |
解線性方程組
在線性代數的學習中,我們知道方程組解的情況及其判斷,設AAA為線性方程組的系數矩陣,BBB為線性方程組的增廣矩陣,方程組變量個數為n(討論的是方程個數≤n≤n≤n)則對于方程組Ax=bAx=bAx=b
case1:case1:case1:當R(A)=R(B)=nR(A)=R(B)=nR(A)=R(B)=n,有唯一解,
case2:case2:case2:當R(A)=R(B)<nR(A)=R(B)<nR(A)=R(B)<n,有無窮多個解,
case3:case 3:case3:當R(A)≠R(B)R(A)≠R(B)R(A)?=R(B),無解
則求線性方程組解的問題轉化為求方程組系數矩陣及增廣矩陣的秩的問題
對于case1,Acase1,Acase1,A滿秩,直接利用x=Ax=Ax=A \ bbb或inv(A)?binv(A)*binv(A)?b 得到解
對于case2case2case2, 可以利用rref(B)rref(B)rref(B)得到階梯形方程組的增廣矩陣,進一步得到方程的基礎解系
當一個齊次線性方程組有無窮多個解時,可以利用null函數求其基礎解系,null返回的矩陣的列向量組即為方程組的基礎解系,而有無窮多個解的非齊次方程組可以利用pinv函數求得一個特解,再利用null求相應齊次方程組的基礎解系,從而得到非齊次方程組的通解
%齊次方程組 clear clc A=[1 1 1 4 -3;2 1 3 5 -5;1 -1 3 -2 -1;3 1 5 6 -7]; %齊次方程組系數矩陣 if rank(A)==length(A)fprintf('有唯一解,即零解') elsefprintf('有無窮多個解,即有非零解')K=null(A,'r')%把解表示成x=k_1x_1+k_2x_2+...+k_nx_nsyms k x=0;for i=1:length(A)-rank(A)k(i)=strcat('k',num2str(i));x=x+k(i)*K(:,i);endx end%結果 x =2*k3 - k2 - 2*k1k1 - 3*k2 + k3k1k2k3 % 非齊次方程組 clear clc A=[1 5 -1 -1;1 -2 1 3;3 8 -1 1;1 -9 3 7]; b=[-1;3;1;7]; B=[A b]; RA=rank(A); RB=rank(B); n=length(A(1,:)); if RA==RBif RA==nfprintf('有唯一解')x=A\b;elsefprintf('有無窮多個解')r=pinv(A)*b; %特解K=null(A,'r'); %齊次方程組的基礎解系%把解表示成x=r+k_1x_1+k_2x_2+...+k_nx_nsyms k x=r;for i=1:length(K(1,:))k(i)=strcat('k',num2str(i));x=x+k(i)*K(:,i);endxend elsefprintf('無解') end總結
以上是生活随笔為你收集整理的MATLAB基础篇——线性代数应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: json字符串生成C#实体类的工具
- 下一篇: jvm内存设置