实验一。实验步骤:
得到。则有:
jacobi迭代法:
令则称为雅克比迭代矩阵。
可得雅克比迭代的迭代格式如下:
gauss-seidel迭代法:
令,则称为gauss-seidel迭代矩阵。
可得gauss-seidel迭代的迭代格式如下:
sor迭代法:
令,则有:
令带入的值可有。
称为sor迭代矩阵。
可得sor迭代的迭代格式如下:
2、编写程序:
一、jacobi迭代法m文件:
function [y,n]=jacobi(a,b,x0,eps)
n=length(a);
if nargin<3
error('输入错误,最少要输入三个参数');
return;
endif nargin==3
eps=1e-6;
endd=diag(diag(a));
l=-tril(a,-1);
u=-triu(a,1);
m=d;n=l+u;
b=m\n;
f=m\b;
if max(abs(eig(b)))1
disp('谱半径大于等于1,迭代不收敛,无法进行');
return;
endn=1;
for i=1:1:n
if sum(a(i,i)~=n)~=n
error('输入的a矩阵的对角线元素不能为0');
return;
endend
y=b*x0+f;
while norm(y-x0)>=eps&n<100
x0=y;y=b*x0+f;
n=n+1;
end二、gauss-seidel迭代法:
function [y,n]=gaussseidel(a,b,x0,eps)
n=length(a);
if nargin<3
error('输入错误,最少要输入三个参数');
return;
endif nargin==3
eps=1e-6;
endd=diag(diag(a));
l=-tril(a,-1);
u=-triu(a,1);
m=d-l;
n=u;b=m\n;
f=m\b;
if max(abs(eig(b)))1
disp('谱半径大于等于1,迭代不收敛,无法进行');
return;
endn=1;
for i=1:1:n
if sum(a(i,i)~=n)~=n
error('输入的a矩阵的对角线元素不能为0');
return;
endend
y=b*x0+f;
while norm(y-x0)>=eps&n<100
x0=y;y=b*x0+f;
n=n+1;
end三、sor迭代法:
function [y,n]=sor(a,b,x0,w,eps)
n=length(a);
if nargin<3
error('输入错误,最少要输入三个参数');
return;
endif nargin==3
eps=1e-6;
endd=diag(diag(a));
l=-tril(a,-1);
u=-triu(a,1);
b1=d\(l+u);
m=1/w*(d-w*l);
n=1/w*((1-w)*d-w*u);
b=m\n;
f=m\b;
n=1;for i=1:1:n
if sum(a(i,i)~=n)~=n
error('输入的a矩阵的对角线元素不能为0');
return;
endend
y=b*x0+f;
while norm(y-x0)>=eps&n<100
x0=y;y=b*x0+f;
n=n+1;
end3、(1)编写给定为五对角矩阵。
程序:a=zeros(20,20);
for i=1:1:20
a(i,i)=3;
endfor i=1:1:20
for j=1:1:20
if abs(i-j)==1
a(i,j)=-1/2;
endend
endfor i=1:1:20
for j=1:1:20
if abs(i-j)==2
a(i,j)=-1/4;
endend
end第一次给定初始向量为20行一列的0,右端面项向量b=20行一列的1,迭代误差要求0.0001
jacobi迭代法求解:
命令窗口输入:
b=ones(20,1);
x0=zeros(20,1);
eps=0.0001;
y,n]=jacobi(a,b,x0,eps)
输出结果:y = 0.481632289214861
n =15gauss-seidel迭代法求解:
命令窗口输入:
b=ones(20,1);
x0=zeros(20,1);
eps=0.0001;
y,n]=gaussseidel(a,b,x0,eps)
输出结果:y =0.481628804263540
n =10第二次给定初始向量为20行一列的0,右端面项向量b=20行一列的2.001,迭代误差要求0.0001
jacobi迭代法求解:
> b=2.001*ones(20,1);
> x0=zeros(20,1);
> eps=0.0001;
> [y,n]=jacobi(a,b,x0,eps)
输出结果:y =0.963749879811695
n =16gauss-seidel迭代法求解:
> b=2.001*ones(20,1);
> x0=zeros(20,1);
> eps=0.0001;
> [y,n]=gaussseidel(a,b,x0,eps)
输出结果:y =0.963748648908262
n =11从结果可以看出其是收敛,在较少的迭代次数下可以满足误差要求的解。
2)第一次给定初始向量为20行一列的0,右端面项向量b=20行一列的1,迭代误差要求0.00005,松弛因子为 1.5。
命令窗口输入:
> b=ones(20,1);
> x0=zeros(20,1);
> w=1.5;
> eps=1e-5;
> [y,n]=sor(a,b,x0,w,eps)
输出结果:y =1.0e+012 *
数值分析上机作业
一。上机作业任务一 用五点差分格式求解poisson方程边值问题,p 任选一题 二。上机作业任务二 用simpson求积法计算定积分。下面两种方法任选一。1 变步长复化simpson求积法2 自适应simpson求积法。三。上机作业任务三 用matlab语言编写连续函数最佳平方逼近的算法程序 函数式...
数值分析上机作业
今天的上机作业。1.lagrange 插值。给出的数值表。用lagrange 插值计算的近似值。2 newton插值。用newton插值计算x 0.41的近似值。3.插值法的全部内容。把chap 2试验。doc的全部内容作一边,粘在这个文件里 包括图形 答 插值。function f lagrang...
数值分析上机作业
第二次上机作业。一。任务 用matlab语言编写连续函数最佳平方逼近的算法程序 函数式m文件 并用此程序进行数值试验,写出计算实习报告。二。程序功能要求 在后面的附一的基础上进行修改,使其更加完善。要求算法程序可以适应不同的具体函数,具有一定的通用性。所编程序具有以下功能 1.用lengendre多...