数值分析上机作业

发布 2022-09-05 10:52:28 阅读 8925

实验一。实验步骤:

得到。则有:

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多...