大工矩阵与数值分析实验报告

合集下载

数值分析实验报告——Hilbert矩阵的求解

数值分析实验报告——Hilbert矩阵的求解

1 / 7 数值分析课程实验报告题目:病态线性方程组的求解理论分析表明,数值求解病态线性方程组很困难。

考虑求解如下的线性方程组的求解Hx = b ,期中,期中H 是Hilbert 矩阵,()ij n n H h ´=,11ij h i j =+-,i ,j = 1,2,…,n 1.估计矩阵的2条件数和阶数的关系2.对不同的n ,取(1,1,,1,1))nx =Î,分别用Gauss 消去,Jacobi 迭代,Gauss-seidel 迭代,SOR 迭代和共轭梯度法求解,比较结果。

3.结合计算结果,试讨论病态线性方程组的求解。

解答过程1.估计矩阵的2-条件数和阶数的关系矩阵的2-条件数定义为:1222()Cond A A A-=´,将Hilbert 矩阵带入有:1222()Cond H H H -=´调用自编的Hilbert_Cond 函数对其进行计算,取阶数n = 50,可得从,可得从1阶到50阶的2-条件数,以五位有效数字输出,其中前10项见表1。

表1.前十阶Hilbert 矩阵的2-条件数阶数1 2 3 4 5 2-条件数1 19.281 524.06 1.5514e+004 4.7661e+005 阶数6 7 8 9 10 2-条件数1.4951e+007 4.7537e+008 1.5258e+010 4.9315e+011 1.6025e+013 从表1可以看出,随着阶数每递增1,Hilbert 矩阵的2-条件数都至少增加一个数量级,但难以观察出明显的相依规律。

故考虑将这些数据点绘制在以n 为横轴、Cond (H )2为纵轴的对数坐标系中(编程用Hilbert_Cond 函数同时完成了这个功能),生成结果如图1。

图1.不同阶数下Hilbert 矩阵的2-条件数分布条件数分布由图可见,当维数较小时,在y-对数坐标系中Cond (H )2与n 有良好的线性关系;但n 超过10后,线性趋势开始波动,n 超过14后更是几乎一直趋于平稳。

矩阵的基本操作实验报告(3篇)

矩阵的基本操作实验报告(3篇)

第1篇一、实验目的1. 理解矩阵的基本概念及其应用。

2. 掌握矩阵的创建、显示、赋值、转置、求逆、求行列式等基本操作。

3. 熟悉C语言在矩阵操作中的应用。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 语言:C语言三、实验内容1. 矩阵的创建与赋值2. 矩阵的显示3. 矩阵的转置4. 矩阵的求逆5. 矩阵的行列式求解6. 矩阵的加法、减法、乘法四、实验步骤1. 创建矩阵```cinclude <stdio.h>define MAX_SIZE 10int main() {int matrix[MAX_SIZE][MAX_SIZE];int row, col, i, j;printf("请输入矩阵的行数和列数:\n");scanf("%d %d", &row, &col);printf("请输入矩阵的元素:\n");for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {scanf("%d", &matrix[i][j]);}}return 0;}```2. 显示矩阵```cvoid printMatrix(int matrix[][MAX_SIZE], int row, int col) { int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {printf("%d ", matrix[i][j]);}printf("\n");}}```3. 矩阵转置```cvoid transposeMatrix(int matrix[][MAX_SIZE], int row, int col, int transposed[][MAX_SIZE]) {int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {transposed[j][i] = matrix[i][j];}}}```4. 矩阵求逆```c// 略,求逆算法较为复杂,可参考相关资料```5. 矩阵的行列式求解```c// 略,行列式求解算法较为复杂,可参考相关资料```6. 矩阵的加法、减法、乘法```cvoid addMatrix(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE], int row, int col, int result[][MAX_SIZE]) {int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {result[i][j] = matrix1[i][j] + matrix2[i][j];}}}void subtractMatrix(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE],int row, int col, int result[][MAX_SIZE]) {int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {result[i][j] = matrix1[i][j] - matrix2[i][j];}}}void multiplyMatrix(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE],int row1, int col1, int col2, int result[][MAX_SIZE]) {int i, j, k;for (i = 0; i < row1; i++) {for (j = 0; j < col2; j++) {result[i][j] = 0;for (k = 0; k < col1; k++) {result[i][j] += matrix1[i][k] matrix2[k][j];}}}}```五、实验结果与分析1. 创建矩阵、显示矩阵、转置矩阵等操作均能正常进行。

矩阵和数组的操作 实验报告

矩阵和数组的操作 实验报告

实验报告课程名称:MATLAB上机实验实验项目:矩阵和数组的操作实验地点:专业班级:学号学生姓名:指导教师:年月日实验二矩阵和数组的操作一.实验环境计算机 MATLAB软件二.实验目的1.掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等。

2.学习矩阵和数组的加减运算与乘法。

3.掌握对数组元素的寻访与赋值,会对数组进行一般的操作。

三.实验内容与步骤1.用三种方法创建一个3×3矩阵,然后利用矩阵编辑器,将其扩充为4×5矩阵,并保存,试着调用它。

2.建立一个等差数列,然后由它产生一个对角阵。

3.利用MATLAB的函数inv(A)求方阵的逆矩阵。

解:1.(1)>> A=[3,2,1;4,5,6;7,8,9]A =3 2 14 5 67 8 9(2)A=rand(3,3)A =0.9501 0.4860 0.45650.2311 0.8913 0.01850.6068 0.7621 0.82142.> a=linspace(0.1,5,5)a =0 0.3750 0.7500 1.1250 1.5000>> B=diag(a)B =0 0 0 0 00 0.3750 0 0 00 0 0.7500 0 00 0 0 1.1250 00 0 0 0 1.50003.>> A=[1,2;5,6]A =1 25 6>> B=inv(A)B =-1.5000 0.50001.2500 -0.2500四.练习题1.创建一个5×5矩阵,提取主对角线以上的部分。

>> A=rand(5,5)A =0.4447 0.1763 0.8936 0.1389 0.19880.6154 0.4057 0.0579 0.2028 0.01530.7919 0.9355 0.3529 0.1987 0.74680.9218 0.9169 0.8132 0.6038 0.44510.7382 0.4103 0.0099 0.2722 0.9318>> B=triu(A)B =0.4447 0.1763 0.8936 0.1389 0.19880 0.4057 0.0579 0.2028 0.01530 0 0.3529 0.1987 0.74680 0 0 0.6038 0.44510 0 0 0 0.93182.A=rand(3),B=magic(3),C=rand(3,4),计算A×B×C>> A=rand(3),B=magic(3),C=rand(3,4)A =0.4660 0.5252 0.83810.4186 0.2026 0.01960.8462 0.6721 0.6813B =8 1 63 5 74 9 2C =0.3795 0.7095 0.1897 0.30280.8318 0.4289 0.1934 0.54170.5028 0.3046 0.6822 0.1509>> D=A*B*CD =16.2278 13.1844 9.2577 9.61074.8656 4.7624 3.7848 2.692118.5715 15.9959 11.7862 10.76673.创建一个3×3矩阵,并求其转置,逆矩阵。

数值分析实验报告

数值分析实验报告

数值分析实验报告篇一:数值分析实验报告(一)(完整)数值分析实验报告12345篇二:数值分析实验报告数值分析实验报告课题一:解线性方程组的直接方法1.实验目的:1、通过该课题的实验,体会模块化结构程序设计方法的优点;2、运用所学的计算方法,解决各类线性方程组的直接算法;3、提高分析和解决问题的能力,做到学以致用;4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。

2.实验过程:实验代码:#include &quot;stdio.h&quot;#include &quot;math.h&quot;#includeiostreamusing namespace std;//Gauss法void lzy(double **a,double *b,int n) {int i,j,k;double l,x[10],temp;for(k=0;kn-1;k++){for(j=k,i=k;jn;j++){if(j==k)temp=fabs(a[j][k]);else if(tempfabs(a[j][k])){temp=fabs(a[j][k]);i=j;}}if(temp==0){cout&quot;无解\n; return;}else{for(j=k;jn;j++){temp=a[k][j];a[k][j]=a[i][j];a[i][j]=temp;}temp=b[k];b[k]=b[i];b[i]=temp;}for(i=k+1;in;i++) {l=a[i][k]/a[k][k];for(j=k;jn;j++)a[i][j]=a[i][j]-l*a[k][j]; b[i]=b[i]-l*b[k];}if(a[n-1][n-1]==0){cout&quot;无解\n;return;}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i=0;i--){temp=0;for(j=i+1;jn;j++)temp=temp+a[i][j]*x[j];x[i]=(b[i]-temp)/a[i][i];}for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]); printf(&quot;\n&quot;);}}//平方根法void pfg(double **a,double *b,int n)int i,k,m;double x[8],y[8],temp;for(k=0;kn;k++){temp=0;for(m=0;mk;m++)temp=temp+pow(a[k][m],2);if(a[k][k]temp)return;a[k][k]=pow((a[k][k]-temp),1.0/2.0);for(i=k+1;in;i++){temp=0;for(m=0;mk;m++)temp=temp+a[i][m]*a[k][m]; a[i][k]=(a[i][k]-temp)/a[k][k]; }temp=0;for(m=0;mk;m++)temp=temp+a[k][m]*y[m];y[k]=(b[k]-temp)/a[k][k];}x[n-1]=y[n-1]/a[n-1][n-1];for(k=n-2;k=0;k--){temp=0;for(m=k+1;mn;m++)temp=temp+a[m][k]*x[m];x[k]=(y[k]-temp)/a[k][k];}for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]);printf(&quot;\n&quot;);}}//追赶法void zgf(double **a,double *b,int n){int i;double a0[10],c[10],d[10],a1[10],b1[10],x[10],y[10]; for(i=0;in;i++){a0[i]=a[i][i];if(in-1)c[i]=a[i][i+1];if(i0)d[i-1]=a[i][i-1];}a1[0]=a0[0];for(i=0;in-1;i++){b1[i]=c[i]/a1[i];a1[i+1]=a0[i+1]-d[i+1]*b1[i];}y[0]=b[0]/a1[0];for(i=1;in;i++)y[i]=(b[i]-d[i]*y[i-1])/a1[i];x[n-1]=y[n-1];for(i=n-2;i=0;i--)x[i]=y[i]-b1[i]*x[i+1];for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]); printf(&quot;\n&quot;);}}int main(){int n,i,j;double **A,**B,**C,*B1,*B2,*B3;A=(double **)malloc(n*sizeof(double)); B=(double **)malloc(n*sizeof(double));C=(double **)malloc(n*sizeof(double));B1=(double *)malloc(n*sizeof(double));B2=(double *)malloc(n*sizeof(double));B3=(double *)malloc(n*sizeof(double));for(i=0;in;i++){A[i]=(double *)malloc((n)*sizeof(double));B[i]=(double*)malloc((n)*sizeof(double));C[i]=(double*)malloc((n)*sizeof(double)); }cout&quot;第一题(Gauss列主元消去法):&quot;endlendl; cout&quot;请输入阶数n:&quot;endl;cinn;cout&quot;\n请输入系数矩阵:\n\n&quot;;for(i=0;in;i++)for(j=0;jn;j++){篇三:数值分析实验报告(包含源程序) 课程实验报告课程实验报告。

大连理工大学矩阵与数值分析上机作业18478

大连理工大学矩阵与数值分析上机作业18478

矩阵与数值分析上机作业学校:大连理工大学学院:班级:姓名:学号:授课老师:注:编程语言_ Matlab— 1.耆虑计算给段向量的葩址输入向量(ms,」"产输出||工||“ ||工|怙|k||s请编制一个通用程序,并用你編制的程序计尊如下向童的范数:蛊=口』厂…肋匚对利=讥un wm甚至更大的“计算其范数,你会发现什么结栗?你能否修改你的程序使得计算绪果相时赫■确呢?程序:Norm.m函数fun cti on s=Norm(x,m)%求向量x的范数%mx 1,2,inf 分别表示1,2,无穷范数n=len gth(x);s=0;switch mcase 1 %1-范数for i=1: ns=s+abs(x(i));endcase 2 %2-范数for i=1: ns=s+x(i)A2;ends=sqrt(s);case inf %无穷-范数s=max(abs(x));end计算向量x,y的范数Testl.mclear all ;clc;n1=10; n2=100; n3=1000;x1=1./[1: n1]';x2=1./[1: n2]';x3=1./[1: n3]';y1=[1: n1]';y2=[1: n2]';y3=[1: n3]';disp( 'n=10 时');disp( 'x 的1-范数:');disp(Norm(x1,1));disp( 'x 的2-范数:');disp(Norm(x1,2));disp( 'x 的无穷-范数:');disp(Norm(x1,inf));disp( 'y 的1-范数:');disp(Norm(y1,1));disp( 'y 的2-范数:');disp(Norm(y1,2));disp( 'y 的无穷-范数:');disp(Norm(y1,inf));disp( 'n=100 时');disp( 'x 的1-范数:');disp(Norm(x2,1));disp( 'x 的2-范数:');disp(Norm(x2,2)); disp( 'x 的无穷-范数:');disp(Norm(x2,inf)); disp( 'y 的1-范数:');disp(Norm(y2,1));disp( 'y 的2-范数:');disp(Norm(y2,2)); disp( 'y 的无穷-范数:');disp(Norm(y2,inf)); disp( 'n=1000 时');disp( 'x 的1-范数:');disp(Norm(x3,1)); disp( 'x 的2-范数:');disp(Norm(x3,2));disp( 'x 的无穷-范数:');disp(Norm(x3,inf)); disp( 'y 的1-范数:');disp(Norm(y3,1));disp( 'y 的2-范数:');disp(Norm(y3,2)); disp( 'y 的无穷-范数:');disp(Norm(y3,inf));运行结果:n=10 时x的1-范数29290 ; x的2-范数:1.2449 ; x的无穷-范数:1y的1-范数:55 ; y 的2-范数:19.6214 ; y的无穷-范数:10 n=100 时x的1-范数:5.1874 ; x的2-范数:1.2787 ; x的无穷-范数:1y的1-范数:5050 ; y 的2-范数:581.6786 ; y的无穷-范数:100 n=1000 时x的1-范数:7.4855 ; x的2-范数:1.2822 ; x 的无穷-范数:1y 的1-范数:500500 ; y 的2-范数:1.8271e+004 ; y 的无穷-范数:10002.耆虑甘=/(x)= 畔旦=其中<51/(0) = L此时7(珂是连续函戟.用此公式计算沓工曰—1旷15卫_哪时的函数仏凰出图像.另一方虱老虑下面算涼d = 1 + z1/ J = 1 thanetsf.y = 1}end if用此算法计算x€[-KT31旷円时的函数值,画出图像.比校一下岌生了什么?程序Test2.mclear all ;clc;n=100; %区间h=2*10A(-15)/n; %步长x=-10A(-15):h:10A(-15);%第一种原函数f1=zeros(1, n+1);for k=1:n+1if x(k)~=0f1(k)=log(1+x(k))/x(k); elsef1(k)=1;endendsubplot(2,1,1);plot(x,f1, '-r');axis([-10A (-15),10A (-15),-1,2]); legend('原图');%第二种算法f2=zeros(1, n+1);for k=1:n+1d=1+x(k);if (d~=1)f2(k)=log(d)/(d-1);elsef2(k)=1;endendsubplot(2,1,2);plot(x,f2, '-r'); axis([-10A(-15),10A(-15),-1,2]); legend('第二种算法’);运行结果:显然第二种算法结果不准确, 是因为计算机中的舍入误差造成的,当X [_1015,1015]时,d=1x ,计算机进行舍入造成d 恒等于1,结果函数值恒为1。

数值分析实验报告1

数值分析实验报告1
问题提出:考虑一个高次的代数多项式
显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动
其中是一个非常小的数。这相当于是对(1。1)中的系数作一个小的扰动.我们希望比较(1。1)和(1。2)根的差别,从而分析方程(1。1)的解对扰动的敏感性.
实验内容:为了实现方便,我们先介绍两个Matlab函数:“roots”和“poly”。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。
实验过程:
程序:
建立M文件:
function x=gauss(n,r)
实验总结:
利用MATLAB来进行病态问题的实验,虽然其得出的结果是有误差的,但是可以很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。
学号:06450210
姓名:万轩
实验二插值法
实验2.1(多项式插值的振荡现象)
学号:06450210
姓名:万轩
实验五解线性方程组的直接方法
实验5。1(主元的选取与算法的稳定性)
问题提出:Gauss消去法是我们在线性代数中已经熟悉的.但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题.
其中若变量a存储n+1维的向量,则该函数的输出u为一个n维的向量。设a的元素依次为,则输出u的各分量是多项式方程

大连理工大学矩阵与数值分析上机作业

大连理工大学矩阵与数值分析上机作业
s=s+abs(x(i));
end
case2%2-范数
fori=1:n
s=s+x(i)^2;
end
s=sqrt(s);
caseinf%无穷-范数
s=max(abs(x));
end
计算向量x,y的范数
Test1.m
clearall;
clc;
n1=10;n2=100;n3=1000;
x1=1./[1:n1]';x2=1./[1:n2]';x3=1./[1:n3]';
xlabel('x');ylabel('p(x)');
运行结果:
x=2的邻域:
x =
1.6000 1.8000 2.0000 2.2000 2.4000
相应多项式p值:
p =
1.0e-003 *
-0.2621 -0.0005 0 0.0005 0.2621
p(x)在 [1.95,20.5]上的图像
程序:
[L,U]=LUDe.(A);%LU分解
xLU=U\(L\b)
disp('利用PLU分解方程组的解:');
[P,L,U] =PLUDe.(A);%PLU分解
xPLU=U\(L\(P\b))
%求解A的逆矩阵
disp('A的准确逆矩阵:');
InvA=inv(A)
InvAL=zeros(n);%利用LU分解求A的逆矩阵
0 0 0.5000 -0.2500 -0.1250 -0.0625 -0.0625
0 0 0 0.5000 -0.2500 -0.1250 -0.1250
0 0 0 0 0.5000 -0.2500 -0.2500

数值分析实验报告

数值分析实验报告

数值分析实验报告数值分析实验报告姓名:张献鹏学号:173511038专业:冶金工程班级:重冶二班目录1拉格朗日插值 (1)11.1问题背景.....................................................................................................11.2数学模型.....................................................................................................1.3计算方法1.....................................................................................................21.4数值分析.....................................................................................................2复化辛普森求积公式 (2)2.1问题背景2.....................................................................................................32.2数学模型.....................................................................................................32.3计算方法.....................................................................................................2.4数值分析5.....................................................................................................3矩阵的 LU 分解 (6)63.1问题背景.....................................................................................................3.2数学模型6.....................................................................................................3.2.1理论基础 (6)3.2.2实例 (7)73.3计算方法.....................................................................................................3.4小组元的误差 (8)4二分法求方程的根 (9)94.1问题背景.....................................................................................................94.2数学模型.....................................................................................................4.3计算方法9.....................................................................................................4.4二分法的收敛性 (11)5雅可比迭代求解方程组 (11)115.1问题背景...................................................................................................5.2数学模型11...................................................................................................5.2.1理论基础 (11)5.2.2实例 (12)5.3计算方法 (12)5.4收敛性分析 (13)6Romberg 求积法 (14)6.1问题背景 (14)6.2数学模型: (14)6.2.1理论基础 (14)6.2.2实例 (14)6.3计算方法 (15)6.4误差分析 (16)7幂法 (16)7.1问题背景 (16)7.2数学模型 (16)7.2.1理论基础 (16)7.2.2实例 (17)7.3计算方法 (17)7.4误差分析 (18)8改进欧拉法 (18)8.1问题背景 (18)8.2数学模型 (19)8.2.1理论基础 (19)8.2.2实例 (19)8.3数学模型 (19)8.4误差分析 (21)1拉格朗日插值1.1问题背景1f ( x)2, 5 x 5 求拉格朗日插值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矩阵与数值分析实验报告 姓 名: 学 号: 院 系:机械工程学院 班 级:003班 老 师:

2014年12月20日 第1页,共29页

1.方程在x=3.0附近有根,试写出其三种不同的等价形式以构成两种不同的迭代格式,再用这两种迭代求根,并绘制误差下降曲线,观察这两种迭代是否收敛及收敛的快慢。 解:三种不同的等价形式:

32242195xxx 5421923xx

x 19

425223xxx

两种不同的迭代方法: 方法一:简单迭代法

选择19425223xxx作为简单迭代法k1k()xx的迭代格式,k1k||xx



时,迭代终止,这里取δ=1E-5,

简单迭代法的程序如下: 程序1.1:简单迭代法: %第一题简单迭代法程序 clc clear del=1E-5; x=3; e=1E10; n=0; while e>del n=n+1; t=sqrt((2*x^3-19*x+42)/5); e=abs(t-x); E(n)=e; x=t; end X,n; plot(E,'g','linewidth',3) title('误差下降曲线图') xlabel('迭代次数') ylabel({'迭','代','误','差'},'rotation',0)

计算结果1.1:

x = 2.0000 n = 12

02468101200.050.10.150.20.25误差下降曲线图

迭代次数迭代误差 第2页,共29页

结果分析1.1: 这里的迭代结果是收敛的的,但是我也试过第3个迭代方程,发现是发散的,由计算结果可知,迭代法的收敛性与构造的迭代函数是直接相关的,我们应该根据定理4.5来构造迭代函数,这样可以得到收敛的结果。 方法2:Newton迭代法 1) 0421952)(23xxxxf 2) 19106)(2'xxxf 3) 19106421952)()(223)(')()()1(xxxxxxxfxfxxkkkk 当k1k||xx时,迭代终止,x0=3,δ=1e-5. 程序1.2:Newton迭代法: %第一题Newton迭代法程序 clc clear %Newton迭代法 del=1E-5; x=3; e=1E10;%条件判断值,足够大即可 n=0; while e>del n=n+1; t=x-(2*x^3-5*x^2-19*x+42)/(6*x^2-10*x-19); e=abs(t-x); E(n)=e; x=t; end x n plot(E,'g','linewidth',3) title('误差下降曲线图') xlabel('迭代次数') ylabel({'迭','代','误','差'},'rotation',0)

计算结果1.2:

x = 3.5000 n =6

11.522.533.544.555.5600.20.40.60.811.21.4误差下降曲线图

迭代次数迭代误差 第3页,共29页

结果分析1.2: Newton迭代法是二阶收敛,弦截法是在前者基础上变化来的,收敛阶1.618,在该题中使用简单迭代法的迭代步数为12,Newton迭代法为6,很明显,Newton迭代法收敛比较快。 2.用复化梯形公式、复化辛普森公式、龙贝格公式求下列定积分,要求绝对误差为,并将计算结果与精确解进行比较: (1) (2) 解:程序和结果如下: 程序2.1.1:使用复化梯形公式解第一个等式: function s=tixing1(a,b,n) format long a=1; b=2; n=150000; eror=100; h=(b-a)/(2*n); index1=(a+h):(2*h):(b-h); index2=(a+2*h):(2*h):(b-2*h); s1=sum(subs(fun2,index1)); s2=sum(subs(fun2,index2)); s=h*(subs(fun2,a)+subs(fun2,b)+2*s2) c=exp(4) error=abs(c-s)

计算结果2.1.1: s = 54.598150039042402 c = 54.598150033144236 error = 5.898165511553088e-009 程序2.1.2:使用复化Simpson公式解第一个等式: function s=simpon(a,b,n) format long a=1; b=2; n=370; eror=100; h=(b-a)/(2*n); index1=(a+h):(2*h):(b-h); index2=(a+2*h):(2*h):(b-2*h); s1=sum(subs(fun2,index1)); s2=sum(subs(fun2,index2)); s=h*(subs(fun2,a)+subs(fun2,b)+4*s1+2*s2)/3 c=exp(4) error=abs(c-s) 第4页,共29页

计算结果2.1.2: s = 54.598150034153207 c = 54.598150033144236 error = 1.008970684779342e-009 程序2.1.3:使用复化Romberg公式解第一个等式: function[t]=romberg(f,a,b,e) t=zeros(10,4); t(1,1)=(b-a)/2*(f(a)+f(b)); for k=2:4 sum=0; for i=1:2^(k-2) sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1)); end t(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum; for i=2:k t(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1); end end

for k=5:15 sum=0; for i=1:2^(k-2) sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1)); end t(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum; for i=2:4 t(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1); end if k>6 if abs(t(k,4)-t(k-1,4)) disp(['答案 ',num2str(t(k,4))]); break; end end end if k>=15 disp(['溢出']); end

计算结果2.1.3: 第5页,共29页

程序2.2.1:使用复化梯形公式解第2个等式: function s=tixing2(f,a,b,t) error=0.5*10^-8; n=2; s=0; while abs(s-t)>error h=(b-a)/n; s1=0; for k=1:n-1 x=a+h*k; s1=s1+feval(f,x); end n=n+1; s=h*(feval(f,a)+feval(f,b)+2*s1)/2; end n=n-1 end

计算结果2.2.1:在matlab命令框内输入tixing2(@(x) 2*x/(x^2-3),2,3,log(6))得到积分(2)的梯形公式计算量:

tixing2(@(x) 2*x/(x^2-3),2,3,log(6)) n = 14908 ans = 1.7918 程序2.2.2:使用复化Simpson公式解第2个等式: function s=fuhuasimpson(f,a,b,t) ep=0.5*10^-8; N=2; s=0; while abs(s-t)>ep h=(b-a)/(2*N); s1=0;s2=0; for k=1:N x=a+h*(2*k-1); 第6页,共29页

s1=s1+feval(f,x); end for k=1:(N-1) x=a+h*2*k; s2=s2+feval(f,x); end N=N+1; s=h*(feval(f,a)+feval(f,b)+4*s1+2*s2)/3; end N=N-1 end

计算结果2.2.2:

N = 95 ans = 1.791759474175664 程序2.2.3:使用复化Romberg公式解第2个等式: function[t]=romberg(f,a,b,e) t=zeros(15,4); t(1,1)=(b-a)/2*(f(a)+f(b)); for k=2:4 sum=0; for i=1:2^(k-2) sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1)); end t(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum; for i=2:k t(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1); end end

for k=5:15 sum=0; for i=1:2^(k-2) sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1)); end t(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum; for i=2:4 t(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1); end if k>6 if abs(t(k,4)-t(k-1,4)) disp(['答案 ',num2str(t(k,4))]); break; end end end if k>=15 disp(['溢出']); end

相关文档
最新文档