**:
數值計算實驗二**以及實驗報告位址
實驗題目:實驗**:1、高斯消元法 computer problems p100 2.2,(a)(b)
(1)用matlab語言提供的方法解方程組(x=a\b)
(2)寫出直接lu分解函式(參考例2.13),給出a的直接lu分解結果
(3)寫前代、回代函式。結合lu分解,前代、回代解(a)(b)方程組。
(4)直接使用軟體環境提供的函式lu分解函式、解方程組方法比較
說明:(2)、(3),這幾部分不得直接使用軟體環境提供的函式完成,可以參考課本上的演算法流程實現
%實驗二第一問 解方程組(x=a\b)
a = [2,4,-2;4,9,-3;-2,-1,7];
b = [2;8;10];
c = [4;8;-6];
x = a\b;
y = a\c;
fprintf('結果為:');
xy
mylu函式:
function [ l,u,p ] = mylu( a )
%untitled2
此處顯示有關此函式的摘要
% 此處顯示詳細說明
% lu 三角分解
%[l,u,p] = mylu(a)
%生成單位下三角矩陣l,上三角矩陣u,以及排列向量p
%滿足:l*u = a(p,:)
%本函式可以解決主元位置上有0的情況
%獲得a的行數和列數
[n,n] = size(a);
%定義排列向量p
p = (1:n)';
%for
迴圈,用 k 記錄消元步數
for k = 1:n-1
%為了排除第k列全為0以及主元位置為0
%先找出第k列的對角元及以下元素的絕對值的最大值
[r,m] = max(abs(a(k:n,k))); % r為最大值,m 為相對行數
m = m+k-1; %此時 m 為最大值在a中對應的 行數
%如果第k列全為0 ,則跳過消元過程
if (a([m,k]) ~= 0)
%避免主元為0,將絕對值最大值交換到主元所在行,現在的主元是對角元
if( m ~= k)
a([k m],:) = a([m k],:); %矩陣a兩行進行交換
p([k m]) = p([m k]) ; %排列向量p 兩行進行交換
end%計算第k列元素除以主元後得到的數
i = k+1:n;
a(i,k) = a(i,k)/a(k,k);
%更新矩陣剩餘部分
j = k+1:n;
a(i,j) = a(i,j) - a(i,k)*a(k,j);
endend%分離結果
l = tril(a,-1) + eye(n,n); %tril()函式提取矩陣的下三角部分,eye()獲得單位矩陣
u = triu(a); %tril()函式提取矩陣的上三角部分
end
利用mylu函式**如下:
%實驗二的(2)寫出直接lu分解函式,給出a的直接lu分解結果
a = [2,4,-2;4,9,-3;-2,-1,7];
[l,u,p] = my_lu(a);
fprintf('矩陣a的 l*u 分解為:');lu
fprintf(' l*u 形成矩陣 lu 為:');
lu = l*u
fprintf(' 排列向量 p 為:');
p'fprintf('矩陣 a 為:');
a
(3)兩個函式,前代函式以及後代函式:
function
x = myforward
(l,x)
%my_forward 前向消元,前代
%對於下三角矩陣l, x = my_forward(l,b)給出 l*x = b 的解x
[n,n] = size(l);
%消元過程
for k = 1:n
j = 1:k-1 ;
x(k)= x(k) - l(k,j)*x(j);
x(k)= x(k)/l(k,k);
endend
function
x = myback
(u,x)
% my_back 後向消元
%對於上三角矩陣u, x = my_back(u,y) 給出 u*x = y 的解x
[n,n] = size(u);
%消元過程
for k = n:-1:1
j = k+1:n ;
x(k) = (x(k) - u(k,j)*x(j))/u(k,k);
endend
使用自編函式求解**:
%第三問 寫前代、回代函式。結合lu分解,前代、回代解(a)(b)方程組。
a = [2,4,-2;4,9,-3;-2,-1,7];
b = [2;8;10];
c = [4;8;-6];
[l,u,p] = mylu(a);
%重新排列 b ,向前消元,l*u*x1 = b,其中 l*y1 = b
y1 = myforward(l,b(p));
%反向回代
x1 = myback(u,y1);
fprintf('利用前代、回代函式,結合lu分解,得到的答案 x 為:')
x = x1
%重新排列 c ,向前消元,l*u*x2 = c,其中 l*y2 = c
y2 = myforward(l,c(p));
%反向回代
x2 = myback(u,y2);
fprintf('利用前代、回代函式,結合lu分解,得到的答案 y 為:')
y = x2
%實驗二的第四問 直接使用軟體環境提供的函式lu分解函式
[l,u,p] = lu(a);
fprintf('得到的 l*u 分解為:');
lu
山東大學作業系統實驗四
一.實驗內容 抽菸者問題。假設乙個系統中有三個抽菸者程序,每個抽菸者不斷地捲菸並抽菸。抽菸者捲起並抽掉一顆煙需要有三種材料 菸草 紙和膠水。乙個抽菸者有菸草,乙個有紙,另乙個有膠水。系統中還有兩個 者程序,它們無限地 所有三種材料,但每次僅輪流提供三種材料中的兩種。得到缺失的兩種材料的抽菸者在捲起並...
山東大學程式設計第二週作業
東東有一張地圖,想通過地圖找到妹紙。地圖顯示,0表示可以走,1表示不可以走,左上角是入口,右下角是妹紙,這兩個位置保證為0。既然已經知道了地圖,那麼東東找到妹紙就不難了,請你編乙個程式,寫出東東找到妹紙的最短路線。輸入是乙個5 5的二維陣列,僅由0 1兩數字組成,表示法陣地圖。輸出若干行,表示從左上...
山東大學Python(3) 容器
使用 jupyter notebook 編寫 本章知識目錄 本節非常簡單,看ppt即可,下面的 為一些測試 考試 非常重要 查詢 增加 刪除 引用 ppt所有的都要看 list list name.remove x 刪除首次出現的值為x的元素,x不存在則丟擲異常 del list name inde...