Matlab隨筆之求解線性方程

2022-07-17 19:15:12 字數 2109 閱讀 7272

理論知識補充:

%矩陣除分為矩陣右除和矩陣左除。

%矩陣右除的運算符號為「/」,設a,b為兩個矩陣,則「a/b」是指方程x*b=a的解矩陣x。

%矩陣a和b的列數必須是相等。

% 矩陣左除的運算符號為「\」,設a,b為兩個矩陣,則「b\a」是指方程b*x=a的解矩陣x。

%矩陣a和b的行數必須是相等。

%求解多項式的解,用roots函式

%求解定解方程組(未知數個數等於方程總數)

%a*x=b 

a=[1,2

;

3,4];

b=[5;11

]; y=a\b

z=inv(a)*b

執行結果:

y =1 2

z = 1

2

%求解不定方程組(未知數個數大於方程總數)

a=[4,5,1; 

1,2,3];

b=[3;5];

x=a\b

執行結果:

x =

0 0.3077

1.4615

%求解超定方程組(未知數個數小於方程總數)

a=[1,1; 

-2,-4;

1,-2];

b=[2;-3;2];

x=a\b

求解輸出如下圖所示,需要說明時,求得結果是以一最小二乘近似解。

x =

1.8182

-0.1299

%求解奇異方程組(多個方程之間有重複)

a=[1,2,1; 

-2,-4,-2;

1,-2,5];

b=[6;-12;3];

x=a\b

此時,結果為

警告: 矩陣為奇異工作精度。 

> in test at 5

x = nan

nan

nan

此時,可以做同解異構,如下:

a=[1,2,1; 

-2,-4,-2;

1,-2,5;

0,0,0];

b=[6;-12;3;0];

x=a\b

執行結果為:

x =

0 2.2500

1.5000

總結:將上面的所有情況封裝起來,做成乙個函式,**如下:

function x=solveequation(a,b)

% 解方程a*x=b

%a為係數方程,b為列向量

[temp1,temp2]=size(b);

if(temp2~=1)%判斷b是否為列向量

disp(

'b不是列向量!');

return

end[c,d]=size(a);%c為方程數,d為未知量個數

if(c~=temp1)

disp(

'a,b行數不一致!');

return

endif(c==d)

if(det(a)==0)%奇異方程組

disp(

'奇異方程組問題');

a=[a;zeros(1

,d)];

b=[b;0

]; x=a\b;

return

end %定解方程組

disp(

'定解方程組問題');

x=a\b;

return

elseif(c>d)%超定方程

disp(

'超定方程組問題');

x=a\b;

return

else

disp(

'不定方程問題');

x=a\b;

return

end

使用matlab求解線性 非線性方程

使用matlab求解線性方程 ax b 形式 a b為矩陣 1 a為非奇異矩陣時,既有唯一解時 共有三種方法求解 example clear all a 3 9 2 4 b 42 2 three methods x inv a b good x a b better x linsolve a,b b...

matlab 求解非線性方程 方程組

使用matlab求解非線性規劃 目標函式們 0 create by zhiyang dou 2019 4 10 contact sdudzy 163.com function f target d,r,j,b,sigma j f 1 j j d 1 normcdf log j d 1 b r 0.5...

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 ...