日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB基础篇——线性代数应用

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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≥0xTAx0?λk\forall \lambda_k?λk?≥0?Ak\forall A_k?Ak?≥0
半負定?\forall? x≠0,f=xTAx≤0x^TAx≤0xTAx0?λ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不滿足其他類型即是不定
clear clc A=[2 0 0;0 3 2;0 2 3]; %特征值法 e=eig(A) if all(e>0)fprintf('正定'); elseif all(e<0)fprintf('負定'); elseif all(e>=0)fprintf('半正定'); elseif all(e<=0)fprintf('半負定'); elsefprintf('不定'); end%順序主子式 Ak=[]; for i=1:length(A)Ak(i)=det(A(1:i,1:i)); end Ak % 2 6 10都大于0,為正定%改進版 clear n=length(A); d=zeros(1,n); for i=1:nd(i)=det(A(1:i,1:i)); end d c1=zeros(1,3);%記錄偶順序主子式>0,<0,=0 c2=zeros(1,3);%記錄奇順序主子式 for i=1:nif mod(i,2)==0if d(i)>0c1(1)=c1(1)+1;elseif d(i)<0c1(2)=c1(2)+1;elsec1(3)=c1(3)+1;endelseif d(i)>0c2(1)=c2(1)+1;elseif d(i)<0c2(2)=c2(2)+1;elsec2(3)=c2(3)+1;endend end c1 c2 if c1(1)+c2(1)==ndisp('正定') elseif c1(1)==fix(n/2) & c2(2)==n-fix(n/2)disp('負定') elseif c1(1)+c1(3)+c2(1)+c2(3)==ndisp('半正定') elseif c1(1)+c1(3)==fix(n/2) & c2(2)+c2(3)==n-fix(n/2)disp('半負定') elsedisp('不定') end

解線性方程組

在線性代數的學習中,我們知道方程組解的情況及其判斷,設AAA為線性方程組的系數矩陣,BBB為線性方程組的增廣矩陣,方程組變量個數為n(討論的是方程個數≤n≤nn)則對于方程組Ax=bAx=bAx=b
case1:case1:case1R(A)=R(B)=nR(A)=R(B)=nR(A)=R(B)=n,有唯一解,
case2:case2:case2R(A)=R(B)<nR(A)=R(B)<nR(A)=R(B)<n,有無窮多個解,
case3:case 3:case3R(A)≠R(B)R(A)≠R(B)R(A)?=R(B),無解
則求線性方程組解的問題轉化為求方程組系數矩陣及增廣矩陣的秩的問題
對于case1,Acase1,Acase1,A滿秩,直接利用x=Ax=Ax=A \ bbbinv(A)?binv(A)*binv(A)?b 得到解
對于case2case2case2, 可以利用rref(B)rref(B)rref(B)得到階梯形方程組的增廣矩陣,進一步得到方程的基礎解系

clear clc A=[1 -2 3 1 1;1 1 -1 -1 -2;2 -1 1 0 -2;2 2 5 -1 1]; b=[7;2;7;18]; B=[A b]; n=length(A); RA=rank(A);RB=rank(B); if RA==RBif RA==nfprintf('有唯一解')x=A\belsefprintf('有無窮多個解')d=rref(B)end elsefprintf('無解'); end% 求解結果 有無窮多個解 d =1 0 0 0 -2 30 1 0 0 -1 10 0 1 0 1 20 0 0 1 -2 0

當一個齊次線性方程組有無窮多個解時,可以利用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基础篇——线性代数应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。