计算方法实验报告-线性方程组的数值解法
数值计算方法实验报告
数值计算方法实验报告一、实验介绍本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。
本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。
二、实验内容1. 数值微积分数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。
本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。
2. 线性方程组的求解线性方程组求解是数值计算领域中的重要内容。
本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。
3. 插值与拟合插值与拟合是数值计算中的另一个重要内容。
本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。
4. 常微分方程的数值解常微分方程的数值解是数值计算中的难点之一。
本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。
三、实验结果通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。
在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。
在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。
在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。
在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度更高。
四、实验总结本次实验通过对于数值计算方法的模拟实现,进一步加深了我们对于数值计算方法的理解和掌握。
在实验过程中,我们了解了数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等多个方面的内容,在实践中进一步明确了不同方法的特点和优缺点,并可以通过比较不同方法的计算效率和数值精度来选择合适的数值计算方法。
数值分析计算方法实验报告
end;
end;
X=x;
disp('迭代结果:');
X
format short;
输出结果:
因为不收敛,故出现上述情况。
4.超松弛迭代法:
%SOR法求解实验1
%w=1.45
%方程组系数矩阵
clc;
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]
b=[10,5,-2,7]'
b=[10,5,-2,7]'
[m,n]=size(A);
if m~=n
error('矩阵A的行数和列数必须相同');
return;
end
if m~=size(b)
error('b的大小必须和A的行数或A的列数相同');
return;
end
if rank(A)~=rank([A,b])
error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');
3.实验环境及实验文件存档名
写出实验环境及实验文件存档名
4.实验结果及分析
输出计算结果,结果分析和小结等。
解:1.高斯列主元消去法:
%用高斯列主元消去法解实验1
%高斯列主元消元法求解线性方程组Ax=b
%A为输入矩阵系数,b为方程组右端系数
%方程组的解保存在x变量中
format long;
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]
return;
end
c=n+1;
A(:,c)=b;
for k=1:n-1
数值分析实验报告--解线性方程组的迭代法及其并行算法
disp('请注意:高斯-塞德尔迭代的结果没有达 到给定的精度,并且迭代次数已经超过最大迭 代次数max1,方程组的精确解jX和迭代向量X 如下: ') X=X';jX=jX' end end X=X';D,U,L,jX=jX'
高斯-塞德尔的输入为:
A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2]; X0=[0 0 0]'; X=gsdddy(A,b,X0,inf, 0.001,100) A=[10 2 3;2 10 1;3 1 10]; 请注意:因为对角矩阵 D 非奇异,所以此方程组有解.
0.0301 0.0758 0.1834
8.心得体会:
这已经是第三次实验了, 或多或少我已经对 MATLAB 有了更多的了 解与深入的学习。通过这次实验我了解了雅可比迭代法和高斯- 塞德尔迭代法的基本思想,虽然我们不能熟练编出程序,但还是 能看明白的。运行起来也比较容易,让我跟好的了解迭代法的多 样性,使平常手算的题能得到很好的验证。通过这次实验让我对 MATLAB 又有了更深一层的认识,使我对这门课兴趣也更加浓厚。
运行雅可比迭代程序输入: A=[10
b=[1;1;2];X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)
2 3;2 10 1;3 1 10];
结果为:
k= 1 X=
0.1000 k= 2 X= 0.0200 k= 3 X= 0.0400 k= 4 X= 0.0276 k= 5 X= 0.0314 k= 6 X= 0.0294 k= 7 X= 0.0301 k= 8 X= 0.0297
6、 设计思想:先化简,把对角线的项提到左边,其它项
实验五(线性方程组的数值解法和非线性方程求解)
1大学数学实验 实验报告 | 2014/4/5一、 实验目的1、学习用Matlab 软件数值求解线性代数方程组,对迭代法的收敛性和解的稳定性作初步分析;2、通过实例学习用线性代数方程组解决简化问题。
二、 实验内容项目一:种群的繁殖与稳定收获:种群的数量因繁殖而增加,因自然死亡而减少,对于人工饲养的种群(比如家畜)而言,为了保证稳定的收获,各个年龄的种群数量应维持不变。
种群因雌性个体的繁殖而改变,为方便起见以下种群数量均指其中的雌性。
种群年龄记作k=1,2,…,n ,当年年龄k 的种群数量记作x k ,繁殖率记作b k (每个雌性个体1年的繁殖的数量),自然存活率记作s k (s k =1−d k ,d k 为1年的死亡率),收获量记作ℎk ,则来年年龄k 的种群数量x ̌k 应该为x ̌k =∑b k n k=1x k , x ̌k+1=s k x k −ℎk , (k=1,2,…,n -1)。
要求各个年龄的种群数量每年维持不变就是要求使得x ̌k =x k , (k=1,2,…,n -1).(1) 如果b k , s k 已知,给定收获量ℎk ,建立求各个年龄的稳定种群数量x k 的模型(用矩阵、向量表示).(2) 设n =5,b 1=b 2=b 5=0,b 3=5,b 4=3,s 1=s 4=0.4,s 2=s 3=0.6,如要求ℎ1~ℎ5为500,400,200,100,100,求x 1~x 5.(3) 要使ℎ1~ℎ5均为500,如何达到?问题分析:该问题属于简单的种群数量增长模型,在一定的条件(存活率,繁殖率等)下为使各年龄阶段的种群数量保持不变,各个年龄段的种群数量将会满足一定的要求,只要找到种群数量与各个参量之间的关系,建立起种群数量恒定的方程就可以求解出各年龄阶段的种群数量。
模型建立:根据题目中的信息,令x ̌k =x k ,得到方程组如下:{x ̌1=∑b k nk=1x k =x 1x ̌k+1=s k x k −ℎk =x k+1整理得到:{−x 1∑b k nk=1x k =0−x k+1+s k x k =ℎk2 大学数学实验 实验报告 | 2014/4/52写成系数矩阵的形式如下:A =[b 1−1b 2b 3s 1−100s 2−1…b n−1b n0000⋮⋱⋮000000000⋯00−10s n−1−1]令h =[0, ℎ1,ℎ2,ℎ3,…,ℎn−2,ℎn−1]Tx =[x n , x n−1,…,x 1]T则方程组化为矩阵形式:Ax =h ,即为所求模型。
matlab线性方程组数值求解实验报告
湖南大学电气与信息工程学院 《数值计算》课程 上机实验报告一. 实验目的:了解gauss 消去法和迭代法matlab 算法实现求任意方程组的根。
二. 实验内容:用gauss 消去法和迭代法求解下列线性方程组:263234323923321321321=++=++=++x x x x x x x x x1.求出gauss 消去法的上三角矩阵和方程组的解321,,x x x ,并在命令窗口显示;2.显示迭代法求解过程中所有结果(,,,,,,,,,321131*********NN N x x x x x x x x x ⋯⋯)要求求解精度达到10^-5.三. 算法介绍或方法基础1) 消去法:消元过程:设0)0(11≠a ,令乘数)0(11)0(11/a a m i i -=,做(消去第i 个方程组的i x )操作1i m ×第1个方程+第i 个方程(i=2,3,.....n )则第i 个方程变为1)1(2)1(2...i n in i b x a x a =++ 这样消去第2,3,。
,n 个方程的变元i x 后。
原线性方程组变为:⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(11)0(11... . .... ...n n nn n n n n n b x a x a b x a x a b x a x a 这样就完成了第1步消元。
回代过程:在最后的一方程中解出n x ,得:)1()1(/--=n nn n n n a b x再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解: 其通项为3,...1-n 2,-n k /)()1(1)1()1(=-=-+=--∑k kk nk j j k kj k kk a x abx高斯赛德尔迭代法:由雅可比迭代公式可知,在迭代的每一步计算过程中是用()k x的全部分量来计算()1+k x的所有分量,显然在计算第i 个分量()1+k ix 时,已经计算出的最新分量()()1111+-+k i k x ,...,x 没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第1+k 次近似()1+k x 的分量()1+k jx 加以利用,就得到所谓解方程组的高斯—塞德(Gauss-Seidel )迭代法.把矩阵A 分解成U L D A --= (6)其中()nn a ,...,a ,a diag D 2211=,U ,L --分别为A 的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成 ()b Ux x L D +=-即 22f x B x +=其中()()b L D f ,U L D B 1212---=-= (7)以2B 为迭代矩阵构成的迭代法(公式)()()221f x B x k k +=+ (8)称为高斯—塞德尔迭代法(公式),用 量表示的形式为⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++ (9)由此看出,高斯—塞德尔迭代法的一个明显的优点是,在电算时,只需一组存储单元(计算出()1+k ix 后()k ix 不再使用,所以用()1+k ix 冲掉()k ix ,以便存放近似解.四.程序1)消去法:function x=gauss(A,b)n=length(b);A=[A,b];for k=1:(n-1)A((k+1):n,(k+1):(n+1))=A((k+1):n,(k+1):(n+1))... -A((k+1):n,k)/A(k,k)*A(k,(k+1):(n+1));A((k+1):n,k)=zeros(n-k,1);Aendx=zeros(n,1);x(n)=A(n,n+1)/A(n,n);for k=n-1:-1:1x(k,:)=(A(k,n+1)-A(k,(k+1):n)*x((k+1):n))/A(k,k);end2)迭代法:function EX()a=input('请输入系数矩阵a:');b=input('请输入矩阵b:');N=input('请输入最大迭代次数N:');esp=input('请输入近似解的误差限:');if any(diag(a))==0error('系数矩阵错误,迭代终止!')endD=diag(diag(a));X0=zeros(size(b));x1=0;x2=0;x3=0;X1=[x1;x2;x3];h=inv(D)*b;B=inv(D)*(D-a);B1=triu(B);B2=tril(B);k=1;fprintf('高斯-赛德尔迭代法');fprintf('第0次迭代得:')disp(X1');while k<=Nx1=h(1,1)+B1(1,:)*X0;X1=[x1;x2;x3];x2=h(2,1)+B1(2,:)*X0+B2(2,:)*X1;X1=[x1;x2;x3];x3=h(3,1)+B2(3,:)*X1;X1=[x1;x2;x3];if norm(X1-X0,inf)<espfprintf('已满足误差限。
线性方程组的直接解法实验报告
本科实验报告
课程名称:数值计算方法B
实验项目:线性方程组的直接解法
最小二乘拟合多项式
实验地点:ZSA401
专业班级:学号:201000
学生姓名:
指导教师:李志
2012年4月13日
for(i=1;i<=n;i++)
{
for(j=1;j<=n+1;j++)
printf("%lf\t",A[i][j]);
printf("\n");
}
double answer[N];
Gauss_eliminate(n,answer);
/*输出解*/
for(i=1;i<=n;i++)
printf("a[%d]=%lf\t",i-1,answer[i]);
getchar();
getchar();
}
四、实验结果与讨论、心得
讨论、心得:
刚开始调试代码的时候有时候就是很小的错误导致整个程序不能运行,需要我们一步一步慢慢来,经过无数次的检查程序错误的原因,以及在老师的帮助下,完成了这次实验。
这段时间的实验课提高了我的分析问题,解决问题的能力,特别提高了对一个程序的整。
数值分析实验报告-清华大学--线性代数方程组的数值解法
数值分析实验报告-清华大学--线性代数方程组的数值解法(总15页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--线性代数方程组的数值解法实验1. 主元的选取与算法的稳定性问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。
实验内容:考虑线性方程组 n n n R b R A b Ax ∈∈=⨯,,编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。
实验要求:(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。
取n=10计算矩阵的条件数。
让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。
每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。
若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。
重复上述实验,观察记录并分析实验结果。
程序清单n=input('矩阵A 的阶数:n=');A=6*diag(ones(1,n))+diag(ones(1,n-1),1)+8*diag(ones(1,n-1),-1); b=A*ones(n,1);p=input('计算条件数使用p-范数,p='); cond_A=cond(A,p) [m,n]=size(A);Ab=[A b];r=input('选主元方式(0:自动;1:手动),r=');Abfor i=1:n-1switch rcase(0)[aii,ip]=max(abs(Ab(i:n,i)));ip=ip+i-1;case (1)ip=input(['第',num2str(i),'步消元,请输入第',num2str(i),'列所选元素所处的行数:']);end;Ab([i ip],:)=Ab([ip i],:);aii=Ab(i,i);for k=i+1:nAb(k,i:n+1)=Ab(k,i:n+1)-(Ab(k,i)/aii)*Ab(i,i:n+1);end;if r==1Abendend;x=zeros(n,1);x(n)=Ab(n,n+1)/Ab(n,n);for i=n-1:-1:1x(i)=(Ab(i,n+1)-Ab(i,i+1:n)*x(i+1:n))/Ab(i,i);endx运行结果(1)n=10,矩阵的条件数及自动选主元Cond(A,1) =×103Cond(A,2) = ×103Cond(A,inf) =×103程序自动选择主元(列主元)a.输入数据矩阵A的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=0b.计算结果x=[1,1,1,1,1,1,1,1,1,1]T(2)n=10,手动选主元a. 每步消去过程总选取按模最小或按模尽可能小的元素作为主元矩阵A 的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:1(2)(2) 6.0000 1.00007.00004.6667 1.0000 5.66678.0000 6.000015.0000[]8.00001.000015.00006.0000 1.00008.0000 6.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:2…(实际选择时,第k 步选择主元处于第k 行) 最终计算得x=[, , , , , , , , , ]Tb. 每步消去过程总选取按模最大的元素作为主元 矩阵A 的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:2(2)(2)8.0000 6.0000 1.000015.0000-3.50000.7500-4.250008.0000 6.0000 1.000015.0000[]8.0000 6.000015.00008.0000 1.00006.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:3…(实际选择时,第k 步选择主元处于第k+1行) 最终计算得x=[1,1,1,1,1,1,1,1,1,1]T(3)n=20,手动选主元a. 每步消去过程总选取按模最小或按模尽可能小的元素作为主元 矩阵A 的阶数:n=20计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:1(2)(2) 6.0000 1.00007.00004.6667 1.0000 5.66678.0000 6.000015.0000[]8.00001.000015.00006.0000 1.00008.0000 6.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:2…(实际选择时,第k 步选择主元处于第k 行) 最终计算得x=[,,,,,,,,,,,,,,,,,,,]T b. 每步消去过程总选取按模最大的元素作为主元 矩阵A 的阶数:n=20计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:2(2)(2)8.0000 6.0000 1.000015.0000-3.50000.7500-4.250008.0000 6.0000 1.000015.0000[]8.0000 6.000015.00008.0000 1.00006.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:3…(实际选择时,第k步选择主元处于第k+1行)最终计算得x=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]T(4)A分别为幻方矩阵,Hilbert矩阵,pascal矩阵和随机矩阵简要分析计算(1)表明:对于同一矩阵,不同范数定义的条件数是不同的;Gauss消去法在消去过程中选择模最大的主元能够得到比较精确的解。
迭代法解线性方程组-数值分析实验报告
数学与计算科学学院《数值分析》课程设计题目:迭代法解线性方程组专业:信息与计算科学学号:*******-24*名:**指导教师:**成绩:二零一六年六月二十日一 、前言:(目的和意义)1.实验目的①掌握用迭代法求解线性方程组的基本思想和步骤。
②了解雅可比迭代法,高斯-赛德尔法和松弛法在求解方程组过程中的优缺点。
2.实验意义迭代法是用某种极限过程去逐步逼近线性方程组精确解的方法,它是解高阶稀疏方程组的重要方法。
迭代法的基本思想是用逐次逼近的方法求解线性方程组。
比较雅可比迭代法,高斯-赛德尔迭代方法和松弛法,举例子说明每种方法的试用范围和优缺点并进行比较。
二、数学原理:设有方程组b Ax = …① 将其转化为等价的,便于迭代的形式f Bx x += …② (这种转化总能实现,如令b f A I B =-=,), 并由此构造迭代公式f Bx x k k +=+)()1( …③ 式中B 称为迭代矩阵,f 称为迭代向量。
对任意的初始向量)0(x ,由式③可求得向量序列∞0)(}{k x ,若*)(lim x xk k =∞→,则*x 就是方程①或方程②的解。
此时迭代公式②是收敛的,否则称为发散的。
构造的迭代公式③是否收敛,取决于迭代矩阵B 的性1.雅可比迭代法基本原理设有方程组),,3,2,1(1n i b x aj j nj ij==∑= …①矩阵形式为b Ax =,设系数矩阵A 为非奇异矩阵,且),,3,2,1(,0n i a ii =≠ 从式①中第i 个方程中解出x ,得其等价形式)(111j nj j ij ii i x a b a x ∑≠=-= …②取初始向量),,,()0()0(2)0(1)0(n x x x x=,对式②应用迭代法,可建立相应的迭代公式:)(111)()1(∑≠=++-=nj j i k j ij ii k ib x a a x…③ 也可记为矩阵形式: J x J k F B xk +==)()1( …④若将系数矩阵A 分解为A=D-L-U ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=--=--00000000000000111211212211212222111211n n n nn n nn nn n n n n a a a a a a a a a a a a a a a a a a U L D A式中⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=nn a a a D2211,⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=-0000121323121nn n n a a a a a a L ,⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=-0000122311312n n n n a a a a a a U 。
数值分析实验报告--实验6--解线性方程组的迭代法
1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。
实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。
1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。
Matlab 脚本文件为Experiment6_1.m 。
迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。
数值计算方法实验报告
一、实验目的1. 熟悉数值计算的基本概念和方法;2. 掌握数值计算的基本原理和算法;3. 提高编程能力和数值计算能力;4. 通过实验,加深对数值计算方法的理解和应用。
二、实验内容1. 矩阵运算2. 线性方程组求解3. 函数求值4. 微分方程求解三、实验步骤1. 矩阵运算(1)编写程序实现矩阵的加法、减法、乘法运算;(2)编写程序实现矩阵的转置运算;(3)编写程序实现矩阵的逆运算。
2. 线性方程组求解(1)编写程序实现高斯消元法求解线性方程组;(2)编写程序实现雅可比迭代法求解线性方程组;(3)编写程序实现高斯-赛德尔迭代法求解线性方程组。
3. 函数求值(1)编写程序实现牛顿迭代法求函数的零点;(2)编写程序实现二分法求函数的零点;(3)编写程序实现割线法求函数的零点。
4. 微分方程求解(1)编写程序实现欧拉法求解一阶微分方程;(2)编写程序实现龙格-库塔法求解一阶微分方程;(3)编写程序实现龙格-库塔-法求解二阶微分方程。
四、实验结果与分析1. 矩阵运算(1)矩阵加法、减法、乘法运算结果正确;(2)矩阵转置运算结果正确;(3)矩阵逆运算结果正确。
2. 线性方程组求解(1)高斯消元法求解线性方程组,结果正确;(2)雅可比迭代法求解线性方程组,结果正确;(3)高斯-赛德尔迭代法求解线性方程组,结果正确。
3. 函数求值(1)牛顿迭代法求函数的零点,结果正确;(2)二分法求函数的零点,结果正确;(3)割线法求函数的零点,结果正确。
4. 微分方程求解(1)欧拉法求解一阶微分方程,结果正确;(2)龙格-库塔法求解一阶微分方程,结果正确;(3)龙格-库塔-法求解二阶微分方程,结果正确。
五、实验总结本次实验通过对数值计算方法的学习和实践,使我对数值计算有了更深入的了解。
以下是我对本次实验的总结:1. 矩阵运算是数值计算的基础,熟练掌握矩阵运算对于解决实际问题具有重要意义;2. 线性方程组求解是数值计算中常见的问题,高斯消元法、雅可比迭代法和高斯-赛德尔迭代法是常用的求解方法;3. 函数求值是数值计算中另一个常见问题,牛顿迭代法、二分法和割线法是常用的求解方法;4. 微分方程求解是数值计算中的难点,欧拉法、龙格-库塔法和龙格-库塔-法是常用的求解方法。
数值计算方法实验报告
数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
线性方程组的数值解法与非线性方程求解
淮海工学院实验报告书
课程名称:数学实验
实验名称:线性方程组的数值解法与非线性方程求解班级数学091
姓名:耿萍学号:090911107
日期:2012.4.27 地点数学实验室
指导教师:曹卫平成绩:
数理科学系
-259.49
x3 =
13467.74
7580.65
5564.52
3951.61
1870.97
从x1可以看出,第5年龄段:x5=140.5>100=h5 ,说明收获量h5可以达到100。
从x2可以看出,x5为-259.49,但种群数量不可能为负数,在本题所给条件下,无法使h1~h5均为500。
从x3可以看出,x5=1870>500=h5,说明收获量h5可达到500,从而h1~h5均可达到500。
(3)
1)由题目已知条件,假设第i月月初待还贷款为,贷款月利率为r,则可列出:
=150000 =*(1+r)-1000 …=1000/r+(-1000/r)
2) 记第一家银行月利率为s,第二家银行年利率为t,则:
=4500/s+(-4500/r)。
《计算方法》实验报告
《计算方法》实验报告一、实验目的本次《计算方法》实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见的计算方法在解决数学问题中的应用。
通过实验,提高我们运用数学知识和计算机技术解决实际问题的能力,培养我们的逻辑思维和创新能力。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
实验运行的操作系统为 Windows 10。
三、实验内容与步骤1、线性方程组的求解实验内容:使用高斯消元法和LU分解法求解线性方程组。
实验步骤:首先,定义线性方程组的系数矩阵和常数向量。
对于高斯消元法,通过逐步消元将系数矩阵化为上三角矩阵,然后回代求解。
对于 LU 分解法,将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过向前和向后代换求解。
2、插值与拟合实验内容:使用拉格朗日插值法、牛顿插值法进行插值计算,并使用最小二乘法进行曲线拟合。
实验步骤:对于拉格朗日插值法和牛顿插值法,根据给定的节点数据计算插值多项式。
对于最小二乘法,根据给定的数据点和拟合函数形式,计算拟合参数。
3、数值积分实验内容:使用矩形法、梯形法和辛普森法计算定积分。
实验步骤:定义被积函数和积分区间。
对于矩形法,将积分区间等分为若干小区间,每个小区间用矩形面积近似积分值。
梯形法通过构建梯形来近似积分值。
辛普森法利用抛物线来近似积分值。
4、常微分方程的数值解法实验内容:使用欧拉法和改进的欧拉法求解常微分方程。
实验步骤:给定常微分方程和初始条件。
按照欧拉法和改进的欧拉法的公式进行迭代计算,得到数值解。
四、实验结果与分析1、线性方程组的求解高斯消元法和 LU 分解法都能成功求解线性方程组,但在计算效率和数值稳定性上可能存在差异。
对于规模较大的线性方程组,LU 分解法通常更具优势。
实验中通过对比不同方法求解相同线性方程组的结果,验证了算法的正确性。
2、插值与拟合拉格朗日插值法和牛顿插值法在给定节点处能够准确插值,但对于节点之外的区域,可能会出现较大偏差。
线性方程组AX=B的数值计算方法实验
线性方程组AX=B的数值计算方法实验学号:姓名:梁哲豪一、实验描述在自然科学和工程技术中很多问题的解决常常归结为解线性代数方程组。
例如电学中的网络问题,船体数学放样中建立三次样条函数问题,用最小二乘法求实验数据的曲线拟合问题,解非线性方程组问题,用差分法或者有限元法解常微分方程,偏微分方程边值问题等都导致求解线性方程组,而且后面几种情况常常归结为求解大型线性方程组。
线性代数方面的计算方法就是研究求解线性方程组的一些数值解法与研究计算矩阵的特征值及特征向量的数值方法。
关于线性方程组的数值解法一般有两类:直接法:若在计算过程中没有舍入误差,经过有限步算术运算,可求得方程组的精确解的方法。
迭代法:用某种极限过程去逐步逼近线性方程组精确解的方法。
迭代法具有占存储单元少,程序设计简单,原始系数矩阵在迭代过程中不变等优点,但存在收敛性及收敛速度等问题。
上三角线性方程组的求解:基本算法:高斯消元法:将原方程组化为三角形方阵的方程组:(k=1,2,…,n-1; i=k+1,k+2, …,n ;j=k+1,k+2, …,n+1)由回代过程求得原方程组的解:LU分解法:将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x。
二、实验内容1、许多科学应用包含的矩阵带有很多零。
在实际情况中很重要的三角形线性方程组有如下形式:……构造一个程序求解三角形线性方程组。
可假定不需要变换。
而且可用第k 行消去第k+1行的x。
k核心代码:#include<iostream.h>#include<math.h>#include<iomanip.h>#define N 4//矩阵阶数void ColPivot(double c[N][N+1],double[]);//函数声明void main(){int i,j;double x[N];double c[N][N+1]={1,3,5,7,1,2,-1,3,5,2,0,0,2,5,3,-2,-6,-3,1,4};cout<<"----------------------------------------"<<endl;cout<<"系数矩阵为: \n";for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<setw(10)<<c[i][j];cout<<endl;}cout<<"右侧矩阵 y 为: \n";for(i=0;i<N;i++)cout<<setw(10)<<c[i][N];cout<<endl;cout<<"----------------------------------------"<<endl;ColPivot(c,x);//调用函数,进行高斯消去法变换cout<<"变换后得到的三角矩阵: \n";for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<setw(10)<<c[i][j];cout<<endl;}cout<<"变换后的右侧矩阵 y 为: \n";for(i=0;i<N;i++)cout<<setw(10)<<c[i][N];cout<<endl;cout<<"----------------------------------------"<<endl; cout<<"方程的解为: \n";for(i=0;i<N;i++)cout<<" x["<<i<<"]= "<<x[i]<<endl;cout<<"----------------------------------------"<<endl; }void ColPivot(double c[N][N+1],double x[]){int i,j,k;double p,max;double t[N];for(i=0;i<=N-2;i++){max=0;k=i;for(j=i+1;j<N;j++)if(fabs(c[j][i])>max){k=j;max=fabs(c[j][i]);//选主元}if(k!=i)for(j=i;j<=N;j++){p=c[i][j];c[i][j]=c[k][j];//选出主元后进行交换c[k][j]=p;}for(j=i+1;j<N;j++){p=c[j][i]/c[i][i];for(k=i;k<=N;k++)c[j][k]-=p*c[i][k];//高斯消去,进行计算}}for(i=0;i<N;i++)t[i]=c[i][N];for(i=N-1;i>=0;i--)//利用回代法求最终解{for(j=N-1;j>i;j--)t[i]-=c[i][j]*x[j];x[i]=t[i]/c[i][i];}}运行结果:(以具体方程组为例)2、(PA=LU:带选主元的分解法)求解线性方程组AX=B,其中:A=B=核心代码:#include <stdio.h>#include <math.h>#define L 30double a[L][L],b[L],l[L][L],u[L][L],x[L],y[L];int main(){int n,i,j,k,r;printf("请输入矩阵元次:\n");scanf("%d",&n);printf("请输入矩阵各项:\n");for(i=1;i<=n;++i){for(j=1;j<=n;++j){scanf("%lf",&a[i][j]);}}printf("请输入方程组的常数项:\n");for(i=1;i<=n;++i){scanf("%lf",&b[i]);}for(i=1;i<=n;++i){for(j=1;j<=n;++j){l[i][j]=0;u[i][j]=0.0;}}for(k=1;k<=n;++k){for(j=k;j<=n;++j){u[k][j]=a[k][j];for(r=1;r<k;++r){u[k][j]-=l[k][r]*u[r][j];}}for(i=k+1;i<=n;++i){l[i][k]=a[i][k];for(r=1;r<k;++r){l[i][k]-=l[i][r]*u[r][k];}l[i][k]/= u[k][k];}l[k][k]=1.0;}for(i=1;i<=n;++i){y[i]= b[i];for(j=1;j<i;++j){y[i]-=l[i][j]*y[j];}}for(i=n;i>0;--i){x[i]= y[i];for(j=i+1;j<=n;++j){x[i]-=u[i][j]*x[j];}x[i]/= u[i][i];}for(i=1;i<=n;++i){printf("%0.2lf\n",x[i]);}return0;}运行结果:3、使用程序3.3求解线性方程组AX=B,其中,A= [a ij] N×N= i j-1,而且B=[b ij] N×1, b11=N,当i≥2时,b i1=(i N-1)/(i-1),对N=3,7,11的情况分别求解。
计算方法数值实验报告
计算方法数值实验报告(一)班级:0902 学生:苗卓芳 倪慧强 岳婧实验名称: 解线性方程组的列主元素高斯消去法和LU 分解法实验目的: 通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 解:(1) 用熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量。
①先求解第一个线性方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x在命令窗口中运行A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34] 可得A =3.0100 6.0300 1.99001.2700 4.1600 -1.23000.9870 -4.8100 9.3400b=[1,1,1]可得b =1 1 1H =det(A)可得 H =-0.0305列主元高斯消去法:在命令窗口中运行function x=Gauss_pivot(A,b)、A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1,1,1];n=length(b);x=zeros(n,1);c=zeros(1,n);dl=0;for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i))max=abs(A(j,i));m=j;endendif(m~=i)for k=i:nc(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);enddl=b(i);b(i)=b(m);b(m)=dl;endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endendx(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum =sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);end经程序可得实验结果ans =1.0e+003 *1.5926-0.6319-0.4936LU分解法:在命令窗口中运行function x=lu_decompose(A,b)A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1,1,1];L=eye(n);U=zeros(n,n);x=zeros(n,1);c=zeros(1,n);for i=1:nU(1,i)=A(1,i);if i==1;L(i,1)=1;elseL(i,1)=A(i,1)/U(1,1);endendfor i=2:nfor j=i:nsum=0;for k=1:i-1sum =sum+L(i,k)*U(k,j);endU(i,j)=A(i,j)-sum;Ifj~=nsum=0;for k=1:i-1sum=sum+L(j+1,k)*U(k,i);endL(j+1,i)=(A(j+1,i)-sum)/U(I,i);endendendy(1)=b(1);for k=2:nsum=0;forj=1:k-1sum=sum+L(k,j)*y (j);endy(k)=b(k)-sum;endx(n)=y(n)/U(n,n);260页最后一行c(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);enddl=b(i);b(i)=b(m);b(m)=dl;endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endendx(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum =sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);end经程序可得结果ans =1.0e+003 *1.5926-0.6319-0.4936②再求解第二个线性方程组⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 即A=[10,-7,0,1;-3,2.099999,6,2;5,-1,5,-1;2,1,0,2];b=[8,5.900001,5,1];重复上述步骤可的结果为ans =0.0000-1.00001.00001.0000(2)将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x 及detA ,并与(1)中结果比较。
大学数学实验五_线性代数方程组的数值解法
【实验目的】 1、学会用 MATLAB 软件数值求解线性代数方程组,对迭代法的收敛性和解
的稳定性作初步分析。 2、通过实例学习用线性代数方程组解决简化的实际问题。
【实验内容】
3 已知方程组 Ax=b,其中
,定义为
试通过迭代法求解此方程组,认识迭代法收敛的含义以及迭代初值和方程组系数矩阵性质对 收敛速度的影响。实验要求: (1) 选取不同的初始向量 x(0)和不同的方程组的右端项向量 b,给定迭代误差要求,用雅
k=k+1; xj=Bj*xj+fj; 多输出了矩阵 P,矩阵 P 可视为一个行向量,其每个元素均为迭代 k 次后得到的 xk。这样以 k 为横轴,解向量为纵轴,可输出图形观察 xk 是否收敛。函数 GaussSeidel 也需作同样修改,修改后的函数在此不再赘述。
模型: 已知某年该植物的数量为 x0,记第 k 年的植物数量为 xk,那么有 xk + pxk-1 + qxk-2 = 0 (k = 2, 3, …… , n)
其中 p = -a1bc,q = -a2b(1-a1)bc。若要求 n 年后数量达到 xn,则 Ax = b
其中
,
,
7
① 用稀疏系数矩阵求解。
这个函数中,n 表示矩阵 A 的阶数,在本题中恒取 20,a 表示主对角线元素的值,b 在 本题中恒取-1/4,c 在本题中恒取-1/2。
编写用雅可比迭代法求方程解的函数 Jacobi。
function [xj,k]=Jacobi(A,X0,b,e) D=diag(diag(A)); n=length(A); L=-(tril(A)-D); U=-(triu(A)-D); fj=D\b; Bj=D\(L+U); xj=X0; k=0; while norm(A*xj-b)/norm(b)>e
数学实验报告南邮
实验名称:线性方程组的求解方法实验目的:1. 理解线性方程组的概念及其解法。
2. 掌握高斯消元法和克拉默法则求解线性方程组的方法。
3. 通过实验验证不同方法的计算效率和适用范围。
实验时间:2023年X月X日实验地点:南京邮电大学计算机实验室实验器材:1. 计算机2. 数学软件(如MATLAB、Mathematica等)3. 纸张和笔实验步骤:一、实验准备1. 确定实验所需线性方程组,例如:\[\begin{cases}2x + 3y - z = 4 \\-x + 2y + 3z = -1 \\3x - 2y + 4z = 5\end{cases}\]2. 熟悉高斯消元法和克拉默法则的原理。
二、实验实施1. 高斯消元法求解(1)将线性方程组转化为增广矩阵:\[\begin{bmatrix}2 &3 & -1 & | &4 \\-1 & 2 & 3 & | & -1 \\3 & -2 &4 & | & 5\end{bmatrix}\](2)进行行变换,将增广矩阵转化为行最简形式:\[\begin{bmatrix}1 & 0 & 0 & | & 1 \\0 & 1 & 0 & | & 1 \\0 & 0 & 1 & | & 1\end{bmatrix}\](3)根据行最简形式得到方程组的解:\(x = 1, y = 1, z = 1\)。
2. 克拉默法则求解(1)计算系数矩阵的行列式:\[D = \begin{vmatrix}2 &3 & -1 \\-1 & 2 & 3 \\3 & -2 & 4\end{vmatrix}\](2)计算增广矩阵的行列式:\[D_x = \begin{vmatrix}4 & 3 & -1 \\-1 & 2 & 3 \\5 & -2 & 4\end{vmatrix}\](3)计算\(D_y\)和\(D_z\),分别对应\(x\)、\(y\)、\(z\)的系数矩阵和增广矩阵的行列式。
线性方程组的数值解法-安振华-2012011837
实验5:线性方程组的数值解法化学工程系分2 安振华2012011837【实验目的】1、掌握线性方程组的常用数值解法,包括高斯消去法、LU分解法以及校正法。
2、体验数值计算的时间复杂度和计算规模的关系。
3、加深对数值计算误差的理解。
4、学习使用迭代法等算法,求解非线性方程。
5、学习如何使用MATLAB解非线性方程组和方程组。
【实验容】【实验五:习题9】种群的繁殖与稳定收获:种群的数量因繁殖而增加,因自然死亡而减少,对于人工饲养的种群(比如家畜)而言,为了保证稳定的收获,各个年龄的种群数量应保持不变,种群因雌性个体的繁殖而改变,为方便起见以下种群数量均指其中的雌性。
种群年龄记作k=1,2,…,n,当年年龄k的种群数量记作x k,繁殖率记作b k(每个雌性个体在1年繁殖的数量),自然存活率记作s k(s k=1-d k,d k为1年的死亡率),收获量记作h k,则来年年龄k的种群数量k x应为:111,(1,2,,1)n k k k k k k k x b x x s x h k n +===-=⋅⋅⋅-∑要求各个年龄的种群数量每年维持不变就是要使(1,2,,)k k x x k n ==⋅⋅⋅(1) 若b k ,s k 已知,给定收获量h k ,建立求各年龄的稳定种群数量x k 的模型(用矩阵向量表示)(2) 设n=5,b 1=b 2=b 5=0,b 3=5,b 4=3,s 1=s 4=0.4,s 2=s 3=0.6,如果要求h 1~h 5为500,400,200,100,100,求x 1~x 5 (3) 要使h 1~h 5均为500,如何达到? 【分析】为方便起见以下种群数量均指其中的雌性。
我们并且有以下的假设:(1)雌性个体的繁殖率和存活率在特定的时间是不变的。
(2)人工饲养的种群在质量和数量上是不受外界环境和资源的限制的。
(3)模型中不考虑人为的或是自然的灾害所造成的种群数量、繁殖率和存活率的变动。
工程数值分析实验报告(3篇)
第1篇一、实验目的本次实验旨在通过数值分析的方法,对工程实际问题进行建模、求解和分析。
通过学习数值方法的基本原理和算法,提高解决实际工程问题的能力。
二、实验内容1. 线性方程组的求解2. 矩阵特征值与特征向量的计算3. 函数插值与曲线拟合4. 数值微分与积分三、实验步骤1. 线性方程组的求解(1)编写程序实现高斯消元法、克劳斯消元法和列主元素法(2)设计输入界面,用户输入增广矩阵的行和列,填写系数及常数项(3)分别运用三种方法求解线性方程组,比较求解结果的正确性、数值稳定性和计算效率2. 矩阵特征值与特征向量的计算(1)编写程序实现幂法、QR算法和逆幂法(2)设计输入界面,用户输入矩阵的行和列,填写矩阵元素(3)分别运用三种方法计算矩阵的特征值与特征向量,比较求解结果的准确性和计算效率3. 函数插值与曲线拟合(1)编写程序实现拉格朗日插值、牛顿插值和样条插值(2)设计输入界面,用户输入函数的自变量和函数值,选择插值方法(3)分别运用三种方法进行函数插值,比较插值结果的准确性和光滑性4. 数值微分与积分(1)编写程序实现有限差分法、龙格-库塔法和辛普森法(2)设计输入界面,用户输入函数的导数或积分的上下限,选择数值方法(3)分别运用三种方法进行数值微分和积分,比较求解结果的准确性和计算效率四、实验结果与分析1. 线性方程组的求解通过实验,我们发现列主元素法在求解线性方程组时具有较好的数值稳定性,计算效率也较高。
而高斯消元法和克劳斯消元法在处理大型稀疏矩阵时存在一定的困难。
2. 矩阵特征值与特征向量的计算实验结果表明,QR算法和逆幂法在计算矩阵特征值与特征向量时具有较高的准确性和计算效率。
幂法在处理大型稀疏矩阵时表现出较好的性能。
3. 函数插值与曲线拟合在函数插值和曲线拟合实验中,样条插值方法具有较好的准确性和光滑性。
拉格朗日插值和牛顿插值方法在处理简单函数时表现良好,但在处理复杂函数时可能存在精度问题。
数值分析实验报告
实验五 解线性方程组的直接方法实验5.1 (主元的选取与算法的稳定性) 问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。
实验内容:考虑线性方程组n n n R b R A b Ax ∈∈=⨯,,编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。
实验要求:(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。
取n=10计算矩阵的条件数。
让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。
每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。
若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。
重复上述实验,观察记录并分析实验结果。
思考题一:(Vadermonde 矩阵)设⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=∑∑∑∑====n i i n n i i ni i n i i n n n n n n nx x x x b x x x x x x x x x x x x A 002010022222121102001111 ,, 其中,n k k x k ,,1,0,1.01 =+=,(1)对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化?(2)对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b(3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆大学
学生实验报告实验课程名称计算方法
开课实验室DS1421
学院年级专业
学生姓名学号
开课时间至学年第学期
1.实验目的
(1)高斯列主元消去法求解线性方程组的过程
(2)熟悉用迭代法求解线性方程组的过程
(3)设计出相应的算法,编制相应的函数子程序
2.实验内容
分别用高斯列主元消去法 ,Jacobi 迭代法,Gauss--Saidel 迭代法,超松弛迭代法求解线性方程组
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡------725101391444321131243301024321x x x x 3.实验过程
解:(1)高斯列主元消去法
编制高斯列主元消去法的M 文件程序如下:
%高斯列主元消元法求解线性方程组Ax=b
%A 为输入矩阵系数,b 为方程组右端系数
%方程组的解保存在x 变量中
format long;%设置为长格式显示,显示15位小数
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]
b=[10,5,-2,7]'
[m,n]=size(A);
%先检查系数正确性
if m~=n
error('矩阵A 的行数和列数必须相同');
return;
end
if m~=size(b)
error('b 的大小必须和A 的行数或A 的列数相同');
return;
end
%再检查方程是否存在唯一解
if rank(A)~=rank([A,b])
error('A 矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');
return;
end
c=n+1;
A(:,c)=b; %(增广)
for k=1:n-1
[r,m]=max(abs(A(k:n,k))); %选主元
m=m+k-1; %修正操作行的值
if(A(m,k)~=0)
if(m~=k)
A([k m],:)=A([m k],:); %换行
end
A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去 end
end
x=zeros(length(b),1); %回代求解
x(n)=A(n,c)/A(n,n);
for k=n-1:-1:1
x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);
end
disp('X=');
disp(x);
format short;%设置为默认格式显示,显示5位
运行,结果如下所示:
(2)Jacobi迭代法
编制迭代计算的M文件程序如下:
%Jacobi迭代法求解
% A为方程组的增广矩阵
clc;
A=[2,10,0,-3,10;-3,-4,-12,13,5;1,2,3,-4,-2;4,14,9,-13,7] MAXTIME=50;%最多进行50次迭代
eps=1e-5;%迭代误差
[n,m]=size(A);
x=zeros(n,1);%迭代初值
y=zeros(n,1);
k=0;
%进入迭代计算
disp('迭代过程X的值情况如下:')
disp('X=');
while 1
disp(x');
for i=1:1:n
s=0.0;
for j=1:1:n
if j~=i
s=s+A(i,j)*x(j);
end
y(i)=(A(i,n+1)-s)/A(i,i);
end
end
for i=1:1:n
maxeps=max(0,abs(x(i)-y(i))); %检查是否满足迭代精度要求 end
if maxeps<=eps%小于迭代精度退出迭代
for i=1:1:n
x(i)=y(i);%将结果赋给x
end
return;
end
for i=1:1:n%若不满足迭代精度要求继续进行迭代
x(i)=y(i);
y(i)=0.0;
end
k=k+1;
if k>MAXTIME%超过最大迭代次数退出
error('超过最大迭代次数,退出');
return;
end
end
运行该程序结果如下:
(3)Gauss--Saidel迭代法
编制求解程序Gauss_Seidel.m如下:
%Gauss_Seidel.m
% A为方程组的增广矩阵
clc;
format long;
A=[2,10,0,-3,10;-3,-4,-12,13,5;1,2,3,-4,-2;4,14,9,-13,7]
[n,m]=size(A);
%最多进行50次迭代
Maxtime=50;
%控制误差
Eps=10E-5;
%初始迭代值
x=zeros(1,n);
disp('x=');
%迭代次数小于最大迭代次数,进入迭代
for k=1:Maxtime
disp(x);
for i=1:n
s=0.0;
for j=1:n
if i~=j
s=s+A(i,j)*x(j);%计算和
end
end
x(i)=(A(i,n+1)-s)/A(i,i);%求出此时迭代的值
end
%因为方程的精确解为整数,所以这里将迭代结果向整数靠近的误差作为判断迭代是否停止的条件
if sum((x-floor(x)).^2)<Eps
break;
end;
end;
X=x;
disp('迭代结果:');
X
format short;
运行结果如下所示:
(4)超松弛迭代法
编写函数M文件如下:%SOR法求解
%w=1.45
%方程组系数矩阵
clc;
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]
%方程组右端系数
b=[10,5,-2,7]'
w=1.45;
%最大迭代次数
Maxtime=100;
%精度要求
Eps=1E-5;
%以15位小数显示
format long;
n=length(A);
k=0;
%初始迭代值
x=ones(n,1);
y=x;
disp('迭代过程:');
disp('x=');
while 1
y=x;
disp(x');
%计算过程
for i=1:n
s=b(i);
for j=1:n
if j~=i
s=s-A(i,j)*x(j);
end
end
if abs(A(i,i))<1E-10 | k>=Maxtime
error('已达最大迭代次数或矩阵系数近似为0,无法进行迭代'); return;
end
s=s/A(i,i);
x(i)=(1-w)*x(i)+w*s;
end
if norm(y-x,inf)<Eps%达到精度要求退出计算
break;
end
k=k+1;
end
disp('最后迭代结果:');
%最后的结果
X=x'
%设为默认显示格式
format short; 结果如下:
4.实验环境及实验文件存档名
实验环境:Matlab7.0
文件存档名:Gauss.m,Jacobi.m,Gauss_Seidel.m,SOR.m
5.实验结果及分析
=1.0000
=2.0000
=3.0000
=4.0000
经过验证,高斯列主元消结果正确。
对2,3,4方法不收敛。
错误分析
迭代法收敛的充要条件ρ(Bj)<1
ρ(Bj)= max(abs(eig(Bj)))=3.9412>1
因此迭代法不收敛。
6.总结与体会
1.通过该实验弄懂了高斯列主元消去法求解线性方程组的过程,练习并掌握了高斯列主元消去法求解线性方程组的方法。
2. 熟悉了用迭代法求解线性方程组的过程,学会了Jacobi迭代法,Gauss--Saidel迭代法,超松弛迭代法求解线性方程组的方法。
教师签名
年月日。