對於一般的,有唯一解的線性方程組,我們可以轉換成矩陣的形式:
a x=
bax=b
ax=b
則可以用矩陣運算求解x,即x=a\b
求解齊次線性方程組基礎解系的函式是null
z=null(a)表示返回矩陣a的基礎解系組成的矩陣。z還滿足ztz=i
z=null(a,『r』)得出的z不滿足ztz=i,但得出的矩陣元素多為整數,顧一般都帶引數r。
非齊次線性方程組在求出基礎解析後還要求乙個特解。對於矩陣形式的非齊次線性方程組ax=
bax=b
ax=b
特解x0
x_0x0
的求法為x0=pinv(a)*b;其中函式pinv的意思是偽逆矩陣。
例如求解線性方程組:
由輸出結果可知方程的解為
x =k
1[−6
210]
+k2[
−420
1]+[
13/7746/77
−1/11
−40/77
](k1
,k2∈
r)x=k_1 \begin -6\\2\\1\\0\\ \end +k_2 \begin -4\\2\\0\\1\\ \end +\begin 13/77\\46/77\\-1/11\\-40/77\\ \end \quad (k_1,k_2 ∈r)
x=k1⎣
⎢⎢⎡
−621
0⎦⎥
⎥⎤+
k2⎣
⎢⎢⎡
−420
1⎦⎥
⎥⎤+
⎣⎢⎢⎡
13/
7746
/77−
1/11
−40/
77⎦
⎥⎥⎤
(k1
,k2
∈r) =r
ref(
a)r=rref(a)
r=rref
(a)我們可以用線性代數知識,編寫乙個函式,給入矩陣a和b,給出方程的解,函式自動判斷是有唯一解還是無窮解。
先搭建出函式的框架
function varargout = zjx_solvebygauss(varargin)
%zjx_solvebygauss 用高斯消元法解線性方程組
% a是係數矩陣,b是常熟矩陣。varargin=;如果b為0,則不輸入b
% varargout=[s flag],s給出結果
% flag為0無解;1唯一解;2齊次通解;3非齊次通解
a=cell2mat(varargin(1));
alie=length(a);asum=numel(a);ahang=asum/alie;
if(nargin==2)
b=cell2mat(varargin(2));
else
b(ahang,1)=0;
endb=a; b(:,alie+1)=b;
varargout(1)=;
if(nargout==2)
varargout(2)=;
endend
現在完成了基本框架的構建,其中varargout等含義參見函式部分的內容。現在我們已經得到了矩陣a、b,a的行數ahang,a的列數alie,增廣矩陣b。現在在中間的空格位置進行運算。
程式設計
ar=rank(a); br=rank(b);
b=rref(b);
if (ar
測試同樣求之前的方程組通解
如圖,帶方程b則s最後一列是特解,不帶b則沒有特解。日後我們可以直接呼叫這個函式方便求解。而且比較結果我們發現,這樣求出來的特解形式要簡單一些。
MATLAB 線性方程組求解
clc,clear all close all 高斯消去法 a 2 3 4 3 5 2 4 3 30 線性方程組的係數矩陣 b 6 5 32 線性方程組的右端列向量 m,n size a 測量係數矩陣的維數 if m n fprint 線性方程組的係數矩陣非方陣 break end fprintf ...
matlab線性方程組求解
線性方程組的求解主要有兩種方法,分別是直接法和迭代法,本節也將圍繞這兩種方法去講解一些matlab在求解線性方程組的相關知識。一 線性方程組的直接解法 主要可以分為以下三種方法 高斯 gauss 消去法 列主元消去法 矩陣的三角分解法 高斯 gauss 消去法是乙個經典的直接法,由它改進得到的列主元...
SVD求解線性方程組
對於任一給定的矩陣am n boldsymbol am n 都存在這樣的分解 a u dv t boldsymbol boldsymbol boldsymbol boldsymbol t a udvt 這裡 u boldsymbol u是乙個 m m m times m m m 的正交矩陣,d bo...