理論知識補充:
%矩陣除分為矩陣右除和矩陣左除。
%矩陣右除的運算符號為「/」,設a,b為兩個矩陣,則「a/b」是指方程x*b=a的解矩陣x。
%矩陣a和b的列數必須是相等。
% 矩陣左除的運算符號為「\」,設a,b為兩個矩陣,則「b\a」是指方程b*x=a的解矩陣x。
%矩陣a和b的行數必須是相等。
%求解多項式的解,用roots函式
%求解定解方程組(未知數個數等於方程總數)
%a*x=ba=[1,2
;
3,4];
b=[5;11
]; y=a\b
z=inv(a)*b
執行結果:
y =1 2z = 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 ...