1. 程式人生 > >Matlab知識點(二)

Matlab知識點(二)

百雞問題

今有雞翁一, 值錢伍; 雞母一, 值錢三; 雞雛三, 值錢一。 凡百錢買雞百隻,問雞翁、母、雛各幾何?

利用學過的數學知識求解,並使用MATLAB作為輔助工具求解。
1.列方程組求解
要求1.寫出百雞問題的方程組;
在這裡插入圖片描述
要求2.寫出其係數矩陣(A)、常數項構成的常數列向量(b)和增廣矩陣(B=[A,b])。
解法:使用行初等變換(rref)求解。

A = [1 1 1;15 9 1]; % 同時擴大3倍
b = [100 300]';
B =[A,b];

%化成最簡型
format rat
rref(B)

在這裡插入圖片描述

這裡得到一個簡化的方程,可以寫出來分別求適合的解,也就說這不是唯一解!

2.列表求解

公雞 母雞 小雞 總數
? ? ? ?

特別:公雞的數量知道了,母雞的數量也知道了,則根據題意可知:小雞的數量=100-公雞-母雞。
根據題意,可以估算出公雞的最大值不超過15,母雞不超過26.
試著把上面的表格求解變成MATLAB程式。

for x=0:15
    for y = 0:26
        z=100-x-y;
        if 15*x+9*y+z==300
            sprintf('公雞=%d,母雞=%d,小雞=%d',x,y,z)
        end
    end
end

在這裡插入圖片描述

矩陣運算
在這裡插入圖片描述

求A-3B

A=[1 2 3;1 4 9;1 8 27];
B=[2 4 5;-3 0 6;-5 2 6];
p=2*A-3*B

求AB和BA

q=A*B

求A^(-1) B,和A\B

k=A^-1 * B

高斯消元
在這裡插入圖片描述
1、高斯消元法的每個步驟:

 A = [2 4 1 1 5;-1 -2 -2 1 -4;1 2 -1 2 1];
 
 %第三行和第一行換位
 A([1,3],:)=A([3,1],:);
 
 %第一行和第二行相加
 A(2,:)=A(2,:)+A(1,:);
 
 %第三行減去兩倍的第一行
 A(3,:) = A(3,:)-2*A(1,:);
 
 %第二行乘以(-1/3)
 A(2,:)=-1/3*A(2,:);
 
 %第1行加上第二行
 A(1,:)=A(1,:)+A(2,:);
 
 %第三行乘以1/3加上第二行
 A(3,:) = 1/3*A(3,:)-A(2,:)

最終消元結果:
在這裡插入圖片描述
當然這些都是可以通過rref命令來解決的!