数值分析课设实验报告 多项式求解
数值分析实验报告
数值分析实验报告【引言】数值分析是一门研究利用计算机和数学方法解决实际问题的学科,它在工程、科学和经济领域中有着广泛的应用。
在这个实验报告中,我将分享我在数值分析实验中的一些发现和结果。
【实验目的】本次实验的目的是通过数值方法对给定的问题进行求解,并分析数值方法的精确性和稳定性。
我们选择了经典的插值和数值积分问题来进行实验。
【实验过程】在插值问题中,我使用了拉格朗日插值和样条插值两种方法。
通过使用已知的数据点,这些方法能够通过构造多项式函数来逼近原始函数,从而能够在未知点上进行预测。
通过比较两种插值方法的结果,我发现拉格朗日插值在低维数据上表现更好,而样条插值在高维数据上更能保持插值曲线的平滑性。
在数值积分问题中,我使用了复合梯形公式和复合辛普森公式来进行数值积分。
这两种方法可以将复杂的区间上的积分问题转化为对若干个小区间进行数值积分的问题。
实验结果表明,复合辛普森公式在使用相同的步长时,其数值积分结果更为精确。
【实验结果】我以一个实际问题作为例子来展示实验结果。
问题是计算半径为1的圆的面积。
通过离散化的方法,我将圆划分为多个小的扇形区域,并使用数值积分方法计算每个扇形的面积。
最后将每个扇形的面积相加,即可得到圆的近似面积。
通过调整离散化的精度,我发现随着扇形数量的增加,计算得到的圆的面积越接近真实的圆的面积。
在插值问题中,我选择了一段经典的函数进行插值研究。
通过选择不同的插值节点和插值方法,我发现当插值节点越密集时,插值结果越接近原函数。
同时,样条插值方法在高阶导数连续的情况下能够更好地逼近原始函数。
【实验总结】通过这次实验,我对数值分析中的插值和数值积分方法有了更深入的理解。
我了解到不同的数值方法在不同的问题中有着不同的适用性和精确度。
在实际应用中,我们需要根据具体问题选择合适的数值方法,并进行必要的数值计算和分析,以获得准确可靠的结果。
总的来说,数值分析作为一种重要的工具和方法,在科学研究和工程实践中具有广泛的应用,并且不断发展和创新。
数值分析综合实验报告
一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。
二、实验内容1. 插值方法(1)拉格朗日插值法:利用已知数据点构造多项式,以逼近未知函数。
(2)牛顿插值法:在拉格朗日插值法的基础上,通过增加基函数,提高逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,通过不断缩小区间来逼近根。
(2)Newton法:利用函数的导数信息,通过迭代逼近根。
(3)不动点迭代法:将方程转化为不动点问题,通过迭代逼近根。
3. 数值积分方法(1)矩形法:将积分区间等分,近似计算函数值的和。
(2)梯形法:将积分区间分成若干等分,用梯形面积近似计算积分。
(3)辛普森法:在梯形法的基础上,将每个小区间再等分,提高逼近精度。
三、实验步骤1. 拉格朗日插值法(1)输入已知数据点,构造拉格朗日插值多项式。
(2)计算插值多项式在未知点的函数值。
2. 牛顿插值法(1)输入已知数据点,构造牛顿插值多项式。
(2)计算插值多项式在未知点的函数值。
3. 方程求根方法(1)输入方程和初始值。
(2)选择求解方法(二分法、Newton法、不动点迭代法)。
(3)迭代计算,直到满足精度要求。
4. 数值积分方法(1)输入被积函数和积分区间。
(2)选择积分方法(矩形法、梯形法、辛普森法)。
(3)计算积分值。
四、实验结果与分析1. 插值方法(1)拉格朗日插值法:通过构造多项式,可以较好地逼近已知数据点。
(2)牛顿插值法:在拉格朗日插值法的基础上,增加了基函数,提高了逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,计算简单,但收敛速度较慢。
(2)Newton法:利用函数的导数信息,收敛速度较快,但可能存在数值不稳定问题。
(3)不动点迭代法:将方程转化为不动点问题,收敛速度较快,但可能存在初始值选择不当的问题。
3. 数值积分方法(1)矩形法:计算简单,但精度较低。
数值分析(计算方法)课程设计实验报告(附程序)
n=4 时,max[L(X)-h(X)]=0.4020;
n=8 时,max[L(X)-h(X)]=0.1708;
n=10 时,max[L(X)-h(X)]=0.1092。
图象分析: 从图象可以看出随着插值节点数的增加出现异常的摆动,中间能较好的接近 原函数,但两边却出现很大的误差。
(3).对定义在(-5,5)上的函数
程序代码 2:
x=[-1:0.2:1]; y=1./(1+25.*x.^2); x0=[-1:0.01:1]; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2);
plot(x0,y0,'--r'); hold on; plot(x0,y1,'-b'); x2=abs(y0-y1); max(x2) ; 程序代码3: n=3; for i=1:n x(i)=cos(((2.*i-1).*pi)./(2.*(n+1))); y(i)=1./(1+25.*x(i).*x(i)); end x0=-1:0.01:1; y0=lagrange(x,y,x0); y1=1./(1+25.*x0.^2); plot(x0,y0,'--r') hold on plot(x0,y1,'-b')
以 x1,x2,„,xn+1 为插值节点构造上述各函数的 Lagrange 插值多项式, 比较其 结果。
设计过程: 已知函数 f(x)在 n+1 个点 x0,x1,…,xn 处的函数值为 y0,y1,…,yn 。 求一 n 次多 项式函数 Pn(x),使其满足: Pn(xi)=yi,i=0,1,…,n. 解决此问题的拉格朗日插值多项式公式如下
《数学软件》实验报告-数据处理与多项式计算
附件二:实验项目列表附件三:实验报告(七)系:专业:年级:姓名:学号:实验课程:实验室号:_ 实验设备号:实验时间:指导教师签字:成绩:1. 实验项目名称:数据处理与多项式计算2. 实验目的和要求1.掌握利数据统计和分析的方法2.掌握数值插值与曲线拟合的方法及其应用3.掌握多项式的常用运算3. 实验使用的主要仪器设备和软件方正商祺N260微机;MATLAB7. 0或以上版本4. 实验的基本理论和方法(1)rand函数(2)均值:mean(x)(3)求和:sum(x)(4)方差:std(A,flag,dim)(5)最大值函数:y=max(x),[y,k]=max(x),[Y,U]=max(A,[],dim)(6)最小值函数:y=min(x),[y,u]=min(x),[Y,U]=min(A,[],dim)(7)length函数(8)find函数(9)sort函数:[Y,I]=sort(A,dim)(10)样条插值:Y1=interp1(X,Y,X1,’spline’)(11)polyfit函数:[P,S]=polyfit(X,Y,m)(12)plot函数(13)多项式求和(14)求根函数:x=roots(A)(15)多项式求值:y=polyval(P,X), y=polyvalm(P,X)5. 实验内容与步骤(描述实验中应该做什么事情,如何做等,实验过程中记录发生的现象、中间结果、最终得到的结果,并进行分析说明)(包括:题目,写过程、答案)题目:1.利用matlab提供的rand函数生成30000个符合均匀分布的随机数,然后检验随机数的性质;(1)均值和标准方差。
(2)最大元素和最小元素。
(3)大于0.5的随机数个数占总数的百分比。
function f1x=rand(30000,1);disp('均值:');M=mean(x)disp('标准方差:');S=std(x,0,1)disp('最大元素:');MAX=max(x)disp('最小元素:');MIN=min(x)disp('百分比');a=length(find(x>0.5));X=a/30000>> f1均值:M =0.501标准方差:S =0.28946最大元素:MAX =0.99998最小元素:MIN =3.1508e-005百分比X =0.498532.将100个学生5门功课的成绩存入矩阵P中,进行如下处理。
数值分析实验报告--实验2--插值法
1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。
龙格(Runge )给出一个例子是极著名并富有启发性的。
设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。
(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。
(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。
1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。
1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。
Matlab 脚本文件为Experiment2_1_1fx.m 。
可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。
数值分析实验报告
实验一:拉格朗日插值法实验目的1学习和掌握拉格朗日插值多项式。
2.运用拉格朗日插值多项式进行计算。
2.实验过程作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)算法步骤已知:某些点的坐标以及点数。
输入:条件点数以及这些点的坐标。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值。
程序流程:(1)输入已知点的个数;(2)分别输入已知点的X 坐标;(3)分别输入已知点的Y 坐标;程序如下:#include <iostream>#include <conio.h>#include <malloc.h>float lagrange(float *x,float *y,float xx,int n){ int i,j; float *a,yy=0.0; /*a a=(float*)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){ a[i]=y[i]; for(j=0;j<=n-1;j++)if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i];}free(a); return yy; }int main(){ int i; int n; float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n<=0) { printf("Error! getch();return 1; }for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); }printf("\n"); for(i=0;i<=n-1;i++) { } The value of n must in (0,20).");printf("y[%d]:",i);scanf("%f",&y[i]); printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); }举例如下:已知当x=1,-1,2 时f(x)=0,-3,4,求f(1.5)的值。
数值分析实验报告
数值分析实验报告
一、实验背景
本实验主要介绍了数值分析的各种方法。
在科学计算中,为了求解一
组常微分方程或一些极限问题,数值分析是一种有用的方法。
数值分析是
一种运用计算机技术对复杂模型的问题进行数学分析的重要手段,它利用
数学模型和计算机程序来解决复杂的数学和科学问题。
二、实验内容
本实验通过MATLAB软件,展示了以下几种数值分析方法:
(1)拉格朗日插值法:拉格朗日插值法是由法国数学家拉格朗日发
明的一种插值方法,它可以用来插值一组数据,我们使用拉格朗日插值法
对给定的点进行插值,得到相应的拉格朗日多项式,从而计算出任意一个
点的函数值。
(2)最小二乘法:最小二乘法是一种常用的数据拟合方法,它可以
用来拟合满足一定函数的点的数据,它的主要思想是使得数据点到拟合曲
线之间的距离的平方和最小。
(3)牛顿插值法:牛顿插值法是一种基于差商的插值方法,它可以
用来插值一组数据,可以求得一组数据的插值函数。
(4)三次样条插值:三次样条插值是一种基于三次样条的插值方法,它可以用来对一组数据进行插值,可以求得一组数据的插值函数。
三、实验步骤
1.首先启动MATLAB软件。
数值分析实验报告5篇
1.69376699767424 0.92310666706964 0.08471614569741 0.40804026409411
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
讨论:
利用这种方法进行这类实验,可以很精确的扰动敏感性的一般规律。即 当对扰动项的系数越来越小时,对其多项式扰动的结果也就越来越小, 即扰动敏感性与扰动项的系数成正比,扰动项的系数越大,对其根的扰 动敏感性就越明显,当扰动的系数一定时,扰动敏感性与扰动的项的幂 数成正比,扰动的项的幂数越高,对其根的扰动敏感性就越明显。
解线性方程组的直接方法
实验 (主元的选取与算法的稳定性) 问题提出:Gauss消去法是我们在线性代数中已经熟悉的。但由于计算 机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保 Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值 算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它 却是数值分析中十分典型的问题。 实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的 Gauss消去过程。 实验要求: (1)取矩阵,则方程有解。取n=10计算矩阵的条件数。让程序自动选 取主元,结果如何? (2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最 小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去 过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。 (3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析 不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元
数值分析报告插值多项式
插值多项式一、实验目的:熟悉插值多项式构造,掌握数据插值的思想方法,了解用内部函数和掌握编程方法解决实验问题;了解龙格现象,通过拉格朗日插值、分段线性插值以及三次样条插值进行插值效果的比较和分析;掌握上机编程与调试能力。
二、实验内容:给定被插函数()()s i n ,s i n ,c o s x x fx x x e x x =插值区间为[1,8],节点为,1,2...,8i x i i ==,分别用分段线性和Hermite 多项式进行插值。
并和7次Lagrange 或Newton 多项式进行比较。
三、实验要求:1.分别用内部函数和编程实现。
2.可以自拟实验题,要求同上。
四、实验程序及结果:方法一:内部函数法函数:Interpolation InterpolatingPolynomialTable[t[i]=i,{i,1,8}];Table[f[i]=Sin[t[i]]/t[i],{i,1,8}];Data=Table[{t[i],f[i]},{i,1,8}];a0=Interpolation[Data,InterpolationOrder 1];a1=InterpolatingPolynomial[Data,x]//Expand;c0=Plot[a0[x],{x,1,8},PlotStyle {Black,Thick},Frame True];c1=Plot[a1,{x,1,8},PlotStyle {Red,Thick},Frame True];b=Graphics[{PointSize[0.02],Black,Point[Data]}];d=Table[Plot[Evaluate[Sin[x]/x],{x,t[i],t[i+1]},PlotStyle {Blue,Thickness[0.001]}],{i,1,7}];Print["被插函数(蓝)、7次多项式差值(红)与分段线性差值(黑)如下图:"] Show[b,c1,c0,d,AspectRatio 2/3,Frame True]被插函数(蓝)、7次多项式差值(红)与分段线性差值(黑)如下图:方法二:编程实现法h[i_]:=t[i+1]-t[i];θ[x_,i_]:=(x-t[i])/h[i];Table[t[i]=i,{i,1,8}];l[x_,n_,xi_,xj_]:=Product[(x-xi)[[i]],{i,1,n}]/Product[(xj-xi)[[i]],{i,1,n}];L8[x_]:=l[x,7,{t[2],t[3],t[4],t[5],t[6],t[7],t[8]},t[1]]*f[1]+l[x,7,{t[1],t[3],t[4],t[5],t[6],t[7],t [8]},t[2]]*f[2]+l[x,7,{t[1],t[2],t[4],t[5],t[6],t[7],t[8]},t[3]]*f[3]+l[x,7,{t[1],t[2],t[3],t[5],t[6 ],t[7],t[8]},t[4]]*f[4]+l[x,7,{t[1],t[2],t[3],t[4],t[6],t[7],t[8]},t[5]]*f[5]+l[x,7,{t[1],t[2],t[3],t [4],t[5],t[7],t[8]},t[6]]*f[6]+l[x,7,{t[1],t[2],t[3],t[4],t[5],t[6],t[8]},t[7]]*f[7]+l[x,7,{t[1],t[2 ],t[3],t[4],t[5],t[6],t[7]},t[8]]*f[8];PL[x_,i_]:=f[i](1-θ[x,i])+f[i+1]θ[x,i];Table[f[i]=Sin[t[i]]/t[i],{i,1,8}];f[x_]:=Sin[x]/x;s1=Table[fig[i]=Plot[Evaluate[(PL[x,i]-Sin[x]/x)],{x,t[i],t[i+1]},PlotStyle →{Thickness[0.005],Blue}],{i,1,7}];s2=Table[fig[i]=Plot[Evaluate[L8[x]-Sin[x]/x],{x,t[i],t[i+1]},PlotStyle→{Thickness[0.00 5],Red}],{i,1,7}];k=Table[fig[i]=Plot[Evaluate[PL[x,i]],{x,t[i],t[i+1]},PlotStyle→{Thickness[0.005],Black }],{i,1,7}];g=Table[fig[i]=Plot[Evaluate[L8[x]],{x,t[i],t[i+1]},PlotStyle→{Thickness[0.005],Red}], {i,1,7}];s=Table[fig[i]=Plot[Evaluate[Sin[x]/x],{x,t[i],t[i+1]},PlotStyle→{Blue,Thickness[0.015] }],{i,1,7}];Show[s,g,k,Axes→False,PlotRange→All,Frame→True]Show[s1,s2,Axes→False,PlotRange→All,Frame→True]h[i_]:=t[i+1]-t[i];θ[x_,i_]:=(x-t[i])/h[i];Table[t[i]=i,{i,1,8}];PH[x_,i_]:=f[i](2θ[x,i]^3-3θ[x,i]^2+1)+d[i]h[i](θ[x,i]^3-2θ[x,i]^2+θ[x,i])+(θ[x,i]^3-θ[x,i ]^2)h[i]d[i+1]+f[i+1](-2θ[x,i]^3+3θ[x,i]^2);PL[x_,i_]:=f[i](1-θ[x,i])+f[i+1] θ[x,i];Table[f[i]=Sin[t[i]]/t[i],{i,1,8}];f[x_]:=Sin[x]/x;Table[d[i]=(t[i]*Cos[t[i]]-Sin[t[i]])/t[i]^2,{i,1,8}];s1=Table[Plot[Evaluate[(PL[x,i]-Sin[x]/x)],{x,t[i],t[i+1]},PlotStyle→{Thickness[0.005], Black}],{i,1,7}];s2=Table[Plot[Evaluate[PH[x,i]-Sin[x]/x],{x,t[i],t[i+1]},PlotStyle→{Thickness[0.005],G reen}],{i,1,7}];k=Table[Plot[Evaluate[PL[x,i]],{x,t[i],t[i+1]},PlotStyle→{Thickness[0.005],Black}],{i,1, 7}];g=Table[Plot[Evaluate[PH[x,i]],{x,t[i],t[i+1]},PlotStyle→{Thickness[0.006],Green}],{i,1 ,7}];s=Table[Plot[Evaluate[Sin[x]/x],{x,t[i],t[i+1]},PlotStyle→{Blue,Thickness[0.003]}],{i,1, 7}];Show[g,k,s,Axes→False,PlotRange→All,Frame→True]Show[s1,s2,Axes→False,PlotRange→All,Frame→True]五、实验总结:通过本次实验我加深了对分段线性插值、Hermite多项式插值、拉格朗日插值和牛顿插值的了解,也知道了这几种插值方法的优缺点。
数值分析课设实验报告 多项式求解
《数值分析》课程设计任务书根据课设任务书要求,我们的任务是计算出给定的任意的多项式方程:nn n n xa xa x a x a a ++++--112210 根的值。
在此我们选用牛顿迭代法进行计算。
但为了避免重根的问题,我们在得到一个给定函数后,先要将其函数图像画出。
在图像中我们能清晰的看出每个根的大概位置,再选取其中一个根的近似值记为初始值,之后确定精度和误差界后就可以计算这个根的值了。
计算中我们将用到三个M 文件,分别存放牛顿迭代函数、原函数及导函数。
其中原函数和到函数是以迭代形式表现出来的,以此来表示任意阶多项式。
这个模型选取依次求根的方式,能将根的精确度进一步提高,因此适于解决小型多项式的求根问题。
关键字:牛顿迭代函数、多项式、原函数、导函数一、问题的提出————————————————————————4二、模型的假设与符号说明———————————————————5三、问题的分析、模型的建立和测试求解————————————6问题分析———————————————————————6模型建立———————————————————————6测试数据的结果分析——————————————————8四、模型的优缺点和评价————————————————————11五、课设总结—————————————————————————12六、参考文献—————————————————————————13七、附录———————————————————————————14一、问题的提出1.1问题的背景在数学的学习过程中,我们会经常遇到求解多项式的问题,一般情况下我们只能用待定系数法求解这些方程的根,如何能更快捷的利用计算机解决这些问题呢。
下面我们将利用数值分析中的一些方法解决这个问题。
1.2问题的提出任意给定一个多项式:nn n n xa xa x a x a a ++++--112210求出它的根。
二、模型的假设与符号说明2.1 模型的假设2.1.1 假设多项式是有限次的2.1.2 假设某根的区间,及近似值可由图像看出2.1.3 假设每个根能分别求出,由此可不用考虑冲根问题2.2 符号说明(1) f 非线性函数(2) dff的微商(3) 0p 初始值(4) delta给定的允许误差 (5) 1max迭代的最大次数(6) 1p牛顿法求出的方程的近似值(7) err0p 的误差估计(8) k 迭代次数(9) y )(1p f y =(10) A 给定方程的系数矩阵 (11) B给定方程导函数系数矩阵(12) b系数矩阵的列数(13) a 系数矩阵的行数(14)1y)(1x df y =三、 问题的分析、模型的建立和测试求解3.1 对问题的分析根据上文问题的提出可知,我们要对给定的任意多项式:nn n n xa xa x a x a a ++++--112210求解。
数值分析实验报告
数值实验题1实验1.1 病态问题实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。
对数值方法的研究而言,所谓坏问题是指问题本身对扰动敏感,反之属于好问题。
本实验通过对一个高次多项式方程的求解,初步认识病态问题。
实验内容:考虑一个高次的代数多项式201()(1)(2)(20)()k p x x x x x k ==---=-∏ (E.1.1)显然该多项式的全部根为1,2,…,20,共计20个,且每个根都是单重的(也称为简单的)。
现考虑该多项式的一个扰动 19()0p x x ε+=, (E.1.2)其中,ε是一个非常小的数。
这相当于是对方程(E.1.1)中x 19的系数作一个小的扰动。
比较方程(E.1.1)和方程(E.1.2)根的差别,从而分析方程(E.1.1)的解对扰动的敏感性。
实验步骤与结果分析:(一) 实验源程序function t_charpt1_1% 数值实验1.1病态问题% 输入:[0 20]之间的扰动项及小的扰动常数 % 输出:加扰动后得到的全部根 clcresult=inputdlg({'请输入扰动项:在[0 20]之间的整数:'},'charpt 1_1',1,{'19'}); Numb=str2num(char(result));if((Numb>20)|(Numb<0))errordlg('请输入正确的扰动项:[0 20]之间的整数!');return;endresult=inputdlg({'请输入(0 1)之间的扰动常数:'},'charpt 1_1',1,{'0.00001'}); ess=str2num(char(result)); ve=zeros(1,21); ve(21-Numb)=ess;root=roots(poly(1:20)+ve);x0=real(root); y0=imag(root); plot(x0',y0', '*');disp(['对扰动项 ',num2str(Numb),'加扰动',num2str(ess),'得到的全部根为:']); disp(num2str(root));(二)实验结果分析(1)对于x19项的扰动ess,不同的取值对应的结果如下所示。
数值分析实验 实验报告
数值分析实验实验报告数值分析实验实验报告引言在现代科学与工程领域,数值分析是一项重要的技术手段。
通过数值方法,我们可以利用计算机模拟和解决各种实际问题,如物理、化学、生物、经济等领域中的方程求解、优化问题、数据拟合等。
本实验旨在通过实际案例,探讨数值分析的应用和效果。
实验一:方程求解首先,我们考虑一个简单的方程求解问题。
假设我们需要求解方程f(x) = 0的根,其中f(x)是一个在给定区间[a, b]上连续且单调的函数。
为了实现这个目标,我们可以采用二分法、牛顿法、弦截法等数值方法。
在本实验中,我们选择使用二分法来求解方程f(x) = 0。
这种方法的基本思想是通过不断缩小区间[a, b]的范围,直到找到一个近似的根。
我们首先选取一个中间点c,计算f(c)的值,然后根据f(c)与0的关系,将区间[a, b]分成两部分。
重复这个过程,直到找到满足精度要求的根。
实验二:数据拟合接下来,我们考虑一个数据拟合的问题。
假设我们有一组离散的数据点,我们希望找到一个函数,使得该函数与这些数据点的拟合误差最小。
为了实现这个目标,我们可以采用最小二乘法等数值方法。
在本实验中,我们选择使用最小二乘法来进行数据拟合。
这种方法的基本思想是通过最小化数据点与拟合函数之间的误差平方和,来确定拟合函数的参数。
我们首先选择一个拟合函数的形式,如线性函数、多项式函数等。
然后,通过最小化误差平方和的方法,计算出拟合函数的参数。
实验三:优化问题最后,我们考虑一个优化问题。
假设我们需要在给定的约束条件下,找到一个使得目标函数取得最大或最小值的变量。
为了实现这个目标,我们可以采用梯度下降法、遗传算法等数值方法。
在本实验中,我们选择使用梯度下降法来解决优化问题。
这种方法的基本思想是通过迭代的方式,不断调整变量的取值,直到找到一个满足约束条件的最优解。
我们首先计算目标函数关于变量的梯度,然后根据梯度的方向和大小,更新变量的取值。
通过不断迭代,我们可以逐步接近最优解。
《数值计算方法》---多项式插值实验报告
1
2
3
4
5
6
y
0
0.6931
1.0986
1.3863
1.6094
1.7918
2根据下面的数据点,分别求牛顿前插多项式和牛顿后插多项式,并计算x=1.55时y的值。
x
1
2
3
4
5
6
y
0
0.6931
1.0986
1.3863
1.6094
1.79ቤተ መጻሕፍቲ ባይዱ8
3根据下面的数据点,求埃尔米特插值多项式,并计算x=1.44时y的值。
《数值计算方法》---多项式插值实验报告
实验名称:多项式插值
实验目的:
1、熟悉Matlab的编程。
2、学会求解拉格朗日插值、牛顿插值及埃尔米特插值多项式并估计函数在某点处的值。
实验设备与环境:计算机,Windows系统,Matlab等。
实验内容:
1.根据下面的数据点,分别求拉格朗日插值多项式和牛顿插值多项式,并计算x=1.5时y的值。
x
1
1.2
1.4
1.6
1.8
y
1
1.0954
1.1832
1.2649
1.3416
y’
0.5000
0.4564
0.4226
0.3953
0.3727
f =
10850.7*(t - 1.0)^2*(t - 1.4)^2*(t - 1.6)^2*(t - 1.8)^2*(9.58473*t - 10.4063) - 10850.7*(t - 1.0)^2*(t - 1.2)^2*(t - 1.4)^2*(t - 1.8)^2*(10.1455*t - 17.4978) + 24414.1*(t - 1.0)^2*(t - 1.2)^2*(t - 1.6)^2*(t - 1.8)^2*(0.4226*t + 0.59156) - 678.168*(27.5773*t - 50.9807)*(t - 1.0)^2*(t - 1.2)^2*(t - 1.4)^2*(t - 1.6)^2 + 678.168*(t - 1.2)^2*(t - 1.4)^2*(t - 1.6)^2*(t - 1.8)^2*(21.3333*t - 20.3333)
《数值分析》实验报告4
《数值分析》实验报告
【实验名称】
运用MATLAB编程实现多项式插值的拉格朗日方法。
【实验目的】
①熟悉了解lagrange插值多项式的算法。
②学习MATLAB软件的功能。
【实验环境】
操作环境:Windows 10
实验平台:Matlab7.1软件
【实验操作】
1、打开MATLAB程序软件。
2、所用实例为课本p116页例1。
3、lagrange插值多项式的MATLAB函数文件lagrange.m如下:
3.1 function yi=lagrange(x,y,xi)
n=length(x); m=length(y);
if n~=m
error('The lengths of X and Y must be equal');
return;
end
p=zeros(1,n);
for k=1:n
t=ones(1,n);
for j=1:n
if j~=k
if abs(x(k)-x(j))<eps
error('the DATA is error');
return;
end
t(j)=(xi-x(j))/(x(k)-x(j));
end
end
p(k)=prod(t);
end
yi=sum(y.*p);
4、结果说明:通过构造运用lagrange插值多项式使得求解某些函数值得较为简便。
【实验感想】
通过本次的实验了解了lagrange插值多项式的计算方法,大大提高了对课本知识的运用能力,熟悉了MATLAB的一些功能,增强了对数值分析学习的兴趣。
数值分析实验报告
数值分析实验报告一、实验目的数值分析是一门研究用计算机求解数学问题的数值方法及其理论的学科。
本次实验的目的在于通过实际操作和编程实现,深入理解和掌握数值分析中的常见算法,提高运用数值方法解决实际问题的能力,并对算法的精度、稳定性和效率进行分析和比较。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
实验所依赖的主要库包括 NumPy、Matplotlib 等。
三、实验内容(一)函数逼近与插值1、拉格朗日插值法通过给定的离散数据点,构建拉格朗日插值多项式,对未知点进行函数值的估计。
2、牛顿插值法与拉格朗日插值法类似,但采用了不同的形式和计算方式。
(二)数值积分1、梯形公式将积分区间划分为若干个梯形,通过计算梯形面积之和来近似积分值。
2、辛普森公式基于抛物线拟合的方法,提高积分近似的精度。
(三)线性方程组求解1、高斯消元法通过逐行消元将线性方程组化为上三角形式,然后回代求解。
2、 LU 分解法将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过两次前代和回代求解。
(四)非线性方程求解1、二分法通过不断将区间一分为二,逐步缩小根所在的区间,直到满足精度要求。
2、牛顿迭代法利用函数的切线来逼近根,通过迭代逐步收敛到根的近似值。
四、实验步骤(一)函数逼近与插值1、拉格朗日插值法定义计算拉格朗日基函数的函数。
根据给定的数据点和待求点,计算插值多项式的值。
输出插值结果,并与真实值进行比较。
2、牛顿插值法计算差商表。
构建牛顿插值多项式。
进行插值计算和结果分析。
(二)数值积分1、梯形公式定义积分区间和被积函数。
按照梯形公式计算积分近似值。
分析误差。
2、辛普森公式同样定义积分区间和被积函数。
运用辛普森公式计算积分近似值。
比较与梯形公式的精度差异。
(三)线性方程组求解1、高斯消元法输入系数矩阵和右端项向量。
进行消元操作。
回代求解方程。
输出解向量。
2、 LU 分解法对系数矩阵进行 LU 分解。
数值计算方法实验报告--newton插值多项式
数值计算方法实验报告实验报告题目:newton插值多项式实验要求用mat1ab解析Newton插值多项式的程序二、实验分析(包括数学原理,小组分析讨论后确定实验方案和实现思路)根据经过n+1个不同的差值点x1,x2,…,x(n+1),构造牛顿插值公式∕V(x)=y[x1,x2](x-Λ1)+∕[x1,x2,x3](x-Jc1)(x-x2)+∙∙∙+∕[x1,Λ2∕∙∙xn+1](x-x1)(x-x 2)∙∙∙(x-xn)三、实脸步骤(过程)(包括程序及上机的实现的结果)function[p2,z]=newton(x,y,t)n=1ength(x);chaS(1)=y(1);for i=2:nx1=x;y1=y;x1(i+1:n)=[];y1(i+1:n)=[];n1=1ength(x1);s1=0;for j=1:n1t1=1;for k=1:n1if k==j continue;e1set1=t1*(x1(j)-x1(k));ehdehds1=s1+y1(j)∕t1;end chaS(i)=s1;ehd b(1,:)=[zeros(1,n-1)chaS(1)];c1=ce11(1,n-1);for i=2:nυ1=1;for j=1:i-1u1=conv(u1,[1-x(j)]);c1{i-1}=u1;end c1{i-1}chaS(i)*c1{i-1);b(i,:)=[zeros(1,n-i)z c1{i-1}];end四、总结(包括实脸过程遇到的情况等,组长总结组员在整个过程的参与情况)实验过程中大家都积极参与,搞明白了牛顿插值多项式的程序。
有不明白的地方,也通过询问同班学霸,或是网页查询得到了解决。
实验四数据分析与多项式计算(含实验报告).doc
实验四数据分析与多项式计算一、实验目的1.掌握数据统计和分析的方法。
2.掌握数据插值与曲线拟合的方法及其应用。
3.掌握多项式的常用运算。
二、实验的设备及条件计算机一台(带有MATLAB7.0以上的软件环境)。
设计提示1.参考木节主要内容,学习并理解相关函数的含义及调用方法。
三、实验内容1.请完成教材P134屮实验指导环节的实验内容的第1题;2.请完成教材P134屮实验指导环节的实验内容的第2题(此题含两个小题,任选其一完成);3.请完成教材135屮实验指导环节的实验内容第4题;4.请完成教材135屮实验指导环节的实验內容的第5题。
5.已知某压力传感器的测试数据如下表P为压力值,Li为电压值,试用多项式1^/7)= %3+/^2 + 6/?+^来拟合其特性函数,求出a, b, c, d,并把拟合曲线和各个测试数据点画在同一幅图上。
1. 实验名称2. 实验目的3. 实验设备及条件4. 实验内容及要求5. 实验程序设计指程序代码。
预习报告要求最终报告要求实验报告要求(包含预习报告要求和最终报告要求)6. 实验结果及结果分析实骑结果要求必须客观,有数据的可以记录数据,没有数据的简单描述实验现象。
结果分析是对实验结果的理论评判。
7. 实验中出现的问题及解决方法8. 思考题的回答一、实验报告的提交方式Word文档,命名方式:实验号_你的学号_姓名例如本次实验:实验一000000001张三.doc(信息101 提交报告邮箱):E_mail: ******************(网络工程101提交作业邮箱Email:******************(注意网络班的M是大写的)下一次课前提交,过期不收!二、参考文献参考教材和Matlab帮助文件。
1.实验名称数据分析与多项式计算2.实验A的1. 掌握数据统计和分析的方法。
2. 掌握数据插值与曲线拟合的方法及其应用。
3. 掌握多项式的常用运算。
3.实验设备及条件计算机一台(带有MATLAB7.0以上的软件环境)4.实验内容及要求完成所给实验题以及思考题,题与题之间用相应注释分割。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值分析》课程设计任务书根据课设任务书要求,我们的任务是计算出给定的任意的多项式方程:nn n n xa xa x a x a a ++++--112210 根的值。
在此我们选用牛顿迭代法进行计算。
但为了避免重根的问题,我们在得到一个给定函数后,先要将其函数图像画出。
在图像中我们能清晰的看出每个根的大概位置,再选取其中一个根的近似值记为初始值,之后确定精度和误差界后就可以计算这个根的值了。
计算中我们将用到三个M 文件,分别存放牛顿迭代函数、原函数及导函数。
其中原函数和到函数是以迭代形式表现出来的,以此来表示任意阶多项式。
这个模型选取依次求根的方式,能将根的精确度进一步提高,因此适于解决小型多项式的求根问题。
关键字:牛顿迭代函数、多项式、原函数、导函数一、问题的提出————————————————————————4二、模型的假设与符号说明———————————————————5三、问题的分析、模型的建立和测试求解————————————6问题分析———————————————————————6模型建立———————————————————————6测试数据的结果分析——————————————————8四、模型的优缺点和评价————————————————————11五、课设总结—————————————————————————12六、参考文献—————————————————————————13七、附录———————————————————————————14一、问题的提出1.1问题的背景在数学的学习过程中,我们会经常遇到求解多项式的问题,一般情况下我们只能用待定系数法求解这些方程的根,如何能更快捷的利用计算机解决这些问题呢。
下面我们将利用数值分析中的一些方法解决这个问题。
1.2问题的提出任意给定一个多项式:nn n n xa xa x a x a a ++++--112210求出它的根。
二、模型的假设与符号说明2.1 模型的假设2.1.1 假设多项式是有限次的2.1.2 假设某根的区间,及近似值可由图像看出2.1.3 假设每个根能分别求出,由此可不用考虑冲根问题2.2 符号说明(1) f 非线性函数(2) dff的微商(3) 0p 初始值(4) delta给定的允许误差 (5) 1max迭代的最大次数(6) 1p牛顿法求出的方程的近似值(7) err0p 的误差估计(8) k 迭代次数(9) y )(1p f y =(10) A 给定方程的系数矩阵 (11) B给定方程导函数系数矩阵(12) b系数矩阵的列数(13) a 系数矩阵的行数(14)1y)(1x df y =三、 问题的分析、模型的建立和测试求解3.1 对问题的分析根据上文问题的提出可知,我们要对给定的任意多项式:nn n n xa xa x a x a a ++++--112210求解。
然而若想要一次性求出所有解则需要考虑多个因素,比如我们需要考虑重根问题,本次实验我要采用的方法是牛顿法,如果遇到重跟的情况所求值的误差就会增大。
因此为了避免这种误差我们将采用分段求解的方式分别求出每个根。
这样让每段所求的区间上只有一个根,目测函数值的大小,将其值代入程序中,经过处理就能得此根的真实值。
模型3.2 牛顿迭代模型 3.2.1 模型的建立 牛顿法的基本思想:解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。
把f(x)在x0点附近展开成泰勒级数:+-+-+=2)()()()()(00'00x x x f x x x f x f取其线性部分,作为非线性方程f(x)=0的近似方程,则有:0))(()(00'0=-+x x x f x f设f ˊ(x0)≠0则其解为:)(/)(0'001x f x f x x -=再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。
若f(x1)≠0,则得:)(/)(0'112x f x f x x -=这样,得到牛顿法的一个迭代序列:)(/)('1n n n n x f x f x x -=+以上是牛顿迭代算法的基本思想,现在的任务就是确定一个初始值0p 。
由其思想可知0p 的值越接近所求根的值越好,因此为了避免误差,我们首先采用画图的方法将待求方程的图像先画出来,此时从所画图中就可以大致看到函数图像与X 轴的焦点(也就是根的位置)。
然后选择一个待求根(记为p ),大概目测出其值大小(也就是初值0p )。
此时我们的任务就转变为利用0p 求p 的值。
接下来我们要利用牛顿迭代法求出p 的近似值。
利用Matlab 软件我们先建立3个M 文件,将所需的原函数、导函数及牛顿迭代方程分别放入其中。
因为原函数可以表示为nn n n x a xa x a x a a ++++--112210因此我们现在要以循环的方式用系数矩阵A 将原函数以迭代的方程形式表现出来,令i 从1开始循环,迭带方程为)()1(i x i A y y ⨯++=。
同理,也要将导函数表示成一个通项表达式,在此,我们要先计算出矩阵A 的阶数,由矩阵[a,b]表示。
之后只要将系数矩阵A 的后n-1个值付给B ,就可给到其导函数的迭代方程为)1(11)(-⨯⨯+=i x i B i y y 。
得到原函数和导函数的通项迭代方程后只要给定任意多项式的系数矩阵迭代次数k ,及误差界就可以计算出它的近似根。
以下测试数据均以610-为误差界。
以下是实现后的核心代码: Newton 函数:for k=1:max1p1=p0-f(p0,A)/df(p0,A); err=abs(p1-p0); p0=p1;p1,err,k,y=f(p1,A) if (err<delta)|(y==0) break ; endp1,err,k,y=f(p1,A)原函数:[a,b]=size(A)……………………………………………………………………计算A 的阶数 y=0;……………………………………………………………………………………………令函数初值为0 for i=0:b-1………………………………………………………………利用循环语句构成通项函数y=y+A(i+1)*x^(i);导函数:[a,b]=size(A); y1=0;for i=1:b-1…………………………………………………………………将A 的后n-1个值付给BB(i)=A(i+1);y1=y1+i*B(i)*x^(i-1);3.2.2 测试数据的结果分析下面将以方程233+-x x 为例进行数据测试:由方程本身可知其系数矩阵A =[2,-3,0,1](规定11A 为最低次项系数),所以B=[-3,0,1]( 规定11B 为最低次项系数),设定其误差界为610-,规定其最大迭代次数为10次,为了确定方程的初始值0p ,我们要画出函数的图像。
首先在Matlab11窗口中输入: fplot('[x^3-3*x+2,0]',[-2.5,2.5]);grid;回车得到如下图形,即可知函数)(x f 与x 有交点,也就是说有根,并且能从图中大致估计根的位置。
(选取[-2.5,2.5]为区间)-2.5-2-1.5-1-0.50.511.522.5-8-6-4-2024681012如图可知在2.1≈x 及1.2-≈x 处有根,我们选取0p =1.2,在Matlab 窗口中先输入系数矩阵:>>A =[2,-3,0,1] 接下来再输入:>> newton1(A,1.2,10^(-6),10)回车即可得到:(只给出了最后两次迭代的结果) k = 9 a = 1 b = 4y = 5.1943e-007y = 5.1943e-007p1 = 1.0004err =4.1596e-004k = 9a = 1b = 4y = 5.1943e-007y = 5.1943e-007a = 1b = 4y = 5.1943e-007p1= 1.0002err =2.0802e-004k = 10a = 1b = 4y =1.2987e-007y =1.2987e-007p1 =1.0002err =2.0802e-004k = 10a = 1b = 4y =1.2987e-007y =1.2987e-007ans =1.0002由以上数据可见迭代10次以后根的近似值为:1.0002 再选取p=1.2,在Matlab窗口中先输入:>> newton1(A,1.2,10^(-6),10)回车即可得到:(只给出了最后一次迭代的结果):k = 4a = 1b = 4y = 0y = 0ans = -2由以上数据可见迭代10次以后根的值为:-2四、模型的优缺点评价首先,模型基本解决了任意多项式求根的问题,只要给定系数,模型就能求解出任意多项式在定义域内的任意一个根。
通过这个模型已经基本能将一些特殊的问题一般化,能解决一般性的问题。
而且采用画图法确定初始值这一思路,能使初始值的选取更加接近待求根的值,从而能减小误差,使结果更加精确。
然而此模型也有很多不足需要改进。
首先模型只能一个一个的进行求根,再画出函数图像时也要给定一个定义域,这样的话,如果所求对象是一个高次的多项式,那么在图像给定区间内有可能不能全部显示出根的位置。
这样对求根会造成了一定的影响,如果我们想求出方程的所有根,但从图像中并未给出全部根(定义域不够大),这样我们就要再次扩大定义域,试着让图像中给出所有根的位置,这样就影响了求解的速度。
另外此模型只能对根进行逐一求解,也就是说如果一个方程中有3个解,我们只能依次确定初始值,再对方程求解这样也会影响求解的速度。
另外采用逐一求根地方法就避免了要考虑重跟的问题,但这也是模型的一个缺陷。
因此这个模型只适用于小型多项式的求解,并不适于次数很高的多项式,若根的个数是有限个,则采用此模型会比较精确。
五、课设总结这次的课设使我对数值分析有了一个新的认识,同时也弥补了我这学期学习的漏洞。
与其他同学一样,刚拿到题目的我们对于问题也是一脸的茫然,无处着手。
但我希望通过这次课设在能好好的学习一下Matlab这个软件,也希望通过此次课设补习一下本学期学习上的漏洞,因此,我决定问一问老师对这道题目的想法。
那个时候大家还在苦苦挣扎,想通过网络这条捷径找到思路甚至是代码。
但通过上几次课设的经验教训让我深刻的意识到“网上的代码不可靠,即便是找到了也看不懂”。
于是遵循着成功没有捷径的道理,我还是决定请教一下出题人,毕竟题是老师出的,总该可以给我一些指导吧。
果然经过与老师的交流,我也大概有了一些眉目。