實驗報告
實驗一線性方程組迭代法實驗
一、實驗目的
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式代入中點公式有 則從截斷誤差...