特征值问题数值计算上机实验
线代上机实验报告(3篇)
![线代上机实验报告(3篇)](https://img.taocdn.com/s3/m/0aa54ea29fc3d5bbfd0a79563c1ec5da51e2d654.png)
第1篇一、实验目的1. 掌握线性代数基本概念和基本运算方法。
2. 熟悉MATLAB软件在解决线性代数问题中的应用。
3. 提高实际操作能力和编程能力。
二、实验环境1. 操作系统:Windows 102. 软件环境:MATLAB R2019b3. 实验设备:计算机三、实验内容1. 矩阵的基本运算2. 矩阵的秩3. 矩阵的逆4. 线性方程组的求解5. 特征值和特征向量6. 二次型及其标准形四、实验步骤1. 矩阵的基本运算(1)创建矩阵A:A = [1, 2, 3; 4, 5, 6; 7, 8, 9](2)计算矩阵A的转置:A_transpose = A'(3)计算矩阵A的行列式:det_A = det(A)(4)计算矩阵A的逆:A_inverse = inv(A)2. 矩阵的秩(1)创建矩阵B:B = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12](2)计算矩阵B的秩:rank_B = rank(B)3. 矩阵的逆(1)创建矩阵C:C = [1, 2; 3, 4](2)判断矩阵C是否可逆:is_inverse = rank(C) == size(C, 1)(3)如果可逆,计算矩阵C的逆:C_inverse = inv(C)4. 线性方程组的求解(1)创建矩阵A和B:A = [1, 2; 3, 4]B = [5; 6](2)使用MATLAB内置函数求解线性方程组:x = A \ B5. 特征值和特征向量(1)创建矩阵D:D = [4, 1; 2, 3](2)计算矩阵D的特征值和特征向量:[V, D] = eig(D)6. 二次型及其标准形(1)创建矩阵E:E = [2, 1; 1, 3](2)计算矩阵E的特征值和特征向量:[V, D] = eig(E)(3)将二次型E化为标准形:Q = V D inv(V)五、实验结果与分析1. 矩阵的基本运算(1)矩阵A:1 2 34 5 67 8 9(2)矩阵A的转置:1 4 72 5 83 6 9(3)矩阵A的行列式:(4)矩阵A的逆:-1.5 0.50.5 -0.52. 矩阵的秩矩阵B的秩为2。
数值代数上机实验报告
![数值代数上机实验报告](https://img.taocdn.com/s3/m/854ecd5a03768e9951e79b89680203d8ce2f6a3d.png)
数值代数上机实验报告试验项目名称:平方根法与改进平方根法实验内容:先用你熟悉的计算机语言将平方根法和改进平方根法编写成通用的子程序,然后用你编写的程序求解对称正定方程组Ax=b,其中,A=[101 10 1…1 10 11 10]100*100b随机生成,比较计算结果,评论方法优劣。
实验要求:平方根法与改进的平方根的解法步骤;存储单元,变量名称说明;系数矩阵与右端项的生成;结果分析。
实验报告姓名:罗胜利班级:信息与计算科学0802 学号:u200810087 实验一、平方根法与改进平方根法先用你所熟悉的计算机语言将平方根法和改进的平方根法编成通用的子程序,然后用你编写的程序求解对称正定方程组AX=b,其中系数矩阵为40阶Hilbert矩阵,即系数矩阵A的第i行第j列元素为=,向量b的第i个分量为=.平方根法函数程序如下:function [x,b]=pingfanggenfa(A,b)n=size(A);n=n(1);x=A^-1*b; %矩阵求解disp('Matlab自带解即为x');for k=1:nA(k,k)=sqrt(A(k,k));A(k+1:n,k)=A(k+1:n,k)/A(k,k);for j=k+1:n;A(j:n,j)=A(j:n,j)-A(j:n,k)*A(j,k);endend %Cholesky分解for j=1:n-1b(j)=b(j)/A(j,j);b(j+1:n)=b(j+1:n)-b(j)*A(j+1:n,j);endb(n)=b(n)/A(n,n); %前代法A=A';for j=n:-1:2b(j)=b(j)/A(j,j);b(1:j-1)=b(1:j-1)-b(j)*A(1:j-1,j);endb(1)=b(1)/A(1,1); %回代法disp('平方根法的解即为b');endfunction [x]=ave(A,b,n) %用改进平方根法求解Ax=b L=zeros(n,n); %L为n*n矩阵D=diag(n,0); %D为n*n的主对角矩阵S=L*D;for i=1:n %L的主对角元素均为1L(i,i)=1;for i=1:nfor j=1:n %验证A是否为对称正定矩阵if (eig(A)<=0)|(A(i,j)~=A(j,i)) %A的特征值小于0或A非对称时,输出wrong disp('wrong');break;endendendD(1,1)=A(1,1); %将A分解使得A=LDL Tfor i=2:nfor j=1:i-1S(i,j)=A(i,j)-sum(S(i,1:j-1)*L(j,1:j-1)');L(i,1:i-1)=S(i,1:i-1)/D(1:i-1,1:i-1);endD(i,i)=A(i,i)-sum(S(i,1:i-1)*L(i,1:i-1)');endy=zeros(n,1); % x,y为n*1阶矩阵x=zeros(n,1);for i=1:ny(i)=(b(i)-sum(L(i,1:i-1)*D(1:i-1,1:i-1)*y(1:i-1)))/D(i,i); %通过LDy=b解得y的值endfor i=n:-1:1x(i)=y(i)-sum(L(i+1:n,i)'*x(i+1:n)); %通过L T x=y解得x的值改进平方根法函数程序如下:function b=gaijinpinfanggenfa(A,b)n=size(A);n=n(1);v=zeros(n,1);for j=1:nfor i=1:j-1v(i)=A(j,i)*A(i,i);endA(j,j)=A(j,j)-A(j,1:j-1)*v(1:j-1);A(j+1:n,j)=(A(j+1:n,j)-A(j+1:n,1:j-1)*v(1:j-1))/A(j,j);end %LDL'分解B=diag(A);D=zeros(n);for i=1:nD(i,i)=B(i);A(i,i)=1;EndA=tril(A); %得到L和Dfor j=1:n-1b(j)=b(j)/A(j,j);b(j+1:n)=b(j+1:n)-b(j)*A(j+1:n,j);endb(n)=b(n)/A(n,n); %前代法A=D*(A');for j=n:-1:2b(j)=b(j)/A(j,j);b(1:j-1)=b(1:j-1)-b(j)*A(1:j-1,j);endb(1)=b(1)/A(1,1); %回代法disp('改进平方根法解得的解即为b');end调用函数解题:clear;clc;n=input('请输入矩阵维数:');b=zeros(n,1);A=zeros(n);for i=1:nfor j=1:nA(i,j)=1/(i+j-1);b(i)=b(i)+1/(i+j-1);endend %生成hilbert矩阵[x,b]=pingfanggenfa(A,b) b=gaijinpinfanggenfa(A,b)运行结果:请输入矩阵维数:40Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 6.570692e-020. > In pingfanggenfa at 4In qiujie at 10Matlab自带解即为x平方根法的解即为bx =1.60358.96850.85621.01950.9375-50.2500-3.0000-16.000024.0000-49.5000-30.000039.000022.0000-64.0000-12.00002.000010.2500-10.5000-1.0000-10.875083.000046.0000-98.0000-69.000068.000021.0000-50.7188-8.7500-8.0000 112.0000 6.0000 -68.7500 22.000044.0000 -28.0000 8.0000 -44.000012.0000b =1.0e+007 *0.0000-0.00000.0001-0.0004-0.00140.0424-0.29801.1419-2.73354.2539-4.30182.7733-1.19890.5406-0.36880.32850.4621-0.25130.05650.0000-0.00510.0071-0.0027-0.0031-0.00190.00090.0002-0.0002-0.00060.00040.0001-0.00020.00010.0000-0.00000.0000-0.0000-0.0000改进平方根法解得的解即为bb =1.0e+024 *0.0000-0.00000.0001-0.0012-0.0954 0.4208 -1.2101 2.0624 -1.0394 -3.3343 6.2567 -0.2463 -7.45942.80303.6990 0.7277 -1.7484 -0.4854 -3.6010 0.2532 5.1862 1.4410 0.8738 -4.5654 1.0422 4.0920 -2.7764 -2.2148 -0.8953 0.3665 4.8967 1.0416 0.1281-1.1902-2.83348.4610-3.6008实验二、利用QR分解解线性方程组:利用QR分解解线性方程组Ax=b,其中A=[16 4 8 4;4 10 8 4;8 8 12 10;4 4 10 12];b=[32 26 38 30];求解程序如下:定义house函数:function [v,B]=house(x)n=length(x);y=norm(x,inf);x=x/y;Q=x(2:n)'*x(2:n);v(1)=1;v(2:n)=x(2:n);if n==1B=0;elsea=sqrt(x(1)^2+Q);if x(1)<=0v(1)=x(1)-a;elsev(1)=-Q/(x(1)+a);endB=2*v(1)^2/(Q+v(1)^2);endend进行QR分解:clear;clc;A=[16 4 8 4;4 10 8 4;8 8 12 10;4 4 10 12]; b=[32 26 38 30];b=b';x=size(A);m=x(1);n=x(2);d=zeros(n,1);for j=1:n[v,B]=house(A(j:m,j));A(j:m,j:n)=(eye(m-j+1)-B*(v')*v)*A(j:m,j:n); d(j)=B;if j<m< p="">A(j+1:m,j)=v(2:m-j+1);endend %QR分解R=triu(A); %得到R D=A;I=eye(m,n);Q=I;for i=1:nD(i,i)=1;endH=tril(D);M=H';for i=1:nN=I-d(i)*H(1:m,i)*M(i,1:m);Q=Q*N;end %得到Qb=(Q')*b; %Q是正交阵for j=n:-1:2b(j)=b(j)/R(j,j);b(1:j-1)=b(1:j-1)-b(j)*R(1:j-1,j);endb(1)=b(1)/R(1,1); %回带法运行结果如下:R =18.7617 9.8072 15.7769 11.08640 9.9909 9.3358 7.53410 0 5.9945 9.80130 0 0 -0.5126Q =0.8528 -0.4368 -0.2297 -0.17090.2132 0.7916 -0.4594 -0.34170.4264 0.3822 0.2844 0.76890.2132 0.1911 0.8095 -0.5126b=1.000000000000001.000000000000010.9999999999999881.00000000000001实验三、Newton下山法解非线性方程组:3x-cos(yz)-=0,-81+sinz+1.06=0,exp(-xy)+20z+=0;要求满足数值解=满足或.定义所求方程组的函数:Newtonfun.mfunction F = Newtonfun(X)F(1,1)=3*X(1)-cos(X(2)*X(3))-1/2;F(2,1)=X(1)^2-81*(X(2)+0.1)^2+sin(X(3))+1.06;F(3,1)=exp(-X(1)*X(2))+20*X(3)+(10*pi-3)/3;End向量求导:Xiangliangqiudao.mfunction J=xiangliangqiudao()syms x y zX=[x,y,z];F=[3*X(1)-cos(X(2)*X(3))-1/2;X(1)^2-81*(X(2)+0.1)^2+sin(X(3))+1.06;exp(-X(1)*X(2))+20*X(3)+(10*pi-3)/3];J=jacobian(F,[x y z]);End代值函数:Jacobi.mfunction F=Jacobi(x)F=[ 3,x(3)*sin(x(2)*x(3)), x(2)*sin(x(2)*x(3));2*x(1), -162*x(2)-81/5,cos(x(3));-x(2)/exp(x(1)*x(2)),-x(1)/exp(x(1)*x(2)),20];End方程组求解:format long; %数据表示为双精度型X1=[0,0,0]';eps=10^(-8);k=1;i=1;X2=X1-Jacobi(X1)^(-1)*Newtonfun(X1);while (norm(subs(X2-X1,pi,3.1415926),2)>=eps)&&(norm(Newtonfun(X1),2)>=eps) if norm(Newtonfun(X2),2)<="" p="">X1=X2;B=inv(Jacobi(X2));C=Newtonfun(X2);X2=X2-B*C;i=i+1;elsev=1/(2^k); %引入下山因子X1=X2;B=inv(Jacobi(X2));C=Newtonfun(X2);X2=X2-v*B*C;k=k+1;endendj=i+k-1 %迭代次数X=X2 %输出结果运行结果如下:j =5X =0.500000000000000 -0.000000000000000 -0.523598775598299</m<>。
数值分析2024上机实验报告
![数值分析2024上机实验报告](https://img.taocdn.com/s3/m/94370e8509a1284ac850ad02de80d4d8d05a0172.png)
数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。
在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。
本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。
一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。
1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。
常见的数值方法有二分法、牛顿法、割线法等。
在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。
2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。
插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。
在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
3.数值积分这部分实验要求使用数值方法计算给定函数的积分。
常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。
在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。
4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。
常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。
在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。
结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。
2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。
结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。
数值计算方法上机实验报告
![数值计算方法上机实验报告](https://img.taocdn.com/s3/m/5b9d876db5daa58da0116c175f0e7cd185251850.png)
数值计算方法上机实验报告
一、实验目的
本次实验的主要目的是熟悉和掌握数值计算方法,学习梯度下降法的
原理和实际应用,熟悉Python语言的编程基础知识,掌握Python语言的
基本语法。
二、设计思路
本次实验主要使用的python语言,利用python下的numpy,matplotlib这两个工具,来实现数值计算和可视化的任务。
1. 首先了解numpy的基本使用方法,学习numpy的矩阵操作,以及numpy提供的常见算法,如矩阵分解、特征值分解等。
2. 在了解numpy的基本操作后,可以学习matplotlib库中的可视化
技术,掌握如何将生成的数据以图表的形式展示出来。
3. 接下来就是要学习梯度下降法,首先了解梯度下降法的主要原理,以及具体的实际应用,用python实现梯度下降法给出的算法框架,最终
可以达到所期望的优化结果。
三、实验步骤
1. 熟悉Python语言的基本语法。
首先是熟悉Python语言的基本语法,学习如何使用Python实现变量
定义,控制语句,函数定义,类使用,以及面向对象编程的基本概念。
2. 学习numpy库的使用方法。
其次是学习numpy库的使用方法,学习如何使用numpy库构建矩阵,学习numpy库的向量,矩阵操作,以及numpy库提供的常见算法,如矩阵分解,特征值分解等。
3. 学习matplotlib库的使用方法。
《数值分析》课程教案
![《数值分析》课程教案](https://img.taocdn.com/s3/m/2b9f4973a22d7375a417866fb84ae45c3a35c255.png)
《数值分析》课程教案数值分析课程教案一、课程介绍本课程旨在介绍数值分析的基本概念、方法和技巧,以及其在科学计算和工程应用中的实际应用。
通过本课程的研究,学生将了解和掌握数值分析的基本原理和技术,以及解决实际问题的实用方法。
二、教学目标- 了解数值分析的基本概念和发展历程- 掌握数值计算的基本方法和技巧- 理解数值算法的稳定性和收敛性- 能够利用数值分析方法解决实际问题三、教学内容1. 数值计算的基本概念和方法- 数值计算的历史和发展- 数值计算的误差与精度- 数值计算的舍入误差与截断误差- 数值计算的有效数字和有效位数2. 插值与逼近- 插值多项式和插值方法- 最小二乘逼近和曲线拟合3. 数值微积分- 数值积分的基本原理和方法- 数值求解常微分方程的方法4. 线性方程组的数值解法- 直接解法和迭代解法- 线性方程组的稳定性和收敛性5. 非线性方程的数值解法- 迭代法和牛顿法- 非线性方程的稳定性和收敛性6. 数值特征值问题- 特征值和特征向量的基本概念- 幂迭代法和QR方法7. 数值积分与数值微分- 数值积分的基本原理和方法- 数值微分的基本原理和方法四、教学方法1. 理论讲授:通过课堂授课,讲解数值分析的基本概念、原理和方法。
2. 上机实践:通过实际的数值计算和编程实践,巩固和应用所学的数值分析知识。
3. 课堂讨论:组织学生进行课堂讨论,加深对数值分析问题的理解和思考能力。
五、考核方式1. 平时表现:包括课堂参与和作业完成情况。
2. 期中考试:对学生对于数值分析概念、原理和方法的理解程度进行考查。
3. 期末项目:要求学生通过上机实验和编程实践,解决一个实际问题,并进行分析和报告。
六、参考教材1. 《数值分析》(第三版),贾岩. 高等教育出版社,2020年。
2. 《数值计算方法》,李刚. 清华大学出版社,2018年。
以上是《数值分析》课程教案的概要内容。
通过本课程的研究,学生将能够掌握数值分析的基本原理和技术,并应用于实际问题的解决中。
数值分析上机实验报告
![数值分析上机实验报告](https://img.taocdn.com/s3/m/b884733a178884868762caaedd3383c4bb4cb4b0.png)
数值分析上机实验报告摘要:本报告是对数值分析课程上机实验的总结和分析,涵盖了多种算法和数据处理方法,通过对实验结果的分析,探究了数值计算的一般过程和计算的稳定性。
1. 引言数值计算是数学的一个重要分支,广泛应用于物理、金融、工程等领域。
本次实验是对数值分析课程知识的实际应用,通过上机实现算法,探究数值计算的可靠性和误差分析。
2. 实验方法本次实验中,我们实现了多种算法,包括:(1)牛顿迭代法求方程的根;(2)高斯消元法求线性方程组的解;(3)最小二乘法拟合数据点;(4)拉格朗日插值法估计函数值;(5)梯形公式和辛普森公式求积分近似值。
对于每个算法,我们都进行了多组数值和不同参数的实验,并记录了相关数据和误差。
在实验过程中,我们着重考虑了算法的可靠性和计算的稳定性。
3. 实验结果与分析在实验中,我们得到了大量的实验数据和误差分析,通过对数据的展示和分析,我们得到了以下结论:(1)牛顿迭代法求解非线性方程的根能够对算法的初始值和迭代次数进行适当的调整,从而达到更高的稳定性和可靠性。
(2)高斯消元法求解线性方程组的解需要注意到矩阵的奇异性和精度的影响,从而保证计算的准确性。
(3)最小二乘法拟合数据点需要考虑到拟合的函数形式和数据的误差范围,采取适当的数据预处理和拟合函数的选择能够提高计算的准确性。
(4)拉格朗日插值法估计函数值需要考虑到插值点的选择和插值函数的阶数,防止出现龙格现象和插值误差过大的情况。
(5)梯形公式和辛普森公式求积分近似值需要考虑到采样密度和拟合函数的选择,从而保证计算的稳定性和收敛速度。
4. 结论通过本次实验的分析和总结,我们得到了深入的认识和理解数值计算的一般过程和算法的稳定性和可靠性,对于以后的数值计算应用也提供了一定的指导和参考。
《数值计算方法》上机实验报告
![《数值计算方法》上机实验报告](https://img.taocdn.com/s3/m/705b7b643186bceb18e8bb54.png)
《数值计算方法》上机实验报告华北电力大学实验名称数值il•算方法》上机实验课程名称数值计算方法专业班级:电力实08学生姓名:李超然学号:200801001008 成绩: 指导教师:郝育黔老师实验日期:2010年04月华北电力大学实验报告数值计算方法上机实验报吿一.各算法的算法原理及计算机程序框图1、牛顿法求解非线性方程*对于非线性方程,若已知根的一个近似值,将在处展开成一阶xxfx ()0, fx ()xkk泰勒公式"f 0 / 2 八八,fxfxfxxxxx 0 0 0 0 0 kkkk2!忽略高次项,有,fxfxfxxx 0 ()()(),,, kkk右端是直线方程,用这个直线方程来近似非线性方程。
将非线性方程的**根代入,即fx ()0, X ,* fxfxxx 0 0 0 0, ,, kkkfx 0 fx 0 0,解出fX 0 *k XX,, k' fx 0 k水将右端取为,则是比更接近于的近似值,即xxxxk, Ik, Ikfx ()k 八XX, Ikk* fx()k这就是牛顿迭代公式。
,2,计算机程序框图:,见,,3,输入变量、输出变量说明:X输入变量:迭代初值,迭代精度,迭代最大次数,\0输出变量:当前迭代次数,当前迭代值xkl,4,具体算例及求解结果:2/16华北电力大学实验报吿开始读入l>k/fx()0?,0fx 0 Oxx,,01* fx ()0XX,,,?10kk, ,1,kN, ?xx, 10输出迭代输出X输出奇异标志1失败标志,3,输入变量、输出变量说明: 结束例:导出计算的牛顿迭代公式,并il •算。
(课本P39例2-16) 115cc (0), 求解结果:10. 75000010.72383710. 72380510. 7238052、列主元素消去法求解线性方程组,1,算法原理:高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘 -个 方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上 对上三角3/16华北电力大学实验报告方程组求解。
现代数值计算上机实验报告资料
![现代数值计算上机实验报告资料](https://img.taocdn.com/s3/m/9c9ae8e2763231126fdb113a.png)
太原科技大学现代数值计算方法上机报告院系:华科学院专业年级:计算机科学与技术学生姓名:张栩嘉学号:201522030129指导教师:2017年5月12日数值计算方法上机实习题1. 设⎰+=105dx xx I nn , (1) 由递推公式nI I n n 151+-=-,从0I 的几个近似值出发,计算20I ; (2) 粗糙估计20I ,用nI I n n 51511+-=-,计算0I ; (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。
%上机习题1 %(1) I=0.182; for n=1:20I=(-5)*I+1/n; endfprintf('I20 的值是 %e\n',I); %(2)I=0.0087; for n=1:20I=(-1/5)*I+1/(5*n); endfprintf('I0 的值是 %f\n',I);3) 现象产生的原因:假设S n 的真值为S n ∗,误差为εn ,即εn =S n ∗−S n 对于真值,我们也有关系式S n ∗+5S n−1∗=1n 综合两个递推公式有εn =−5εn−1 这就意味着哪怕开始只有一点点误差,只要n 足够大,按照这种每计算一步误差增长5倍的方式,所得结果总是不可信的。
因此整个算法是不稳定的。
对于第二种方法 εn =−15εn−1 误差会以每计算一步缩小到1/5的方式进行,所以以这种方法计算的结果是可靠的,整个算法是稳定的。
2. 求方程0210=-+x e x的近似根,要求41105-+⨯<-k k x x ,并比较计算量。
(1) 在[0,1]上用二分法; (2) 取初值00=x ,并用迭代1021x k e x -=+;(3) 加速迭代的结果;(4) 取初值00=x ,并用牛顿迭代法; (5) 分析绝对误差。
%(1)在[0,1]上用二分法;a=0;b=1.0;ci=0;while abs(b-a)>5*1e-4c=(b+a)/2;ci=ci+1;if exp(c)+10*c-2>0b=c;else a=c;endendfprintf('二分法求得 c 的值是 %f\t',c);fprintf('迭代次数是 %d\n',ci);%(2)不动点迭代法,x=0;a=1;ci=0;while abs(x-a)>5*1e-4a=x;x=(2-exp(x))/10;ci=ci+1;endfprintf('不动点迭代求得 x 的值是 %f\t',x); fprintf('迭代次数是 %d\n',ci);%(3)艾特肯加速迭代x=0;a=0;b=1;ci=0;while abs(b-a)>5*1e-4a=x;y=exp(x)+10*x-2;z=exp(y)+10*y-2;x=x-(y-x)^2/(z-2*y+x);b=x;ci=ci+1;endfprintf('艾特肯加速迭代求得 x 的值是 %f\t',x); fprintf('迭代次数是 %d\n',ci);%(4)用牛顿迭代法x=0;a=0;b=1;ci=0;while abs(b-a)>5*1e-4a=x;x=x-(exp(x)+10*x-2)/(exp(x)+10);b=x;ci=ci+1;endfprintf('牛顿迭代法求得 x 的值是 %f\t',x); fprintf('迭代次数是 %d\n',ci); %(5)分析绝对误差solve('exp(x)+10*x-2=0'); fprintf('x 的真值是%.8f',x);运行结果:二分法求得 c 的值是 0.090332 迭代次数是 11 绝对为误差为0.000193 不动点迭代求得 x 的值是 0.090513 迭代次数是 4 绝对为误差为0.000012 艾特肯加速迭代求得 x 的值是 0.099488 迭代次数是 3 绝对为误差为0.008963 牛顿迭代法求得 x 的值是 0.090525 迭代次数是 2 绝对为误差为0.000000 x 的真值是0.090525>>分析可知加速迭代绝对误差最大,二分法次之,牛顿法和不动点法迭代效果最好。
实验七 矩阵特征值问题计算报告
![实验七 矩阵特征值问题计算报告](https://img.taocdn.com/s3/m/89f748df0508763231121254.png)
实验七 矩阵特征值问题计算一、问题提出利用冪法或反冪法,求方阵()ij n n A a ⨯=的按模最大或按模最小特征值及其对应的特征向量。
设矩阵A 的特征分布为:1231n n λλλλλ-≥≥≥≥≥且j j j Ax x λ=试求下列矩阵之一(1) 121241116A -⎡⎤⎢⎥=-⎢⎥⎢⎥-⎣⎦求1λ,及1x 取(0)5(1,1,1),10T υε-==结果116.42106,(0.046152,0.374908,1)Tx λ≈-≈--(2) 427318251147717235312651143532875124A --⎡⎤⎢⎥-⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎣⎦求16,λλ及1x取(0)5(1,0,1,0,0,1),10T υε-==结果:16121.30525, 1.62139,(0.8724,0.5401,0.9973,0.5644,0.4972,1.0)T x λλ≈≈≈(3) 2112112112112A -⎡⎤⎢⎥--⎢⎥⎢⎥=--⎢⎥--⎢⎥⎢⎥-⎣⎦求1λ及1x 取(0)4(1,1,1,1,1),10T υε-==结果 3.7321λ≈(4)⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----=1254261351314312A取()()T 1,1,1,10=υ 210-=ε这是一个收敛很慢的例子,迭代1200次才达到510-结果02857835.81-≈λ ()T x 564212.2,757730.0,501460.2,11--≈(5)⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---=611142121A有一个近似特征值42.6-,试用幂法求对应的特征向量,并改进特征值(原点平移法)。
取()()T 1,1,10=υ 410-=ε结果42107.6-≈λ ()Tx 1,37918.0,0461465.0--≈二、要求1、掌握冪法或反冪法求矩阵部分特征值的算法与程序设计;2、会用原点平移法改进算法,加速收敛;对矩阵B=A-PI 取不同的P 值,试求其效果;3、试取不同的初始向量(0)υ,观察对结果的影响;4、对矩阵特征值的其它分布,如12λλ=且123λλλ=≥如何计算。
数值分析上机实验指导书
![数值分析上机实验指导书](https://img.taocdn.com/s3/m/5e9a621b7fd5360cba1adba3.png)
“数值计算方法”上机实验指导书实验一 误差分析实验1.1(病态问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。
对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。
通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。
病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=−=−−−=k k x x x x x p显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。
现考虑该多项式的一个扰动)2.1(0)(19=+x x p ε其中ε是一个非常小的数。
这相当于是对(1.1)中19x 的系数作一个小的扰动。
我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个MATLAB 函数:“roots ”和“poly ”。
roots(a)u =其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。
设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程01121=+++++−n n n n a x a x a x a的全部根;而函数 poly(v)b =的输出b 是一个n+1维向量,它是以n 维向量v 的各分量为根的多项式的系数(从高到低排列)。
可见“roots ”和“poly ”是两个互逆的运算函数。
))20:1((;)2();21,1(;000000001.0ve poly roots ess ve zeros ve ess +===上述简单的MATLAB 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。
数值分析上机实验报告
![数值分析上机实验报告](https://img.taocdn.com/s3/m/f373efc36429647d27284b73f242336c1eb93090.png)
数值分析上机实验报告导言:本次上机实验主要是针对数值分析课程中的一些基本算法进行实验验证。
实验内容包括迭代法、插值法、数值积分和常微分方程的数值解等。
在实验过程中,我们将会使用MATLAB进行算法的实现,并对结果进行分析。
一、迭代法迭代法是解决函数零点、方程解等问题的常用方法。
我们将选择几个常见的函数进行迭代求根的实验。
(1)二分法二分法是一种简单而有效的迭代求根法。
通过函数在区间两个端点处的函数值异号来确定函数在区间内存在零点,并通过不断缩小区间来逼近零点。
(2)牛顿法牛顿法利用函数的一阶导数和二阶导数的信息来逼近零点。
通过不断迭代更新逼近值,可以较快地求得零点。
实验结果表明,对于简单的函数,这两种迭代法都具有很好的收敛性和稳定性。
但对于一些复杂的函数,可能会出现迭代失效或者收敛速度很慢的情况。
二、插值法插值法是在给定一些离散数据点的情况下,通过构造一个插值函数来逼近未知函数的值。
本实验我们将使用拉格朗日插值和牛顿插值两种方法进行实验。
(1)拉格朗日插值拉格朗日插值通过构造一个多项式函数来逼近未知函数的值。
该多项式经过离散数据点,并且是唯一的。
该方法简单易懂,但插值点越多,多项式次数越高,插值函数的精度也就越高。
(2)牛顿插值牛顿插值利用差商的概念,通过构造一个插值多项式来逼近未知函数的值。
与拉格朗日插值相比,牛顿插值的计算过程更加高效。
但同样要求插值点的选择要合理,否则可能出现插值函数不收敛的情况。
实验结果表明,这两种插值方法都能够很好地逼近未知函数的值。
插值点的选择对插值结果有很大的影响,过多或者过少的插值点都可能导致插值结果偏离真实函数的值。
三、数值积分数值积分是一种将定积分问题转化为数值求和的方法。
本实验我们将使用复合梯形求积法和复合辛普森求积法进行实验。
(1)复合梯形求积法复合梯形求积法将定积分区间等分为若干小区间,然后使用梯形公式对每个小区间进行近似求积,最后将结果相加得到整个定积分的近似值。
代数特征值求解实验报告
![代数特征值求解实验报告](https://img.taocdn.com/s3/m/a7fcd672c950ad02de80d4d8d15abe23482f03c7.png)
代数特征值求解实验报告
实验目的:
本实验旨在通过计算机编程求解代数特征值问题,探究代数特征值的求解方法,并对实验结果进行分析和讨论。
实验原理:
在线性代数中,特征值是矩阵的一个重要性质,它能够描述矩阵的特征和性质。
求解代数特征值的方法有多种,其中最常用的方法是通过计算矩阵的特征多项式的根来得到特征值。
实验步骤:
1.设定一个矩阵A,可以选择一个已知的矩阵或者随机生成一个矩阵。
2.利用数值计算软件(如Python的NumPy库)编写代码,求解矩阵A的特征值和特征向量。
3.运行代码,得到矩阵A的特征值和特征向量的计算结果。
4.对计算结果进行分析和讨论,比较实验结果与理论结果的差异。
实验结果与讨论:
根据实验所得结果,可以观察到矩阵A的特征值和特征向量。
特征值可以用来描述矩阵的几何性质,而特征向量则表示了这些特征值对应的特征空间。
通过对特征值和特征向量的分析,可以进一步了解
矩阵A的性质和特征。
结论:
通过本实验,我们成功地使用数值计算方法求解了代数特征值问题,并对实验结果进行了分析和讨论。
通过观察特征值和特征向量,我们能够更深入地了解矩阵的性质和特征。
这对于进一步研究线性代数和矩阵理论具有一定的指导意义。
数值计算方法上机实验
![数值计算方法上机实验](https://img.taocdn.com/s3/m/beb5805cbe23482fb4da4c76.png)
用追赶法解三角方程组Ax=d,A= , d=
实验过程:
1.利用C语言编程求解,程序如下:
#include<stdio.h>
#include<math.h>
void main()
{int i;
double a[5]={0,-1,-1,-1,-1},b[5]={2,1,1,1,1},c[4]={2,2,2,2},f[5]={6,7,9,11,1};
{double x=-0.99,y;
int n=0;
printf("%d ,%lf\n",n,x);
do
{y=x;
x=x-(x*x*x/3-x)/(x*x-1);
n++;
printf("n= %d ,x= %lf\n",n,x);
}while(fabs(y-x)>1e-5);
}
1.2.命令窗口结果截屏如下:
}
2.2.命令窗口结果截屏如下:
实验结果分析:
从运算截图中我们可以知道,一方面运用牛顿迭代法和牛顿下山迭代法的程序运算的结果是一致的,若出现小小的差异的话,可能是由于设置的变量类型不同导致,另一方面运用牛顿下山迭代法比运用一般牛顿迭代法计算的步骤要少一些,这证明对于同一个题,牛顿下山迭代法的优越性比一般的牛顿迭代要高。
实验内容:
用列主元法解线性方程组
=
实验过程:
1.利用C语言编程求解,程序如下:
#include<stdio.h>
#include<math.h>
void main()
{double t,m1,m2,m3,x1,x2,x3,x4,a[4][5]={1.1348,3.8326,1.1651,3.4017,9.5342,0.5301,1.7875,2.5330,1.5435,6.3941,3.4129,4.9317,8.7643,1.3142,18.4231,1.2371,4.9998,10.6721,0.0147,16.9237};
北航数值分析计算实习题目一 幂法 反幂法 求矩阵特征值
![北航数值分析计算实习题目一 幂法 反幂法 求矩阵特征值](https://img.taocdn.com/s3/m/d4e055c30c22590102029de4.png)
《数值分析》计算实习题目第一题:1. 算法设计方案(1)1λ,501λ和s λ的值。
1)首先通过幂法求出按模最大的特征值λt1,然后根据λt1进行原点平移求出另一特征值λt2,比较两值大小,数值小的为所求最小特征值λ1,数值大的为是所求最大特征值λ501。
2)使用反幂法求λs ,其中需要解线性方程组。
因为A 为带状线性方程组,此处采用LU 分解法解带状方程组。
(2)与140k λλμλ-5011=+k 最接近的特征值λik 。
通过带有原点平移的反幂法求出与数k μ最接近的特征值 λik 。
(3)2cond(A)和det A 。
1)1=nλλ2cond(A),其中1λ和n λ分别是按模最大和最小特征值。
2)利用步骤(1)中分解矩阵A 得出的LU 矩阵,L 为单位下三角阵,U 为上三角阵,其中U 矩阵的主对角线元素之积即为det A 。
由于A 的元素零元素较多,为节省储存量,将A 的元素存为6×501的数组中,程序中采用get_an_element()函数来从小数组中取出A 中的元素。
2.全部源程序#include <stdio.h>#include <math.h>void init_a();//初始化Adouble get_an_element(int,int);//取A 中的元素函数double powermethod(double);//原点平移的幂法double inversepowermethod(double);//原点平移的反幂法int presolve(double);//三角LU 分解int solve(double [],double []);//解方程组int max(int,int);int min(int,int);double (*u)[502]=new double[502][502];//上三角U 数组double (*l)[502]=new double[502][502];//单位下三角L 数组double a[6][502];//矩阵Aint main(){int i,k;double lambdat1,lambdat2,lambda1,lambda501,lambdas,mu[40],det;double lambda[40];init_a();//初始化Alambdat1=powermethod(0);lambdat2=powermethod(lambdat1);lambda1=lambdat1<lambdat2?lambdat1:lambdat2;lambda501=lambdat1>lambdat2?lambdat1:lambdat2;presolve(0);lambdas=inversepowermethod(0);det=1;for(i=1;i<=501;i++)det=det*u[i][i];for (k=1;k<=39;k++){mu[k]=lambda1+k*(lambda501-lambda1)/40;presolve(mu[k]);lambda[k]=inversepowermethod(mu[k]);}printf("------------所有特征值如下------------\n");printf("λ=%1.11e λ=%1.11e\n",lambda1,lambda501);printf("λs=%1.11e\n",lambdas);printf("cond(A)=%1.11e\n",fabs(lambdat1/lambdas));printf("detA=%1.11e \n",det);for (k=1;k<=39;k++){printf("λi%d=%1.11e ",k,lambda[k]);if(k % 3==0) printf("\n");} delete []u;delete []l;//释放堆内存return 0;}void init_a()//初始化A{int i;for (i=3;i<=501;i++) a[1][i]=a[5][502-i]=-0.064;for (i=2;i<=501;i++) a[2][i]=a[4][502-i]=0.16;for (i=1;i<=501;i++) a[3][i]=(1.64-0.024*i)*sin(0.2*i)-0.64*exp(0.1/i); }double get_an_element(int i,int j)//从A中节省存储量的提取元素方法{if (fabs(i-j)<=2) return a[i-j+3][j];else return 0;}double powermethod(double offset)//幂法{int i,x1;double u[502],y[502];double beta=0,prebeta=-1000,yita=0;for (i=1;i<=501;i++)u[i]=1,y[i]=0;//设置初始向量u[]for (int k=1;k<=10000;k++){yita=0;for (i=1;i<=501;i++) yita=sqrt(yita*yita+u[i]*u[i]);for (i=1;i<=501;i++) y[i]=u[i]/yita;for (x1=1;x1<=501;x1++){u[x1]=0;for (int x2=1;x2<=501;x2++)u[x1]=u[x1]+((x1==x2)?(get_an_element(x1,x2)-offset):get_an_element(x1,x2))*y[x2] ;}prebeta=beta;beta=0;for (i=1;i<=501;i++) beta=beta+ y[i]*u[i];if (fabs((prebeta-beta)/beta)<=1e-12) {printf("offset=%f lambda=%f err=%e k=%d\n",offset,(beta+offset),fabs((prebeta-beta)/beta),k);break;};//输出中间过程,包括偏移量,误差,迭代次数}return (beta+offset);}double inversepowermethod(double offset)//反幂法{int i;double u[502],y[502];double beta=0,prebeta=0,yita=0;for (i=1;i<=501;i++)u[i]=1,y[i]=0; //设置初始向量u[]for (int k=1;k<=10000;k++){yita=0;for (i=1;i<=501;i++) yita=sqrt(yita*yita+u[i]*u[i]);for (i=1;i<=501;i++) y[i]=u[i]/yita;solve(u,y);prebeta=beta;beta=0;for (i=1;i<=501;i++) beta=beta+ y[i]*u[i];beta=1/beta;if (fabs((prebeta-beta)/beta)<=1e-12) {printf("offset=%f lambda=%f err=%e k=%d\n",offset,(beta+offset),fabs((prebeta-beta)/beta),k);break;};//输出中间过程,包括偏移量,误差,迭代次数}return (beta+offset);int presolve(double offset)//三角LU分解{int i,k,j,t;double sum;for (k=1;k<=501;k++)for (j=1;j<=501;j++){u[k][j]=l[k][j]=0;if (k==j) l[k][j]=1;} //初始化LU矩阵for (k=1;k<=501;k++){for (j=k;j<=min(k+2,501);j++){sum=0;for (t=max(1,max(k-2,j-2)) ; t<=(k-1) ; t++)sum=sum+l[k][t]*u[t][j];u[k][j]=((k==j)?(get_an_element(k,j)-offset):get_an_element(k,j))-sum;}if (k==501) continue;for (i=k+1;i<=min(k+2,501);i++){sum=0;for (t=max(1,max(i-2,k-2));t<=(k-1);t++)sum=sum+l[i][t]*u[t][k];l[i][k]=(((i==k)?(get_an_element(i,k)-offset):get_an_element(i,k))-sum)/u[k][k];}}return 0;}int solve(double x[],double b[])//解方程组{int i,t;double y[502];double sum;y[1]=b[1];for (i=2;i<=501;i++){sum=0;for (t=max(1,i-2);t<=i-1;t++)sum=sum+l[i][t]*y[t];y[i]=b[i]-sum;}x[501]=y[501]/u[501][501];for (i=500;i>=1;i--){sum=0;for (t=i+1;t<=min(i+2,501);t++)sum=sum+u[i][t]*x[t];x[i]=(y[i]-sum)/u[i][i];}return 0;}int max(int x,int y){return (x>y?x:y);}int min(int x,int y){return (x<y?x:y);}3.计算结果结果如下图所示:部分中间结果:给出了偏移量(offset),误差(err),迭代次数(k)4.讨论迭代初始向量的选取对计算结果的影响,并说明原因使用u[i]=1(i=1,2,...,501)作为初始向量进行迭代,可得出以上结果。
数值分析上机实践报告
![数值分析上机实践报告](https://img.taocdn.com/s3/m/69c0f2f1f61fb7360b4c6509.png)
数值分析上机实践报告班级:计算机1002姓名:陈斯琪学号:20102686课题三A . 实验题目:线性方程组的迭代法B . 实验要求(1) 应用迭代法求解线性方程组,并与直接法作比较;(2) 分别对不同精度要求,如5-4-3-10,10,10=ε,利用所需迭代次数体会该迭代法的收敛快慢;(3) 对方程组(2),(3)使用SOR 方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试观察对算法收敛性的影响,并找出你所选用松弛因子的最佳值; (4) 编制出各种迭代法的程序并给出计算结果。
C . 目的和意义(1) 通过上机了解迭代法求解线性方程组的特点;掌握求解线性方程组的各类迭代法;(2) 体会上机计算时,终止准则‖X^(k+1)-X^k ‖∞<ε,对控制迭代精度的有效性; (3) 体会初始值和松弛因子的选择,对迭代收敛速度的影响 D . 实验方程组(1)线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡1-421534100368-24-3-81-012029137-2621-234179-11-1003524-31-23-6217758-6233-761-62911-31-512-301-231-2-2010563-5-6000121-3-20416084-0484⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2119381346323125精确解Tx )2,1,1,3,0,2,1,0,1,1(*--=.(2) 对称正定线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡45152211236601924-3-360024-3-36014110-3-5211144-3-310-4221-8-13-4-1-612-53-8-1141-2312-1-204204-2004204-2487654321x x x x x x x x精确解T*)2,0,1,1,2,0,1,1(--=x .(3)三对角线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡554141262135741-000000001-0041-0000001-41-0000001-41-0000001-41-0000001-41-0000001-41-0000001-41-0000001-400000001-000000001-410987654321x x xx x x x x x x精确解Tx )1,1,0,3,2,1,0,3,1,2(*---=.E . 实验程序代码及截图(1) 应用Jacobi 迭代法求解方程组代码如下: #include<iostream.h> #include<math.h>#define N 10 //十阶矩阵 staticdoubleA[N][N]={4,2,-3,-1,2,1,0,0,0,0,8,6,-5,-3,6,5,0,1,0,0,4,2,-2,-1,3,2,-1,0,3,1,0,-2,1,5,-1,3,-1,1,9,4,-4,2,6,-1,6,7,-3,3,2,3,8,6,-8,5,7,17,2,6,-3,5,0,2,-1,3,-4,2,5,3,0,1,16,10,-11,-9,17,34,2,-1,2,2,4,6,2,-7,13,9,2,0,12,4,0,0,-1,8,-3,-24,-8,6,3,-1};//方程组左侧系数矩阵 static double B[N]={5,12,3,2,3,46,13,38,19,-21}; //右侧值static double Y[N]; //输出比较项static double Y[N];static double X[N]; //输出项static double G[N]; //X = BX' + G的G矩阵int i,j,k; //计数器double eps;int M=100;bool distance(){ //求两输出项的差的范数是否满足精度要求double temp=0;for (i=0;i<N;i++){temp=temp+fabs(X[i]-Y[i]);}if (temp>eps)return false;elsereturn true; //满足精度要求则结束程序}void main(){cout<<"最大迭代次数为100次"<<endl;cout<<"你希望的精度是多少?"<<endl;cout<<"eps=";cin>>eps;//形成迭代矩阵B,存放到A中for (i=0;i<N;i++){if (fabs(A[i][i])<eps){cout <<"打印失败"<<endl;return;}double T=A[i][i];for (j=0;j<N;j++){A[i][j]=-A[i][j]/T;}A[i][i] = 0;G[i]=B[i]/T;}int counter=0;while (counter<M){//迭代for (i=0;i<N;i++){double temp=0;for (j=0;j<N;j++){temp=temp+A[i][j]*Y[j];}X[i]=G[i]+temp;}if (distance()==true)break;else{//交换X,Y向量;for(i=0;i<N;i++){Y[i]=X[i];}}counter++;}//打印Xcout << "迭代次数为:"<<counter<<"次。
数值分析上机实验报告
![数值分析上机实验报告](https://img.taocdn.com/s3/m/b91d5751854769eae009581b6bd97f192379bf7d.png)
一、实验目的通过本次上机实验,掌握数值分析中常用的算法,如二分法、牛顿法、不动点迭代法、弦截法等,并能够运用这些算法解决实际问题。
同时,提高编程能力,加深对数值分析理论知识的理解。
二、实验环境1. 操作系统:Windows 102. 编程语言:MATLAB3. 实验工具:MATLAB数值分析工具箱三、实验内容1. 二分法求方程根二分法是一种常用的求方程根的方法,适用于连续函数。
其基本思想是:从区间[a, b]中选取中点c,判断f(c)的符号,若f(c)与f(a)同号,则新的区间为[a, c],否则为[c, b]。
重复此过程,直至满足精度要求。
2. 牛顿法求方程根牛顿法是一种迭代法,适用于可导函数。
其基本思想是:利用函数在某点的导数值,求出函数在该点的切线方程,切线与x轴的交点即为方程的近似根。
3. 不动点迭代法求方程根不动点迭代法是一种迭代法,适用于具有不动点的函数。
其基本思想是:从初始值x0开始,不断迭代函数g(x)的值,直至满足精度要求。
4. 弦截法求方程根弦截法是一种线性近似方法,适用于可导函数。
其基本思想是:利用两点间的直线近似代替曲线,求出直线与x轴的交点作为方程的近似根。
四、实验步骤1. 二分法求方程根(1)编写二分法函数:function [root, error] = bisection(a, b, tol)(2)输入初始区间[a, b]和精度要求tol(3)调用函数计算根:[root, error] = bisection(a, b, tol)2. 牛顿法求方程根(1)编写牛顿法函数:function [root, error] = newton(f, df, x0, tol)(2)输入函数f、导数df、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = newton(f, df, x0, tol)3. 不动点迭代法求方程根(1)编写不动点迭代法函数:function [root, error] = fixed_point(g, x0, tol)(2)输入函数g、初始值x0和精度要求tol(3)调用函数计算根:[root, error] = fixed_point(g, x0, tol)4. 弦截法求方程根(1)编写弦截法函数:function [root, error] = secant(f, x0, x1, tol)(2)输入函数f、初始值x0和x1,以及精度要求tol(3)调用函数计算根:[root, error] = secant(f, x0, x1, tol)五、实验结果与分析1. 二分法求方程根以方程f(x) = x^2 - 2 = 0为例,输入初始区间[a, b]为[1, 3],精度要求tol 为1e-6。
《数值分析》上机实验报告
![《数值分析》上机实验报告](https://img.taocdn.com/s3/m/12eac89a58fafab068dc02ed.png)
数值分析上机实验报告x k x k - f(X k) f (X k)《数值分析》上机实验报告1. 用Newt on法求方程X7-X4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001 )。
1.1理论依据:设函数在有限区间[a,b]上二阶导数存在,且满足条件1. f(x)f(b) 02. f(x)在区间[a, b]上不变号3f(x) = 0;4」f (c)〔f .(x) |,其中c是a,b中使mir(| f .(a), f .(b) |)达到的一个b -a则对任意初始近似值x0• [a,b],由Newton迭代过程込f(x k )X“ M(Xk) = Xk — T^,k = 0,1,2,3…f'(X k)所生的迭代序列 % [平方收敛于方程f(x)=0在区间[a,b]上的惟一解: 令7 4f(x)=x -28x 14, f (0.1) 0, f(1.9) ::0f (x) =7x6-112x3=7x3(x3-16) ::: 0f (x) =42x5-336x2=42x2(x3-8) :: 0f (1.9) f (1.9) 0故以1.9为起点x0 =1.9如此一次一次的迭代,逼近X的真实根。
当前后两个的差<=出寸,就认为求出了近似的根。
本程序用Newton法求代数方程(最高次数不大于10)在(a,b )区间的根//限制循环次数1.2 C 语言程序原代码:#i nclude<stdio.h> #in clude<math.h> mai n() {double x2,f,f1; double x1=1.9; // 取初值为 1.9do {x2=x1;f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x 仁 x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); printf("计算结果:x=%f\n",x1);}1.3运行结果:* D:\VC + +\EXERCIS E\Debu g\l1.4 MATLAB上机程序fun cti on y=Newt on( f,df,x0,eps,M)d=0;for k=1:Mif feval(df,x0)==0d=2; breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))v=epsd=1; breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey=奇异’endfun cti on y=df(x)y=7*x A6-28*4*x A3;Endfunction y=f(x) y=x A7-28*x A4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newto n('f,'df,x0,eps,M);>> vpa(x,7)1.5问题讨论:1•使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。
数值分析实验报告——基本QR算法求全部特征值
![数值分析实验报告——基本QR算法求全部特征值](https://img.taocdn.com/s3/m/387383fe6c175f0e7dd137e8.png)
数值分析实验报告专业信息与计算科学班级信计101 姓名学号协作队员实验日期2013 年 1 月5 日星期六成绩评定教师签名批改日期题目一、问题提出给定矩阵2345644567036780028900010A⎛⎫⎪⎪⎪=⎪⎪⎪⎝⎭,(1)用Matlab函数“eig”求矩阵全部特征值.(2)用幂法求A的主特征值及对应的特征向量.(3)用基本QR算法求全部特征值(可用Matlab函数“qr"实现矩阵的QR分解)。
二、模型建立用幂法求A的主特征值及对应的特征向量的模型:选取,按照下列公式构造向量序列{}{}则有循环足够多次后,可以近似得出,三、求解方法(1)A=[2 3 4 5 6;4 4 5 6 7;0 3 6 7 8;0 0 2 8 9;0 0 0 1 0];a=eig(A)(2)pmethod。
mfunction [l,v,s]=pmethod(A,x0,eps)if nargin==2eps = 1.0e-6;endv = x0;%v为主特征向量M = 5000; %迭代步数限制m = 0;l = 0;for(k=1:M)y = A*v;m = max(y);%m为按模最大的分量v = y/m;if(abs(m — l)<eps)l = m; %到所需精度,退出,l为主特征值 s = k;%s为迭代步数return;elseif(k==M)disp('迭代步数太多,收敛速度太慢!’); l = m;s = M;elsel = m;endendend(3)function l = rqrtz(A,M)%QR算法求矩阵全部特征值%已知矩阵:A%迭代步数:M%求得的矩阵特征值:lA = hess(A);for i=1:MN = size(A);n = N(1,1);u = A(n,n);[q,r]=qr(A—u*eye(n,n));A = r*q+u*eye(n,n);l = diag(A);end四、输出结果(1)a = 13。
数值代数上机习题:非对称特征值的计算方法
![数值代数上机习题:非对称特征值的计算方法](https://img.taocdn.com/s3/m/fa2e5e62783e0912a2162a0b.png)
3 3 2
+ 101x 7 + 208.01x 6 + 10891.01x 5 + 9802.08 x 4
+ 79108.9 x 3 − 99902 x 2 + 790 x − 1000 = 0
2.求实矩阵的全部特征值及特征向量
(1)用你熟悉的计算机语言编制利用隐式 QR 方法求一个实矩阵全部特征值和特征向量的通用子程
数值代数上机习题二:非对称特征值的计算方法
一.题目要求.................................................................................................................................................1 1.求多项式方程的模最大的根..............................................................................................................1 2.求实矩阵的全部特征值及特征向量..................................................................................................2 二.算法原理.................................................................................................................................................2 1.求多项式方程的模最大的根..............................................................................................................2 1)利用幂法求矩阵模最大的特征值........................................................................................... 2 2)利用幂法求多项式方程模最大的根....................................................................................... 3 3)幂法中初始向量的选取问题...................................................................................................4 2.求实矩阵的全部特征值及特征向量..................................................................................................5 1)QR 方法.................................................................................................................................... 5 2)实 Schur 标准型及上 Hessenberg 化....................................................................................... 6 3)隐式 QR 算法........................................................................................................................... 7 三.算法实现.................................................................................................................................................9 四.计算结果.................................................................................................................................................9 五.结果分析...............................................................................................................................................14 参考文献.......................................................................................................................................................14 附录:matlab 代码.......................................................................................................................................14
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-8
主特征值误差的下降曲线 乘幂法 Atiken加 速 Rayleigh加 速
3 2.5 2 1.5 1 0.5 0
1.1
1.2
1.3
1.4
1.5 1.6 迭代步数
1.7
1.8
1.9 x 10
2
4
从上面两图可以看出, 初始阶段乘幂法会剧烈震荡, 在迭代一段时间后会突然特征值误差变 大。在迭代 6000 次后,震荡现象不再出现。从第二张图中可以看出,采用 Atiken 和 Rayleigh 商加速得到的误差下降较快。 由于 Atiken 加速和 Rayleigh 商加速均是对特征值进行的, 对特征向量无影响, 故特征子空间 的距离的下降情形一致。下图为特征子空间距离的下降曲线。
练习 6.20 用二分法加原点位移反幂法求解在(1,2)之间的特征值。 实验步骤: 1.strum 序列 pi μ ������ i=0 的符号相同数计算 采用讲义给出的如下算法: q1 = ������1 (������) ������������2 q i ������ = ������������ − ������ − , ������ = 2,3, …. ������������−1 ������ 符号相同数恰好为序列q1 ������ , ������2 ������ , …中非负数的个数。
从上面序列可以看出,迭代一次后特征值并不靠近真实特征值,但利用反幂法,迭代 20 步 后,精度已达到10−10 级别。 从特征向量的距离的角度来看:
10 10 10
特征子空间距离大小
0
n=100, 特 征 子 空 间 距 离 的 下 降 曲 线
-1
-2
10 10 10 10 10 10
-3
-4
-5
10
-250
阈值 古典 循环 0 0.5 1 1.5 2
Givens 变 换 次 数 2.5 3 3.5 4 4.5 x 10 5
4
10
-300
10
50
n=101, 阈 值 、 循 环 及 古 典 Jacobi方 法 中 非 对 角 线 元 F范 数 值 的 下 降
10
0
10
非 对 角 线 元 F范 数 的 大 小
3.9962066557820 6
1.69099045876919e-0 9
3.9962066574740 9
7.54951656745106e-1 5
从上面两表可以看出,n=100 时,利用乘幂法和降阶法求出的特征值误差为10−10 和10−9量 级,而利用同时迭代法求出的特征值误差为10−15 和10−15 量级。n=101 时,利用乘幂法和降 阶法求出的特征值误差为10−16 和10−9 量级,而利用同时迭代法求出的特征值误差为10−15 和10−15 量级。 由此可以看出降阶法求出的第二个主特征值的精度远低于同时迭代法求出的第二个主特征 值精度。 理论分析如下, 因为使用降阶法, 第二个主特征信息的计算精度会受到第一个主特征信息计 算精度的影响,由于舍入误差的积累,特征信息的逐次求解过程,势必造成计算精度越来越 差。 而子空间同时迭代法可以同时求出矩阵的前若干个主特征值信息, 避免了舍入误差的积 累,故对较靠后的主特征值也有很好的精度。
3.9990325645839 8 3.9961311942671 9
降阶法+乘幂 法
3.9990325644623 3 3.9961311960320 9 0
误差
1.21668009001041e-1
同时迭代法
3.9990325645839 8 3.9961311942672
误差
3.10862446895044e-1 5 6.21724893790088e-1 5
特征值误差
阈值 古典 循环
1.2 1 0.8 0.6 0.4 0.2 0
0
1
2
3 Givens 变 换 次 数
4
5 x 10
6
4
从上面两图可以看出,使用古典 Jacobi 方法,矩阵的对角元最快地趋于真实特征值。阈值 Jacobi 比循环 Jacobi 稍微快一些。 (2)用进行相同次数的 Givens 变换后,矩阵非对角元的 F-范数值的下降来刻画收敛过程。
解:采用教科书上 8.1 算法编写程序。在 n=100 时,由于 1,1,1, … ,1 T 在主特征值对应的特 征向量上投影为 0,如果取v0 = 1,1,1, … ,1 T ,若无舍入误差的影响,就会导致乘幂法求解 出的特征值为第二主特征值。故这里取初始向量v0 为随机向量。为了便于比较,在每一步迭 代中,将 Atiken 加速值和 Rayleigh 商加速值分别计算出来,并作出如下图像:
从特征向量的角度来看,可得迭代过程中特征向量与用 eig 函数求出的特征向量的子空间之 间的距离如下表: 2.1073424255447e-08 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
从上表可以看出,进行一次迭代后计算得到的特征向量与 eig 函数求出的特征向量子空间的 距离已为10−8 数量级,故可以认为两者相同,即反幂法确有“一次收敛”到特征向量的特 性。 不过并未观察到后续迭代会起到反作用的现象 (即做多次反幂法后, 特征子空间的距离反而 可能会变大) ,这可能是由于 MATLAB 计算的精度太高导致。
特征值问题数值计算上机实验
练习 6.16: 取初始向量为v0 = 1,1,1, … ,1 ������ ,用乘幂法计算主特征值及其相应的特征向量。 请绘制主特征值误差下降曲线,以及特征子空间距离的下降曲线。然后采用 Atiken 加速 技巧和 Rayleigh 商技术分别对算法进行加速,并完成类似的工作。
为了比较三种不同的方法的效率,下面将经过相同次数的 Givens 变换后三种不同的 Jacobi 方法分别对应的非对角元的 F-范数值的大小显示在一张图上,由此来进行比较。由于阈值 Jacobi 方法的效率也部分依赖于消元容限的选取,这里需要指出消元容限。采用的消元容限 为:σ1 = n ������0
练习 6.18 用幂法求解第二主特征值及其特征向量;用同时迭代法求解Tn 的前两个主特
征值。比较两者的计算效果。
解:对于用乘幂法求解第二主特征值,先采用降阶法,这里取S1 为 Householder 变换矩阵, 先利用乘幂法求出Tn 的主特征值λ1 及其对应的特征向量x1 ,然后求出降阶阵 A2,此处利用 MATLAB 的 eig 函数,发现 A2 与Tn 除λ1 外的其余特征值的差距不大。 再对A2 用乘幂法,可以求出 A2 的主特征值,即Tn 的第二特征值。见下表: 而若用同时迭代法则可直接求出Tn 的前两个主特征值。 采用教科书上算法, 可得计算结果如 下: 当 n=100 真实值
n=100, 阈 值 、 循 环 及 古 典 Jacobi方 法 中 特 征 值 误 差 的 下 降 2 1.8 1.6 1.4
特征值误差
阈值 古典 循环
1.2 1 0.8 0.6 0.4 0.2 0
0
0.5
1
1.5
2 2.5 3 Givens 变 换 次 数
3.5
4
4.5 x 10
5
4
n=101, 阈 值 、 循 环 及 古 典 Jacobi方 法 中 特 征 值 误 差 的 下 降 2 1.8 1.6 1.4
2.利用循环依次计算出(0,1)区间上的全部特征值的区间估计。 3.对上面的区间估计在利用反幂法得到特征值的近似。 实验数据: n=100 和 101 时,直接利用 MATLABeig 函数,得到T100 、T101 位于(1,2)区间上的特征值如下 表: (左边为 n=100 时的情形,右边为 n=101 时的情形)
1.3265605505321 8 1.95501348518822
2.03078984640160 2.03125681228880 2.03106008819891 2.03111963185171 2.03109858241729 2.03110536218386 2.03110536218386
-6
-7
-8
0
2
4
6
8
10 12 迭代步数
14
16
18
20
(其中间断处是由于值为 0) 从上图可以看出特征向量无“一次收敛”特性,但经过 6 次迭代后,误差已达到10−8 数量 级。 当 n=101 时,T101 的靠近 2 的特征值为 1.9384098828 和 2 以及 2.06159011711234,即恰好 2 为T101 的特征值,取 q=2,由于此时矩阵T101 − ������������ 奇异,故可对平移量 q 进行一个非常小 的扰动,取ε = 10−15 .对T101 − (������ + ������)������进行反幂法,预计此时反幂法的“一次收敛”特性非 常明显。进行 20 次反幂法得到计算序列结果为: 1.99999999999998 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
-50
10
-100
10
-150
10
-200
10
-250
10
-300
阈值 古典 循环 0 1 2
Givens 变 换 次 数 3 4 5 x 10 6
4
从上面两图可以看出,仅从进行相同次数的 Givens 变化的角度来看,应用古典 Jacobi 方法 效率最高,阈值和循环 Jacobi 差距不大。从理论上来说也是合理的,这是由于古典 Jacobi 方法每次都是将模最大的元变为 0,所以效率最高。但是,对于较大矩阵的计算机来说,计 算是容易的, 搜索模最大的元素的代价是巨大的。 故经典 Jacobi 用计算机实际执行起来效率 不高。而循环 Jacobi 算法扫描整个矩阵,按预定的次序将元素变为 0,省去了搜索最大元的 代价。阈值 Jacobi 则是每一次消元时只对大于容限的值进行处理。