数值分析第二次上机作业实验报告

一.实验任务

用MA TLAB 语言编写连续函数最佳平方逼近的算法程序(函数式M 文件)。并用此程序进行数值试验,写出实验报告。

二.实验方法

最佳平方逼近方法采用基于正交多项式的最佳平方逼近,选择Lengendre 多项式做基。计算组合系数时,函数的积分采用变步长复化梯形求积法。

三.程序功能和使用说明

1.采用基于正交多项式的最佳平方逼近,选择Lengendre 多项式做基

利用递推关系

0112()1,()()(21)()(1)()/2,3,.....

n n n P x P x x

P x n xP x n P x n n --===---⎡⎤⎣⎦=

可构造出用户需要的任意次数的最佳平方逼近多项式。

2. 用M 文件建立数学函数,实现程序通过修改建立数学函数的M 文件以适用不同的被逼近函数。

3.已经考虑一般的情况]1,1[],[)(+-≠∈b a x f ,程序有变量代换的功能。

4.计算组合系数时,函数的积分采用变步长复化梯形求积法

5.可根据需要,求出二次、三次、。。。最佳平方逼近函数)x s (。

6.最后作出逼近函数)x s (和被逼近函数)(x f 的曲线图可进行比较,分别用绘图函数plot 和fplot 绘图。

7.在matlab 的命令窗口,输入[c,sx]=leastp(@func1,a,b,n),func1是被逼近函数,b 和a 分别是逼近函数的上、下区间,n 为最佳平方逼近的次数,可为任意次数。

四.程序代码(含注释)

1. 最佳平方逼近主函数

function [c,sx]=leastp(func,a,b,n)

%LEASTP.m:least-square fitting with legendre polynomials

%func 指被逼近函数,调用需要用句柄

%a,b 分别指被逼近函数的区间上下限

%n 指最佳平方逼近的次数

syms t;

syms x;

%以Lengendre 多项式为基,构造任意次数的最佳平方逼近多项式

p(2)=t;

p(1)=1;

if n>1

for j=3:1:(n+1)

p(j)=((2*j-3)*t*p(j-1)-(j-2)*p(j-2))/(j-1);

end

end

%变量代换,区间调整为[-1,1]

f=feval(func,(b-a)/2*t+(b+a)/2);

%计算组合系数,其中调用变步长复化梯形求积函数trapz

for j=1:1:(n+1)

c(j)=(2*j-1)/2*trapz(f*p(j),-1,1);

end

%将组合系数与对应的最佳平方多项式相乘然后求和,得到最佳逼近函数sx=0;

for j=1:1:(n+1)

sx=sx+c(j)*p(j);

end

%将变量替换还原

sx=subs(sx,(2*x-a-b)/(b-a));

%使用fplot绘制原函数图像

f1=feval(func,x);

f1=inline(f1);

[x,y]=fplot(f1,[a,b]);

plot(x,y,'r-','linewidth',1.5);

hold on;

%使用plot绘制最佳平方逼近函数图像

g=linspace(a,b,(b-a)*300);

fsx=subs(sx,g);

plot(g,fsx,'b-','linewidth',1.5);

str=strcat(num2str(n),'次最佳平方逼近');

legend('原函数',str);

end

2. 计算组合系数,变步长复化梯形求积法

function To1=trapz(func,a,b)

%半分区间复化梯形公式计算定积分

%func指需要求积分的原函数

%a,b分别指积分上下区间

%初值

h=b-a;

To=(subs(func,a)+subs(func,b))*(b-a)/2;

e=1;

while e>10^-6%迭代终止条件,前后两次积分值差小于10^-6 H=0;

x=a+h/2;

while x

H=H+subs(func,x);%计算出所有二分新出现的值的和

x=x+h;

end

To1=0.5*(To+h*H);%计算出新的积分值

e=abs(To1-To);

h=h/2;%继续半分区间,进行迭代计算

To=To1;

end

end

3. 以.m文件定义被逼近函数

function y=func1(x)

y=x*cos(x);

end

五.实验结果

1. 一次最佳平方逼近

c =

-1.1702 -2.4235

sx=

1.253290 - 1.211752*x

2. 二次最佳平方逼近

c =

-1.1702 -2.4235 -0.4265

sx=

-0.159939*x^2 - 0.571997*x + 0.826787

3. 三次最佳平方逼近

c =

-1.1702 -2.4235 -0.4265 1.2216

sx=

0.381759*x^3 - 2.450495*x^2 + 3.092892*x - 0.394843

4. 四次最佳平方逼近

c =

-1.1702 -2.4235 -0.4265 1.2216 0.3123

sx =

0.085392*x^4 - 0.301375*x^3 - 0.693864*x^2 + 1.531443*x - 0.082553

六.分析与讨论

从次数从1到4的最佳平方逼近图像对比可以发现,次数越高,图像拟合效果越好。尤其是当n=4时,几乎与原函数重合,精度非常高。但是,从实验中也发现,逼近次数越高,运算量越大,耗时也越长,换言之,时间和空间复杂度越高。因此,在实际运用中应该从精度要求和算法复杂度两方面来综合考虑最佳平方逼近的次数。

数值分析实验报告2

实验报告 实验项目名称函数逼近与快速傅里叶变换实验室数学实验室 所属课程名称数值逼近 实验类型算法设计 实验日期 班级 学号 姓名 成绩

512*x^10 - 1280*x^8 + 1120*x^6 - 400*x^4 + 50*x^2 - 1 并得到Figure,图像如下: 实验二:编写程序实现[-1,1]上n阶勒让德多项式,并作画(n=0,1,…,10 在一个figure中)。要求:输入Legendre(-1,1,n),输出如a n x n+a n-1x n-1+…多项式。 在MATLAB的Editor中建立一个M-文件,输入程序代码,实现勒让德多项式的程序代码如下: function Pn=Legendre(n,x) syms x; if n==0 Pn=1; else if n==1 Pn=x; else Pn=expand((2*n-1)*x*Legendre(n-1)-(n-1)*Legendre(n-2))/(n); end x=[-1:0.1:1]; A=sym2poly(Pn); yn=polyval(A,x); plot (x,yn,'-o'); hold on

end 在command Windows中输入命令:Legendre(10),得出的结果为: Legendre(10) ans = (46189*x^10)/256 - (109395*x^8)/256 + (45045*x^6)/128 - (15015*x^4)/128 + (3465*x^2)/256 - 63/256 并得到Figure,图像如下: 实验三:利用切比雪夫零点做拉格朗日插值,并与以前拉格朗日插值结果比较。 在MATLAB的Editor中建立一个M-文件,输入程序代码,实现拉格朗日插值多项式的程序代码如下: function [C,D]=lagr1(X,Y) n=length(X); D=zeros(n,n); D(:,1)=Y'; for j=2:n for k=j:n D(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1)); end end C=D(n,n); for k=(n-1):-1:1

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 1.用Newton 法求方程 X 7-X 4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据: 设函数在有限区间[a ,b]上二阶导数存在,且满足条件 {}α?上的惟一解在区间平方收敛于方程所生的迭代序列 迭代过程由则对任意初始近似值达到的一个中使是其中上不变号 在区间],[0)(3,2,1,0,) (') ()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20 )()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a b c f x f b a x f b f x f k k k k k k ==- ==∈≤-≠>+ 令 )9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f 故以1.9为起点 ?? ?? ? ='- =+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C语言程序原代码: #include #include main() {double x2,f,f1; double x1=1.9; //取初值为1.9 do {x2=x1; f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;} while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);} 1.3 运行结果: 1.4 MATLAB上机程序 function y=Newton(f,df,x0,eps,M) d=0; for k=1:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

数值分析第二次上机作业实验报告

一.实验任务 用MA TLAB 语言编写连续函数最佳平方逼近的算法程序(函数式M 文件)。并用此程序进行数值试验,写出实验报告。 二.实验方法 最佳平方逼近方法采用基于正交多项式的最佳平方逼近,选择Lengendre 多项式做基。计算组合系数时,函数的积分采用变步长复化梯形求积法。 三.程序功能和使用说明 1.采用基于正交多项式的最佳平方逼近,选择Lengendre 多项式做基 利用递推关系 0112()1,()()(21)()(1)()/2,3,..... n n n P x P x x P x n xP x n P x n n --===---⎡⎤⎣⎦= 可构造出用户需要的任意次数的最佳平方逼近多项式。 2. 用M 文件建立数学函数,实现程序通过修改建立数学函数的M 文件以适用不同的被逼近函数。 3.已经考虑一般的情况]1,1[],[)(+-≠∈b a x f ,程序有变量代换的功能。 4.计算组合系数时,函数的积分采用变步长复化梯形求积法 5.可根据需要,求出二次、三次、。。。最佳平方逼近函数)x s (。 6.最后作出逼近函数)x s (和被逼近函数)(x f 的曲线图可进行比较,分别用绘图函数plot 和fplot 绘图。 7.在matlab 的命令窗口,输入[c,sx]=leastp(@func1,a,b,n),func1是被逼近函数,b 和a 分别是逼近函数的上、下区间,n 为最佳平方逼近的次数,可为任意次数。 四.程序代码(含注释) 1. 最佳平方逼近主函数 function [c,sx]=leastp(func,a,b,n) %LEASTP.m:least-square fitting with legendre polynomials %func 指被逼近函数,调用需要用句柄 %a,b 分别指被逼近函数的区间上下限 %n 指最佳平方逼近的次数 syms t; syms x; %以Lengendre 多项式为基,构造任意次数的最佳平方逼近多项式 p(2)=t; p(1)=1; if n>1 for j=3:1:(n+1) p(j)=((2*j-3)*t*p(j-1)-(j-2)*p(j-2))/(j-1); end end

北航数值分析上机作业 二 (报告+所有程序大全)

数值分析上机作业2——QR 分解求特征值 题目:双步位移QR 分解法求A 的全部特征值,对每一个实特征值求特征向量。已知 sin(0.50.2) (,1,2,...,10)1.5cos( 1.2) ij i j i j a i j i j i j +≠?==?+=? 1. 算法设计方案 总体算法与老师的讲义和课本一致,在这里对自己的设计和改进做说明。 算法的关键在于对于被运算的矩阵A 的左下角理论为0的元素不再计算。 1) A 拟上三角化 对于2/()T T H I u u u u =- ,记'/u u =''T H I u u =-,这样去掉了系数,便于计算。 设对A 到的拟上三角化进行到到第k 步,12() 34k A A A A A ??= ??? , ()''0, 0''k T k k T k k I H I u u u u ??=-= ? ?? ,' k u 后半段不为0的部分是'k u , 则() ()() 1232''''''''T k k k k k T T T k k k k k k A A u u H A H u u A u u A u u ??= ? ?? ,只需要计算矩阵的右上角,右下角,和左下角即可,计算过程中按照行向量左乘矩阵以及列向量右乘矩阵的运算方法进行,左下角矩阵只有最右列有非零元素,可以简化运算。 2) QR 分解 对于2/()T T H I u u u u =- ,记'/u u =''T H I u u =-,这样去掉了系数,

便于计算。 设对A 到的QR 分解进行到到第k 步,12() 40k A A A A ??= ??? 。 () ''0, 0''k T k k T k k I H I u u u u ??=-= ??? 'k u 后半段不为0的部分是'k u , 则12()()40''k k T k k A A H A u u A ?? = ??? ,这样只需要计算矩阵的右上角和右下角矩阵。计算矩阵的右上角和右下角矩阵时,计算过程中按照行向量左乘矩阵以及列向量右乘矩阵的运算方法进行。 3) 求特向量的方法 对A I λ-进行选主元的高斯消去法,化成上三角阵,进行带入求解,对于第k 行,如果出现0k k x α=,并且0k α→的情况,直接令k x 为1。特向量完成求解后再进行归一化。 2. 拟上三角的A 1) 12位有效数字的形式 -8.82751675883e-001 -9.93313649183e-002 -1.10334928599e+000 -7.60044358564e-001 1.54910107991e-001 -1.94659186287e+000 -8.78243638293e-002 -9.25588938718e-001 6.03259944053e-001 1.51886095647e-001 -2.34787836242e+000 2.37237010494e+000 1.81929082221e+000 3.23780410155e-001 2.20579844032e-001 2.10269266255e+000 1.81613808610e-001 1.27883908999e+000 -6.38057812440e-001 -4.15407560380e-001 0.00000000000e+000 1.72827459997e+000 -1.17146764279e+000 -1.24383926270e+000 -6.39975834174e-001 -2.00283307904e+000 2.92494720612e-001 -6.41283006840e-001 9.78399762128e-002 2.55776357416e-001 0.00000000000e+000 0.00000000000e+000 -1.29166953413e+000 -1.11160351340e+000 1.17134682410e+000 -1.30735603002e+000 1.80369917775e-001 -4.24638535837e-001 7.98895523930e-002 1.60881992807e-001 0.00000000000e+000 0.00000000000e+000 0.00000000000e+000 1.56012629853e+000 8.12504939751e-001 4.42175683292e-001 -3.58861612814e-002 4.69174231367e-001 -2.73659505009e-001 -7.35933465775e-002 0.00000000000e+000 0.00000000000e+000 0.00000000000e+000 0.00000000000e+000 -7.70777375519e-001 -1.58305142574e+000 -3.04284317680e-001 2.52871244603e-001 -6.70992540145e-001 2.54461992908e-001 0.00000000000e+000 0.00000000000e+000 0.00000000000e+000 0.00000000000e+000 0.00000000000e+000 -7.46345345694e-001 -2.70836515702e-002 -9.48652189368e-001 1.19587108150e-001 1.92926561795e-002

北航 数值分析报告第二次大作业(带双步位移地QR方法)

一、算法设计方案: 按题目要求,本程序运用带双步位移的QR方法求解给定矩阵的特征值,并对每一实特征值,求解其相应的特征向量。 总体思路: 1)初始化矩阵 首先需要将需要求解的矩阵输入程序。为了防止矩阵在后面的计算中被破坏保存A[][]。 2)对给定的矩阵进行拟上三角化 为了尽量减少计算量,提高程序的运行效率,在对矩阵进行QR分解之前,先进行拟上三角化。由于矩阵的QR 分解不改变矩阵的结构,所以具有拟上三角形状的矩阵的QR分解可以减少大量的计算量。这里用函数 void QuasiTriangularization()来实现,函数形参为double型N维方阵double a[][N]。 3)对拟上三角化后的矩阵进行QR分解 对拟上三角化的矩阵进行QR分解会大大减小计算量。用子程序void QR_decomposition()来实现,将Q、R设为形参,然后将计算出来的结果传入Q和R,然后求出RQ乘积。 4)对拟上三角化后的矩阵进行带双步位移的QR分解 为了加速收敛,对QR分解引入双步位移,适当选取位移量,可以避免进行复数运算。为了进一步减少计算量,在每次进行QR分解之前,先判断是否可以直接得到矩阵的一个特征值或者通过简单的运算得到矩阵的一对特征值。若可以,则得到特征值,同时对矩阵进行降阶处理;若不可以,则进行QR分解。这里用函数intTwoStepDisplacement_QR()来实现。这是用来存储计算得到的特征值的二维数组。考虑到特征值可能为复数,因此将所有特征值均当成复数处理。此函数中,QR分解部分用子函数void QR_decompositionMk()实现。这里形参有三个,分别用来传递引入双步位移后的Mk阵,A矩阵,以及当前目标矩阵的维数m。 5)计算特征向量 得到特征值后,计算实特征值相应的特征向量。这里判断所得特征值的虚数部分是否为零。特征值的特征向量采用求解相应的方程组((A-λI)x=0)的方法。因此先初始化矩阵Array,计算(A-λI),再求解方程组。 方程组的求解采用列主元的高斯消去法,由函数intGauss_column(double a[][N],double b[],double X[])实现。由于此给定矩阵的特殊性,其没有重根,所有对应于每一特征值只有一个特征向量,因此可以用高斯消去法求解此奇异的线性方程组。首先用高斯消去将矩阵(A-λI)化为上三角阵,其最后一行必定全为零。因此在反代的过程中,只要令x[]的最后一个元素为“1”,即可得到方程组的一个基础解系,从而也就是一个特征向量。 6)输出有关结果 根据题目要求,需要输出拟上三角化后的矩阵、QR分解结束后的矩阵、矩阵全部特征值及对应实特征值的特征向量。由于输出结果要求都要保留12位有效数字,所以将结果输出到文件result.txt中更有利于数据的打印。程

数值分析实验报告

数值分析实验报告 【引言】 数值分析是一门研究利用计算机和数学方法解决实际问题的学科,它在工程、科学和经济领域中有着广泛的应用。在这个实验报告中,我将分享我在数值分析实验中的一些发现和结果。 【实验目的】 本次实验的目的是通过数值方法对给定的问题进行求解,并分析数值方法的精确性和稳定性。我们选择了经典的插值和数值积分问题来进行实验。 【实验过程】 在插值问题中,我使用了拉格朗日插值和样条插值两种方法。通过使用已知的数据点,这些方法能够通过构造多项式函数来逼近原始函数,从而能够在未知点上进行预测。通过比较两种插值方法的结果,我发现拉格朗日插值在低维数据上表现更好,而样条插值在高维数据上更能保持插值曲线的平滑性。 在数值积分问题中,我使用了复合梯形公式和复合辛普森公式来进行数值积分。这两种方法可以将复杂的区间上的积分问题转

化为对若干个小区间进行数值积分的问题。实验结果表明,复合辛普森公式在使用相同的步长时,其数值积分结果更为精确。 【实验结果】 我以一个实际问题作为例子来展示实验结果。问题是计算半径为1的圆的面积。通过离散化的方法,我将圆划分为多个小的扇形区域,并使用数值积分方法计算每个扇形的面积。最后将每个扇形的面积相加,即可得到圆的近似面积。通过调整离散化的精度,我发现随着扇形数量的增加,计算得到的圆的面积越接近真实的圆的面积。 在插值问题中,我选择了一段经典的函数进行插值研究。通过选择不同的插值节点和插值方法,我发现当插值节点越密集时,插值结果越接近原函数。同时,样条插值方法在高阶导数连续的情况下能够更好地逼近原始函数。 【实验总结】 通过这次实验,我对数值分析中的插值和数值积分方法有了更深入的理解。我了解到不同的数值方法在不同的问题中有着不同的适用性和精确度。在实际应用中,我们需要根据具体问题选择

数值分析上机实验报告

数值分析上机实验报告 摘要: 本报告是对数值分析课程上机实验的总结和分析,涵盖了多种算法和数据处理方法,通过对实验结果的分析,探究了数值计算的一般过程和计算的稳定性。 1. 引言 数值计算是数学的一个重要分支,广泛应用于物理、金融、工程等领域。本次实验是对数值分析课程知识的实际应用,通过上机实现算法,探究数值计算的可靠性和误差分析。 2. 实验方法 本次实验中,我们实现了多种算法,包括: (1)牛顿迭代法求方程的根;

(2)高斯消元法求线性方程组的解; (3)最小二乘法拟合数据点; (4)拉格朗日插值法估计函数值; (5)梯形公式和辛普森公式求积分近似值。 对于每个算法,我们都进行了多组数值和不同参数的实验,并记录了相关数据和误差。在实验过程中,我们着重考虑了算法的可靠性和计算的稳定性。 3. 实验结果与分析 在实验中,我们得到了大量的实验数据和误差分析,通过对数据的展示和分析,我们得到了以下结论: (1)牛顿迭代法求解非线性方程的根能够对算法的初始值和迭代次数进行适当的调整,从而达到更高的稳定性和可靠性。

(2)高斯消元法求解线性方程组的解需要注意到矩阵的奇异性和精度的影响,从而保证计算的准确性。 (3)最小二乘法拟合数据点需要考虑到拟合的函数形式和数据的误差范围,采取适当的数据预处理和拟合函数的选择能够提高计算的准确性。 (4)拉格朗日插值法估计函数值需要考虑到插值点的选择和插值函数的阶数,防止出现龙格现象和插值误差过大的情况。 (5)梯形公式和辛普森公式求积分近似值需要考虑到采样密度和拟合函数的选择,从而保证计算的稳定性和收敛速度。 4. 结论 通过本次实验的分析和总结,我们得到了深入的认识和理解数值计算的一般过程和算法的稳定性和可靠性,对于以后的数值计算应用也提供了一定的指导和参考。

清华大学贾仲孝老师高等数值分析报告第二次实验

高等数值分析第二次实验作业

T1.构造例子特征值全部在右半平面时, 观察基本的Arnoldi 方法和GMRES 方法的数值性态, 和相应重新启动算法的收敛性. Answer: (1) 构造特征值均在右半平面的矩阵A : 根据实Schur 分解,构造对角矩阵D 由n 个块形成,每个对角块具有如下形式,对应一对特 征值i i i αβ± i i i i i S αββα-⎛⎫ = ⎪⎝⎭ 这样D=diag(S 1,S 2,S 3……S n )矩阵的特征值均分布在右半平面。生成矩阵A=U T AU ,其中U 为 正交阵,则A 矩阵的特征值也均在右半平面。不妨构造A 如下所示: 2211112222 /2/2/2/2N N A n n n n ⨯-⎛⎫ ⎪ ⎪ ⎪- ⎪ = ⎪ ⎪ ⎪ - ⎪ ⎪⎝ ⎭ 由于选择初值与右端项:x0=zeros(2*N,1);b=ones(2*N,1); 则生成矩阵A 的过程代码如下所示: N=500 %生成A 为2N 阶 A=zeros(2*N); for a=1:N A(2*a-1,2*a-1)=a; A(2*a-1,2*a)=-a; A(2*a,2*a-1)=a; A(2*a,2*a)=a; end U = orth(rand(2*N,2*N)); A1 = U'*A*U; (2) 观察基本的Arnoldi 和GMRES 方法 编写基本的Arnoldi 函数与基本GMRES 函数,具体代码见附录。 function [x,rm,flag]=Arnoldi(A,b,x0,tol,m) function [x,rm,flag]=GMRES(A,b,x0,tol,m) 输入:A 为方程组系数矩阵,b 为右端项,x0为初值,tol 为停机准则,m 为人为限制的最大步数。 输出:x 为方程的解,rm 为残差向量,flag 为解是否收敛的标志。 外程序如下所示: e=1e-6; m=700;

数值分析上机实验报告

数值分析上机实验报告 数值分析上机实验报告 一、引言 数值分析是一门研究利用计算机进行数值计算的学科。通过数值分析,我们可 以使用数学方法和算法来解决实际问题,例如求解方程、插值和逼近、数值积 分等。本次上机实验旨在通过编程实现数值计算方法,并应用于实际问题中。二、实验目的 本次实验的目的是掌握数值计算方法的基本原理和实现过程,加深对数值分析 理论的理解,并通过实际应用提高编程能力。 三、实验内容 1. 数值求解方程 首先,我们使用二分法和牛顿迭代法分别求解非线性方程的根。通过编写程序,输入方程的初始值和精度要求,计算得到方程的根,并与理论解进行对比。 2. 数值插值和逼近 接下来,我们使用拉格朗日插值和最小二乘法进行数据的插值和逼近。通过编 写程序,输入给定的数据点,计算得到插值多项式和逼近多项式,并绘制出插 值曲线和逼近曲线。 3. 数值积分 然后,我们使用梯形法和辛普森法进行定积分的数值计算。通过编写程序,输 入被积函数和积分区间,计算得到定积分的近似值,并与解析解进行比较。 四、实验步骤 1. 数值求解方程

(1)使用二分法求解非线性方程的根。根据二分法的原理,编写程序实现二分法求解方程的根。 (2)使用牛顿迭代法求解非线性方程的根。根据牛顿迭代法的原理,编写程序实现牛顿迭代法求解方程的根。 2. 数值插值和逼近 (1)使用拉格朗日插值法进行数据的插值。根据拉格朗日插值法的原理,编写程序实现数据的插值。 (2)使用最小二乘法进行数据的逼近。根据最小二乘法的原理,编写程序实现数据的逼近。 3. 数值积分 (1)使用梯形法进行定积分的数值计算。根据梯形法的原理,编写程序实现定积分的数值计算。 (2)使用辛普森法进行定积分的数值计算。根据辛普森法的原理,编写程序实现定积分的数值计算。 五、实验结果与分析 1. 数值求解方程 通过二分法和牛顿迭代法,我们成功求解了给定非线性方程的根,并与理论解进行了对比。结果表明,二分法和牛顿迭代法都能够较好地求解非线性方程的根,但在不同的问题中,二者的收敛速度和精度可能会有所差异。 2. 数值插值和逼近 通过拉格朗日插值和最小二乘法,我们成功进行了数据的插值和逼近,并绘制出了插值曲线和逼近曲线。结果表明,拉格朗日插值法能够准确地通过给定的

数值分析上机实践报告

数值分析上机实践报告 一、实验目的 本实验的目的是通过编写数值分析程序,掌握解决数学问题的数值计算方法,并通过实际应用来检验其有效性和准确性。具体包括以下几个方面的内容: 1.掌握二分法和牛顿迭代法的基本原理和实现方法; 2.熟悉利用矩阵的LU分解和追赶法解线性方程组的过程; 3.通过具体的实例应用,比较不同方法的计算效果和精度。 二、实验内容 本实验分为三个部分,每个部分包括一个具体的数学问题和相应的数值计算方法。 1.问题一:求方程f(x)=x^3-5x^2+10x-80=0的近似解。 在问题一中,我们通过二分法和牛顿迭代法来求解方程的近似解,并比较两种方法的精度和收敛速度。 2.问题二:用LU分解解线性方程组。 问题二中,我们通过矩阵的LU分解方法解线性方程组Ax=b,然后和直接用追赶法解线性方程组进行对比,验证LU分解的有效性和准确性。 三、实验结果及分析 1.问题一的结果分析:

通过二分法和牛顿迭代法求解方程f(x)=x^3-5x^2+10x-80=0的近似解,得到的结果如下: 从结果来看,两种方法得到的近似解均与真实解x≈5非常接近。但是,通过比较可以发现,牛顿迭代法的计算速度比二分法更快,迭代的次 数更少。因此,在需要高精度近似解的情况下,牛顿迭代法是一个更好的 选择。 2.问题二的结果分析: 通过LU分解和追赶法解线性方程组Ax=b,得到的结果如下: -用LU分解解线性方程组得到的结果为x1≈1.0,x2≈2.0,x3≈3.0; -用追赶法解线性方程组得到的结果为x1≈1.0,x2≈2.0,x3≈3.0。 从结果来看,两种方法得到的结果完全一致,而且与真实解非常接近。这表明LU分解方法和追赶法均可以有效地解决线性方程组问题。但是, 在实际应用中,当方程组规模较大时,LU分解方法的计算复杂度较高, 因此追赶法更加适用。 四、实验总结 通过本实验,我掌握了二分法和牛顿迭代法以及LU分解和追赶法的 基本原理和实现方法。通过具体的数学问题实例应用,我比较了不同方法 的计算效果和精度,得出以下结论: 1.在求解函数的近似解时,牛顿迭代法相对于二分法具有更快的收敛 速度和更高的计算精度; 2.在解决线性方程组问题时,LU分解方法在计算准确性方面与追赶 法相当,但在处理较大规模的问题时,计算复杂度较高,追赶法更适合。

数值分析的实验报告

数值分析的实验报告 数值分析的实验报告 导言 数值分析是一门研究数值计算方法和数值计算误差的学科,它在科学计算、工 程技术和社会经济等领域具有广泛的应用。本实验旨在通过对数值分析方法的 实际应用,验证其有效性和可靠性。 实验一:方程求根 方程求根是数值分析中的基础问题之一。我们选取了一个非线性方程进行求解。首先,我们使用二分法进行求解。通过多次迭代,我们得到了方程的一个近似解。然后,我们使用牛顿法进行求解。与二分法相比,牛顿法的收敛速度更快,但需要选择一个初始点。通过比较两种方法的结果,我们验证了牛顿法的高效性。 实验二:插值与拟合 插值与拟合是数值分析中常用的数据处理方法。我们选取了一组实验数据,通 过拉格朗日插值法和最小二乘法进行插值和拟合。通过对比两种方法的拟合效果,我们验证了最小二乘法在处理含有噪声数据时的优势。同时,我们还讨论 了插值和拟合的精度与样本点数量之间的关系。 实验三:数值积分 数值积分是数值分析中的重要内容之一。我们选取了一个定积分进行计算。首先,我们使用复化梯形公式进行积分计算。通过增加分割区间的数量,我们得 到了更精确的结果。然后,我们使用复化辛普森公式进行积分计算。与复化梯 形公式相比,复化辛普森公式具有更高的精度。通过比较两种方法的结果,我

们验证了复化辛普森公式的优越性。 实验四:常微分方程数值解 常微分方程数值解是数值分析中的重要应用之一。我们选取了一个常微分方程 进行数值解的计算。首先,我们使用欧拉方法进行数值解的计算。然后,我们 使用改进的欧拉方法进行数值解的计算。通过比较两种方法的结果,我们验证 了改进的欧拉方法的更高精度和更好的稳定性。 实验五:线性方程组的数值解法 线性方程组的数值解法是数值分析中的重要内容之一。我们选取了一个线性方 程组进行数值解的计算。首先,我们使用高斯消元法进行数值解的计算。然后,我们使用追赶法进行数值解的计算。通过比较两种方法的结果,我们验证了追 赶法在求解三对角线性方程组时的高效性。 结论 通过本次实验,我们对数值分析的基本方法和应用有了更深入的了解。我们验 证了方程求根、插值与拟合、数值积分、常微分方程数值解以及线性方程组的 数值解法的有效性和可靠性。同时,我们也意识到了数值分析中的误差来源和 控制方法的重要性。通过不断学习和实践,我们将能够更好地应用数值分析方 法解决实际问题。数值分析的研究和应用将不断推动科学技术的发展和进步。

数值分析matlab实验报告

数值分析matlab实验报告 数值分析MATLAB实验报告 引言: 数值分析是一门研究利用计算机进行数值计算和解决数学问题的学科。它在科学计算、工程技术、金融等领域中有着广泛的应用。本实验旨在通过使用MATLAB软件,探索数值分析的基本概念和方法,并通过实际案例来验证其有效性。 一、插值与拟合 插值和拟合是数值分析中常用的处理数据的方法。插值是通过已知数据点之间的函数关系,来估计未知数据点的值。拟合则是通过一个函数来逼近一组数据点的分布。 在MATLAB中,我们可以使用interp1函数进行插值计算。例如,给定一组离散的数据点,我们可以使用线性插值、多项式插值或样条插值等方法,来估计在两个数据点之间的未知数据点的值。拟合则可以使用polyfit函数来实现。例如,给定一组数据点,我们可以通过最小二乘法拟合出一个多项式函数,来逼近这组数据的分布。 二、数值积分 数值积分是数值分析中用于计算函数定积分的方法。在实际问题中,往往无法通过解析的方式求得一个函数的积分。这时,我们可以使用数值积分的方法来近似计算。 在MATLAB中,我们可以使用quad函数进行数值积分。例如,给定一个函数和积分区间,我们可以使用quad函数来计算出该函数在给定区间上的定积分

值。quad函数使用自适应的方法,可以在给定的误差限下,自动调整步长,以保证积分结果的精度。 三、常微分方程数值解 常微分方程数值解是数值分析中研究微分方程数值解法的一部分。在科学和工程中,我们经常遇到各种各样的微分方程问题。而解析求解微分方程往往是困难的,甚至是不可能的。因此,我们需要使用数值方法来近似求解微分方程。在MATLAB中,我们可以使用ode45函数进行常微分方程数值解。例如,给定一个微分方程和初始条件,我们可以使用ode45函数来计算出在给定时间范围内的解。ode45函数使用龙格-库塔方法,可以在给定的误差限下,自动调整步长,以保证数值解的精度。 结论: 本实验通过使用MATLAB软件,探索了数值分析的基本概念和方法,并通过实际案例验证了其有效性。插值与拟合、数值积分和常微分方程数值解是数值分析中常用的技术,它们在科学计算和工程技术中有着广泛的应用。通过学习和掌握这些方法,我们能够更好地处理实际问题,并得到准确的数值结果。数值分析作为一门重要的学科,为我们解决实际问题提供了强有力的工具和方法。希望通过本实验,能够增进对数值分析的理解和应用能力。

数值分析上机作业

第二次上机作业 一. 任务: 用MATLAB 语言编写连续函数最佳平方逼近的算法程序(函数式M 文件)。并用此 程序进行数值试验,写出计算实习报告。 二. 程序功能要求: 在后面的附一leastp.m 的基础上进行修改,使其更加完善。要求算法程序可以适应不同的具体函数,具有一定的通用性。所编程序具有以下功能: 1. 用Lengendre 多项式做基,并适合于构造任意次数的最佳平方逼近多项式。 可利用递推关系 0112()1,()()(21)()(1)()/2,3,..... n n n P x P x x P x n xP x n P x n n --===---⎡⎤⎣⎦= 2. 被逼近函数f(x)不用内联函数构造,而改用M 文件建立数学函数。这样,此程序可通过修 改建立数学函数的M 文件以适用不同的被逼近函数(要学会用函数句柄)。 3. 要考虑一般的情况]1,1[],[)(+-≠∈b a x f 。因此,程序中要有变量代换的功能。 4. 计算组合系数时,计算函数的积分采用变步长复化梯形求积法(见附三)。 5. 程序中应包括帮助文本和必要的注释语句。另外,程序中也要有必要的反馈信息。 6. 程序输入:(1)待求的被逼近函数值的数据点0x (可以是一个数值或向量) (2)区间端点:a,b 。 7. 程序输出:(1)拟合系数:012,,,...,n c c c c (2)待求的被逼近函数值 00001102200()()()()()n n s x c P x c P x c P x c P x =+++ + 三:数值试验要求: 1. 试验函数:()cos ,[0,4]f x x x x =∈+;也可自选其它的试验函数。 2. 用所编程序直接进行计算,检测程序的正确性,并理解算法。 3. 分别求二次、三次、。。。最佳平方逼近函数)x s (。 4. 分别作出逼近函数)x s (和被逼近函数)(x f 的曲线图进行比较。 (分别用绘图函数plot(0x ,s(0x ))和fplot(‘x cos x ’,[x 1 x 2,y 1,y 2])) 四:计算实习报告要求: 1.简述方法的基本原理,程序功能,使用说明。 2.程序中要加注释。 3.对程序中的主要变量给出说明。 4.附源程序及计算结果。

数值分析实验报告2——Runge现象

数值分析课程实验报告——插值逼近 题目一.Runge 函数的插值 1. Runge 函数 Runge 函数的表达式为: 2 1()125R x x =+ 其在[-1,1]区间上的函数图像如图1.1。在课程学习中我们知道,对Runge 函数进行高次插值时有可能在两端出现不收敛的情况,即Runge 现象。下面将分别用四种不同的插值方法在[-1,1]区间上对Runge 函数进行插值,并分析是否产生Runge 现象,比较插值效果。 图1.1.Runge 函数在[-1,1]区间的函数图像 2.Newton 插值 首先根据课本上的Newton 插值算法进行编程(代码略)。核心思想就是用符号变量进行中间运算,以便将最终的插值函数用符号表达式表示出来,并进一步生成图像。此处插值节点选择为等距插值节点,即:

0.1(0,1,2,,)i x ih i =-+= (20) 其中h=0.1。插值曲线与原曲线的对比如图1.2(蓝色为原曲线,红色为插值曲线)。从图中看出,在区间中部,二者吻合较好;但在区间两端二者则产生了明显偏差,甚至可以达到一个非常大的数值(e20量级)。因此,在等距节点的20次Newton 插值下,产生了明显的Runge 现象。 图1.2.Newton 插值曲线与原曲线对比 3. Lagrange 插值 此处同样是根据Lagrange 插值的具体算法进行编程。但插值节点不再是等距分布,而是如下形式: 21cos()(0,1,2,,)42 i i x i π+==…20 插值曲线与原曲线的对比如图1.3(蓝色为原曲线,红色为插值曲线)。从图中看出,插值曲线与原曲线吻合的很好,没有产生明显的Runge 现象。对比产生了明显Runge 现象的20次Newton 插值,Lagrange 插值的最高次数虽然也是20,但由于此处的插值节点不是等距分布的(事实上,此处采用的插值节点正是Chebyshev 多项式的零点),而是中间疏两边密,因此两侧较密的节点很好地抑制了Runge 现象。

数值分析实验报告 matlab

数值分析实验报告 实验背景 数值分析是研究利用数值方法解决数学问题的一门学科。在实际科学计算中, 很多问题往往无法通过解析方法得到精确解,因此需要借助数值分析方法来近似求解。本实验使用Matlab软件来进行数值分析实验。 实验目的 本实验旨在通过数值方法解决给定问题,并验证结果的准确性和有效性。 实验步骤 1.导入数据:首先,我们需要从外部文件或手动输入数据来进行数值分 析。在Matlab中,可以使用load()函数或手动输入数据来导入数据。 2.数据预处理:对导入的数据进行预处理,包括数据清洗、缺失值处理、 异常值处理等。通过Matlab提供的函数和方法,可以方便地进行数据预处理。 3.数据分析:根据实验要求,使用合适的数值方法进行数据分析。常见 的数值方法包括插值、拟合、积分、微分等。根据具体情况选择合适的方法,并使用Matlab提供的相关函数进行计算。 4.结果可视化:将分析得到的结果可视化展示,以便更直观地理解数据 分析的结果。在Matlab中,可以使用plot、bar、histogram等函数进行数据可视化。 5.结果验证:对分析结果进行验证,比较数值方法得到的近似解与理论 解的差异。通过对比分析,可以评估数值方法的准确性和有效性。 6.结果讨论:对实验结果进行讨论和总结。分析实验中遇到的问题、方 法的优缺点,并提出改进的建议。 实验结果 根据实验步骤,我们得到了以下实验结果: 1. 经过数据预处理,得到了清洗后 的数据集。 2. 使用插值方法对缺失值进行填充,并对异常值进行处理。 3. 应用拟 合方法,得到了拟合曲线,并计算了相关的拟合误差。 4. 使用数值积分方法,计 算了给定函数的积分值。 5. 进行结果可视化,展示了数据分析的结果。

数值分析实验报告2

数值分析实验报告2

实验报告 一、实验名称 复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式及自适应辛普森积分。 二、实验目的及要求 1. 掌握复合梯形求积计算积分、复合辛普森求积计算积分、龙贝格求积计算积分和自适应辛普森积分的基本思路和步骤. 2. 培养Matlab 编程与上机调试能力. 三、实验环境 计算机,MATLAB 软件 四、实验内容 1.用不同数值方法计算积分9 4ln 1 0-=⎰xdx x 。 (1)取不同的步长h 。分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h 的函数,并与积分精确指比较两个公式的精度,是否存在一个最小的h ,使得精度不能再被改善。 (2)用龙贝格求积计算完成问题(1)。 (3)用自适应辛普森积分,使其精度达到10-4。 五、算法描述及实验步骤 1.复合梯形公式 将区间[a,b]划分为n 等份,分点x k =a+ah,h=(b-a)/h,k=0,1,...,n ,在每个 子区间[x k ,x k +1](k=0,1,...,n-1)上采用梯形公式(1.1),得 )]()([2 )(b f a f a b dx x f b a +-≈⎰ (1.1) )]()(2)([2)]()([211 110b f x f b f h x f x f h T n k k k n k k n ++=+=∑∑-=+-= (1.2) ),(),(12 )(''2b a f h a b f R n ∈--=ηη (1.3) 其中Tn 称为复合梯形公式,Rn 为复合梯形公式的余项。 2.复合辛普森求积公式

七、总结 通过本次学习Matlab,掌握了复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式及自适应辛普森积分的程序和算法,为以后处理数据提供一种更加简便,准确的方法。 八、附录(源程序清单) 1.复合梯形 function s=fuhetixing(f,a,b,n) %f为被积分函数 %a,b是积分上下限 %n是子区间个数 %s是积分值 h=(b-a)/n; s=0; for k=1:(n-1) x=a+h*k; s=s+feval('f',x); end format long s=h*(feval('f',a)+feval('f',b))/2+h*s; 2.复合辛普森 function S=Comsimpson(f,a,b,n) %f为被积分函数 %a,b是积分上下限 %n是子区间个数 %s是积分值 h=(b-a)/(2*n); s1=0;s2=0; for k=1:n x=a+h*(2*k-1); s1=s1+feval('f',x); end for k=1:(n-1) x=a+h*2*k; s2=s2+feval('f',x); end format long S=h*(feval('f',a)+feval('f',b)+4*s1+2*s2)/3;

数值分析实验报告

《数值分析》 实验报告 班级: 姓名: 学号: 指导老师:

实验基本要求 一、上机前的准备工作 1、复习和掌握与本次实验有关的教学内容。 2、根据本次实验要求,在纸上编写算法及上机的程序,并经过人工模拟运行检验,减少不必要的错误,提高上机效率。切忌不编程序、不作人工检查就进行程序输入,这只能使上机调试的难度增加,甚至可能带来学习自信心的下降,影响后续课程的学习。 二、上机实验步骤 1、启动开发环境; 2、建立源程序文件,输入源程序; 3、编译产生目标程序,连接生成可执行程序,运行程序,输出结果; 4、对数值计算结果进行误差分析,讨论数值算法的收敛性与稳定性; 5、整理实验报告。 三、实验报告 实验报告是记录实验工作全过程的技术文档,实验报告的撰写是科学技术工作的一个组成部分。《数值分析》实验报告包括下列要求: 1、实验原理; 2、实验内容和要求; 3、数值算法描述,包括数据输入、数据处理和数据输出; 4、算法的实现 (1)给出具体的计算实例, (2)经调试正确的源程序清单, (3)对具体的数值例子给出数值结果; 5、计算结果的误差分析,算法的收敛性与稳定性的讨论; 6、实验心得。

实验一、误差分析 一、实验目的 1、通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2、通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3、 通过上机计算,了解舍入误差所引起的数值不稳定性。 二、实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三、实验任务 对20,,2,1,0 =n ,计算定积分 ⎰+=1 05dx x x y n n . 算法1:利用递推公式 151--= n n y n y , 20,,2,1 =n , 取 ⎰≈-=+=100182322.05ln 6ln 5 1dx x y . 算法2:利用递推公式 n n y n y 5 1511-=- 1,,19,20 =n . 注意到

数值分析实验报告

实验2.1 多项式插值的振荡现象 实验目的: 在一个固定的区间上用插值逼近一个函数,显然Lagrange 插值中使用的节点越多,插 值多项式的次数就越高。我们自然关心插值多项式的次数增加时,Ln(x)是否也更加靠近被逼近的函数。Runge 给出的一个例子是极著名并富有启发性的。 实验容: 设区间[-1,1]上函数 f(x)=1/(1+25x 2)。 考虑区间[-1,1]的一个等距划分,分点为 x i = -1 + 2i/n ,i=0,1,2,…,n , 则拉格朗日插值多项式为 201()()125n n i i i L x l x x ==+∑. 其中,l i (x),i=0,1,2,…,n 是n 次Lagrange 插值基函数。 实验步骤与结果分析: 实验源程序 function Chap2Interpolation % 数值实验二:“实验2.1:多项式插值的震荡现象” % 输入:函数式选择,插值结点数 % 输出:拟合函数及原函数的图形 promps = {'请选择实验函数,若选f(x),请输入f,若选h(x),请输入h,若选g(x),请输入g:'}; titles = 'charpt_2'; result = inputdlg(promps,'charpt 2',1,{'f'}); Nb_f = char(result); if(Nb_f ~= 'f' & Nb_f ~= 'h' & Nb_f ~= 'g')errordlg('实验函数选择错误!');return;end result = inputdlg({'请输入插值结点数N:'},'charpt_2',1,{'10'}); Nd = str2num(char(result)); if(Nd <1)errordlg('结点输入错误!');return;end switch Nb_f case 'f' f=inline('1./(1+25*x.^2)'); a = -1;b = 1; case 'h' f=inline('x./(1+x.^4)'); a = -5; b = 5; case 'g' f=inline('atan(x)'); a = -5; b= 5; end x0 = linspace(a, b, Nd+1); y0 = feval(f, x0); x = a:0.1:b; y = Lagrange(x0, y0, x); fplot(f, [a b], 'co'); hold on; plot(x, y, 'b--'); xlabel('x'); ylabel('y = f(x) o and y = Ln(x)--'); %-------------------------------------------------------------------- function y=Lagrange(x0, y0, x);

相关主题
相关文档
最新文档