現代數值計算方法實驗一

2021-03-04 09:44:39 字數 5059 閱讀 8392

實驗報告

實驗一線性方程組迭代法實驗

一、實驗目的

1、通過本實驗學習線性方程組的迭代解法。掌握高斯-賽德爾迭代法、雅可比迭代法、sor迭代法的程式設計與應用,對比分析在不同條件下三種迭代法的收斂情況並得出一般結論。

2、 培養程式設計與上機除錯能力。

二、實驗題目

1、迭代法的收斂速度

實驗題目:用迭代法分別對n=20,n=200解方程組ax=b其中

a= (1)選取不同的初值和不同的右端向量b,給定迭代誤差,用兩種迭代法計算,觀測得到的迭代向量並分析計算結果給出結論;

(2)取定初值和右端向量b,給定迭代誤差,將a的主對角元成倍放大,其餘元素不變,用jacobi迭代法計算多次,比較收斂速度,分析計算結果給出結論.

2、sor迭代法鬆弛因子的選取

實驗題目:用超鬆弛(sor)迭代法解方程組ax=b,其中

(1) 給定迭代誤差,選取不同的超鬆弛因子》1進行計算,觀測得到的近似解向量並分析計算結果,給出你的結論;

(2) 給定迭代誤差,選取不同的超鬆弛因子<1進行計算,觀測得到的近似解向量並分析計算結果,給出你的結論.

三、實驗原理

1、演算法原理:jacobi迭代法

function x=majacobi(a,b,x0,ep,n)

n=length(b);

if nargin<5,n=500;end

if nargin<4,ep=1e-6;end

if nargin<3,x0=zeros(n,1);end

%用途:用jacobi迭代法解線性方程組ax=b

%格式:x=majacobi(a,b,x0,ep,n) a為係數矩陣,b為右端向量,

% x0為初始向量(預設零向量),ep為精度(預設1e-6),n為

%(預設500次),x返回近似解向量

x=zeros(n,1); k=0;

while k for i=1:n

x(i)=(b(i)-a(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/a(i,i);

endif norm(x-x0,inf) x0=x;k=k+1;

endif k==n,warning('已達到迭代次數上限');end

disp(['k= ',num2str(k)])

2、演算法原理:seidl迭代法

%maseidel.m

function x=majacobi(a,b,x0,ep,n)

n=length(b);

if nargin<5,n=500;end

if nargin<4,ep=1e-6;end

if nargin<3,x0=zeros(n,1);end

%用途:用jacobi迭代法解線性方程組ax=b

%格式:x=majacobi(a,b,x0,ep,n) a為係數矩陣,b為右端向量,

% x0為初始向量(預設零向量),ep為精度(預設1e-6),n為

%(預設500次),x返回近似解向量

x=zeros(n,1); k=0;

while k for i=1:n

x(i)=(b(i)-a(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/a(i,i);

endif norm(x-x0,inf) x0=x;k=k+1;

endif k==n,warning('已達到迭代次數上限');end

disp(['k= ',num2str(k)])

3、演算法原理:sor迭代法

%masor.m

function x=masor(a,b,omega,x0,ep,n)

%用途:用sor法解線性方程組ax=b

%格式:x=masor(a,b,omega,x0,ep,n) a為係數矩陣,b為右端向量,

% omega為鬆弛因子(預設1.5), x0為初始向量(預設零向量),

% ep為精度(預設1e-6),n為(預設500次),x返回近似解向量

n=length(b);

if nargin<6,n=500;end

if nargin<5,ep=1e-6;end

if nargin<4,x0=zeros(n,1);end

if nargin<3,omega=1.5;end

x=zeros(n,1); k=0;

while k for i=1:n

if i==1

x1(1)=(b(1)-a(1,2:n)*x0(2:n))/a(1,1);

else if i==n

x1(n)=(b(n)-a(n,1:n-1)*x(1:n-1))/a(n,n);

else

x1(i)=(b(i)-a(i,1:i-1)*x(1:i-1)-a(i,i+1:n)*x0(i+1:n))/a(i,i);

end end

x(i)=(1-omega)*x0(i)+omega*x1(i);

endif norm(x0-x,inf) k=k+1;x0=x;

endif k==n,warning('已達到迭代次數上限');end

disp(['k= ',num2str(k)])

4、矩陣程式

第一題:

function [a,b]=matrix(n)

clc;

a=zeros(n,n); b=zeros(n,1);

for i=1:n

a(i,i)=4;

b(i)=2;

endfor i=1:n-1

a(i,i+1)=-1./3;

a(i+1,i)=-1./3;

endfor i=1:n-2;

a(i,i+2)=-1./5;

a(i+2,i)=-1./5;

end第二題:

function [a,b]=matrix1(n)

%n=200;

clc; %clear;

a=zeros(n,n);

for i=1:n

a(i,i)=12;

b(i)=5;

endfor i=1:n-1

a(i,i+1)=-2;

a(i+1,i)=-2;

endfor i=1:n-2;

a(i,i+2)=1;

a(i+2,i)=1;

end5、執行程式

第一題n=20;

[a,b]=matrix(n);

x1=majacobi(a,b)

x2=maseidel(a,b)

%0.45*ones(n,1)

第二題:

n=200;

[a,b]=matrix1(n);

omega=0.99;

x=masor(a,b,omega)

四、實驗內容

1、 迭代法的收斂速度

⑴①當n=20,右端向量b不變,初值改變時

輸入執行程式:

n=20;

[a,b]=matrix(n);

x1=majacobi(a,b,0.25*ones(n,1))

x2=maseidel(a,b,0.25*ones(n,1))

x3=majacobi(a,b,0.50*ones(n,1))

x4=maseidel(a,b,0.50*ones(n,1))

x5=majacobi(a,b,0.75*ones(n,1))

x6=maseidel(a,b,0.75*ones(n,1))

x7=majacobi(a,b,ones(n,1))

x8=maseidel(a,b,ones(n,1))

輸出結果中的k值:k1= 10 k2= 7k3= 9 k4= 7

k5= 9 k6= 7k7= 10 k8= 7

②當n=200,右端向量b不變,初值改變時

輸入執行程式:

n=200;

[a,b]=matrix(n);

x1=majacobi(a,b,0.25*ones(n,1))

x2=maseidel(a,b,0.25*ones(n,1))

x3=majacobi(a,b,0.50*ones(n,1))

x4=maseidel(a,b,0.50*ones(n,1))

x5=majacobi(a,b,0.75*ones(n,1))

x6=maseidel(a,b,0.75*ones(n,1))

x7=majacobi(a,b,ones(n,1))

x8=maseidel(a,b,ones(n,1))

輸出結果中的k值:k1= 10 k2= 7k3= 9 k4= 7

k5= 9 k6= 7k7= 10 k8= 7

③ 當n=20,初值不變為0向量,右端向量b改變時

b(i)=1;

k1= 9

k2= 7

b(i)=2;

k1= 10

k2= 7

b(i)=100;

k1= 13

k2=10

b(i)=1000;

k1= 15

k2= 11

b(i)=1000000

k1= 20

k2= 14

④ 當n=200,初值不變為0向量,右端向量b改變時

b(i)=1;

k1= 9

k2= 7

b(i)=2;

k1= 10

k2= 7

b(i)=100;

k1= 13

k2=10

b(i)=1000;

k1= 15

k2= 11

b(i)=1000000

k1= 20

k2= 15

⑵ 將a的主對角元成倍放大,其餘元素不變,用jacobi迭代法計算多次

①當n=20,b(i)=1; =zeros(n,1)

取主對角元a=4 ,k= 10

取主對角元a=8,k= 7

取主對角元a=16,k=6

取主對角元a=32,k=5

取主對角元a=512,k=3

② 當n=200, b(i)=1; =zeros(n,1)

數值計算方法實驗

實驗一非線性方程的數值解法 10信計1班楊家博 201002044046 一 實驗目的 熟悉二分法和簡單跌點法的實現 二 實驗內容 教材p40 2.1.5 三 實驗要求 1.根據實驗內容編寫二分法簡單迭代的演算法程式 2.簡單比較分析兩種演算法的誤差 3.試構造不同的迭代格式,分析比較其收斂性 正文...

數值計算方法實驗報告jrh

一 實驗的性質 目的和任務 本實驗是與本專業基礎課 數值計算方法 相配套的,旨在鞏固專業課內容和學生程式設計的能力。通過實驗加強對數值方法的理解和掌握,編制出適用的程式。同時,在理論教學的基礎上,注意方法處理的技巧及其與計算機的結合,其次要通過例子,學習使用各種數值方法解決實際計算問題。要求學生應用...

數值計算方法教案 數值微分

第四章數值微分 一 中點公式 1.導數定義及數值微分的含義 向前公式 向後公式 中心公式 但當f x 不能或很難直接求導,或f x 並沒有解析表示式,只是乙個數表,此時如何計算呢?中點微分公式 用來替代f x 在a點的導數值 2.中點公式的誤差分析 作泰勒展開 把以上2式代入中點公式有 則從截斷誤差...