MATLAB数值实验一(数据的插值运算及其应用完整版)
(完整版)MATLAB)课后实验[1]
![(完整版)MATLAB)课后实验[1]](https://img.taocdn.com/s3/m/88685371e53a580217fcfe63.png)
实验一 MATLAB 运算基础1. 先求以下表达式的值,尔后显示 MATLAB 工作空间的使用情况并保存全部变量。
(1)2sin 85 z1 21 e(2) 12z ln( x 1 x ) ,其中22 x2 1 2i5(3)ae e az sin( a 0.3) ln , a 3.0, 2.9, L , 2.9, 32 22t 0 t 1(4) 2z t 1 1 t 242t 2t 1 2 t 3,其中解:M 文件:z1=2*sin(85*pi/180)/(1+exp(2))x=[2 1+2*i;-.45 5];z2=1/2*log(x+sqrt(1+x^2))a=-3.0:0.1:3.0;z3=(exp(0.3.*a)-exp(-0.3.*a))./2.*sin(a+0.3)+log((0.3+a)./2)t=0:0.5:2.5;z4=(t>=0&t<1).*(t.^2)+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3) .*(t.^2-2*t+1)4. 完成以下操作:(1) 求[100,999] 之间能被 21 整除的数的个数。
(2) 建立一个字符串向量,删除其中的大写字母。
解:(1) 结果:m=100:999;n=find(mod(m,21)==0);length(n)ans =43(2). 建立一个字符串向量比方:ch='ABC123d4e56Fg9'; 那么要求结果是:ch='ABC123d4e56Fg9';k=find(ch>='A'&ch<='Z');ch(k)=[]ch =123d4e56g9实验二 MATLAB矩阵解析与办理1. 设有分块矩阵 A E R3 3 3 2O S2 3 2 2,其中 E、R、O、S 分别为单位矩阵、随机矩阵、零矩阵和对角阵,试经过数值计算考据 2A E R RS2O S。
数据插值、拟合方法的MATLAB实现

hours=0:1:23;
temps=[12 12 12 11 10 10 10 10 11 13 15 18 19 20 22 21 20 19 18 16 15 15 15 15]
n=6;
p=polyfit(hours,temps,n)
t=linspace(0,23,100);
z=polyval(p,t); %多项式求值
plot(hours,temps,'o',t,z,'k:',hours,temps,'b',’r’,'linewidth',1.5)
legend('原始数据','6阶曲线')
2.3用8阶多项式拟合的命令
hours=0:1:23;
temps=[12 12 12 11 10 10 10 10 11 13 15 18 19 20 22 21 20 19 18 16 15 15 15 15]
实验结果:
1.一元插值图像
图1.1一元插值图
经分析三次样条插值法效果最好,以三次样条插值法得出每个0.5小时的温度值:
时间
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
5.5
温度
12
11.9
12
12.0
12
11.6
11
10.4
10
9.9
10
10.0
时间
6
6.5
7
7.5
8
8.5
9
9.5
10
10.5
11
11.5
MATLAB插值实验报告 数学实验

zi=interp2(x,y,z,xi,yi,'spline');
mesh(xi,yi,zi)
title('三次样条插值'),xlabel('x'),ylabel('y'),zlabel('z')
立方差值:[xi,yi]=meshgrid(1200:10:4000,1200:10:3600);
1500 1550 1600 1550 1600 1600 1600 1550;
1500 1200 1100 1550 1600 1550 1380 1070;
1500 1200 1100 1350 1450 1200 1150 1010;
1390 1500 1500 1400 900 1100 1060 950;
新乡学院数学与信息科学系
实验报告
实验项目名称插值实验
所属课程名称数学实验
实验类型综合性实验
实验日期
班级
学号
姓名
成绩
一、实验概述:
【实验目的】
掌握用Matlab插值的方法,了解拉格朗日插值、线性插值、样条插值的基本思想,了解三种网格节点数据的插值方法的基本思想,了解掌握用Matlab计算一维差值和二维插值的方法。
【实验原Байду номын сангаас】
1.一位握又性插值、样条插值的基本思想,了解三种网格节点数据的差拉格朗日(Lagrange)插值。
已知函数f(x)在n+1个点x0,x1,…,xn处的函数值为y0,y1,…,yn.求一n次多项式函数Pn(x),使其满足:Pn(xi)=yi,i=0,1,…,n.解决此问题的拉格朗日插值多项式公式如下 其中Li(x)为n次多项式:
Matlab数据插值

Matlab数据插值插值就是已知一组离散的数据点集,在集合内部某两个点之间预测函数值的方法。
一、一维插值插值运算是根据数据的分布规律,找到一个函数表达式可以连接已知的各点,并用此函数表达式预测两点之间任意位置上的函数值。
插值运算在信号处理和图像处理领域应用十分广泛。
1.一维插值函数的使用若已知的数据集是平面上的一组离散点集(x,y),则其相应的插值就是一维插值。
MATLAB中一维插值函数是interp1。
y=interp([x,]y,xi,[method],['extrap'],[extrapval]),[]代表可选。
method:'nearest','linear','spline','pchip','cubic','v5cubic'。
2.内插运算与外插运算(1)只对已知数据点集内部的点进行的插值运算称为内插,可比较准确的估测插值点上的函数值。
(2)当插值点落在已知数据集的外部时的插值称为外插,要估计外插函数值很难。
MATLAB对已知数据集外部点上函数值的预测都返回NaN,但可通过为interp1函数添加'extrap'参数指明也用于外插。
MATLAB的外插结果偏差较大。
二、二维插值已知点集在三维空间中的点的插值就二维插值问题,在图像处理中有广泛的应用。
二维插值函数是interp2,用法与一维插值函数interp1类似。
ZI=interp2(X, Y, Z, XI, YI, method, extrapval):在已知的(X,Y,Z)三维栅格点数据上,在(XI, YI)这些点上用method指定的方法估计函数值,外插使用'extrapval'。
二维插值中已知数据点集(X, Y)必须是栅格格式,一般用meshgrid函数产生。
interp2要求(X, Y)必须是严格单调的并且是等间距的,如果(X, Y)不是等间距的,会将其变换为等间距形式,如果已知是等间距的,可在method参数前加星号,如:'*cubic'。
数值计算方法实验之Newton多项式插值(MATLAB代码)

数值计算⽅法实验之Newton多项式插值(MATLAB代码)⼀、实验⽬的在⼰知f(x),x∈[a,b]的表达式,但函数值不便计算或不知f(x),x∈[a,b]⽽⼜需要给出其在[a,b]上的值时,按插值原则f(x i)=y i (i=0,1,……, n)求出简单函数P(x)(常是多项式),使其在插值基点x i处成⽴(x i)= y i(i=0,1,……,n),⽽在[a,b]上的其它点处成⽴f(x)≈P(x).⼆、实验原理三、实验内容求f(x)=x4在[0,2]上按5个等距节点确定的Lagrange插值多项式四、实验程序(1).m⽂件%输⼊的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标,Y是纵坐标,%x是以向量形式输⼊的m个插值点,M在[a,b]上满⾜|f~(n+1)(x)|≤M%注:f~(n+1)(x)表⽰f(x)的n+1阶导数%输出的量:向量y是向量x处的插值,误差限R,n次⽜顿插值多项式L及其系数向量C,%差商的矩阵Afunction[y,R,A,C,L] = newton(X,Y,x,M)n = length(X);m = length(x);for t = 1 : mz = x(t);A = zeros(n,n);A(:,1) = Y';s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;for j = 2 : nfor i = j : nA(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));endq1 = abs(q1*(z-X(j-1)));c1 = c1 * j;endC = A(n, n); q1 = abs(q1*(z-X(n)));for k = (n-1):-1:1C = conv(C, poly(X(k)));d = length(C);C(d) = C(d) + A(k,k);%在最后⼀维,也就是常数项加上新的差商endy(t) = polyval(C,z);R(t) = M * q1 / c1;endL = poly2sym(C); (2)命令窗⼝输⼊X = [0 0.5 1.0 1.5 2.0];Y = [0 0.0625 1 5.0625 16];x = linspace(0,pi,50);M = 1;[y,R,A,C,L] = newton(X, Y, x, M);y1 = x.*x.*x.*x; %可根据所给函数更改errorbar(x,y,R,'.g')hold onplot(X, Y, 'or', x, y, '.k', x, y1, '-b');legend('误差','样本点','⽜顿插值估算','x^4');五、运算结果(1) 图像(2) 运算结果第⼀列为所得多项式系数:。
如何利用Matlab技术进行数据插值

如何利用Matlab技术进行数据插值数据插值是一种常用的数学方法,用于根据已知数据点的信息,推断出未知位置的数据。
在各个学科领域,如地理学、环境科学、经济学等,数据插值都被广泛应用于实际问题的解决中。
在这篇文章中,我们将探讨如何利用Matlab技术进行数据插值。
数据插值的目标是根据已有的数据点,建立一个适当的函数模型,并利用该模型对未知位置处的数据进行估计。
Matlab作为一种功能强大的数学计算和可视化软件,提供了各种强大的函数和工具箱,使得数据插值变得更加便捷和高效。
首先,我们需要将已有的数据点导入到Matlab中。
一般来说,数据以文本文件的形式存储,每一行代表一个数据点,包含该点的横坐标和纵坐标。
我们可以使用Matlab内置的读取文本数据的函数,如`dlmread`或`importdata`来导入数据。
导入后,我们可以使用`plot`函数将数据点绘制出来,以便于观察数据的分布情况。
在进行数据插值之前,首先需要对数据进行预处理。
如果数据中存在异常值或者缺失值,我们可以使用Matlab提供的函数来进行数据清洗。
例如,可以使用`isnan`函数判断数据是否缺失,并使用`interp1`函数对缺失值进行插值处理。
接下来,我们将介绍几种常用的数据插值方法,并演示如何在Matlab中应用这些方法。
首先是最简单的线性插值方法。
线性插值基于已知数据点之间的直线拟合,通过求解直线方程,来推测未知位置处的数据值。
Matlab提供了`interp1`函数来实现线性插值,我们可以指定插值的方法为`'linear'`,并传入已知数据点的横坐标和纵坐标,以及待插值的位置进行插值计算。
此外,Matlab还提供了其他更高级的插值方法,如多项式插值、样条插值等。
多项式插值使用多项式函数拟合已知数据点,通过计算多项式函数的值来进行插值。
Matlab提供了`polyfit`函数来拟合多项式函数,以及`polyval`函数来计算多项式函数的值。
matlab数值计算实验报告

matlab数值计算实验报告Matlab数值计算实验报告引言:Matlab是一种广泛应用于科学与工程领域的高级计算机语言和环境,它提供了丰富的函数库和工具箱,方便用户进行数值计算、数据分析和可视化等任务。
本实验报告将介绍我在使用Matlab进行数值计算实验中的一些经验和心得体会。
一、数值计算方法数值计算方法是一种利用数值近似来解决实际问题的方法,它在科学和工程领域具有广泛的应用。
在Matlab中,我们可以利用内置的函数和工具箱来实现各种数值计算方法,例如插值、数值积分、数值微分等。
二、插值方法插值是一种通过已知数据点来推测未知数据点的方法。
在Matlab中,我们可以使用interp1函数来进行插值计算。
例如,我们可以通过已知的一些离散数据点,利用interp1函数来估计其他位置的数值。
这在信号处理、图像处理等领域具有重要的应用。
三、数值积分数值积分是一种通过分割曲线或曲面来近似计算其面积或体积的方法。
在Matlab中,我们可以使用quad函数来进行数值积分计算。
例如,我们可以通过quad函数来计算某个函数在给定区间上的积分值。
这在概率统计、物理学等领域具有广泛的应用。
四、数值微分数值微分是一种通过数值逼近来计算函数导数的方法。
在Matlab中,我们可以使用diff函数来进行数值微分计算。
例如,我们可以通过diff函数来计算某个函数在给定点上的导数值。
这在优化算法、控制系统等领域具有重要的应用。
五、数值求解数值求解是一种通过数值近似来计算方程或方程组的根的方法。
在Matlab中,我们可以使用fsolve函数来进行数值求解计算。
例如,我们可以通过fsolve函数来求解某个非线性方程的根。
这在工程计算、金融分析等领域具有广泛的应用。
六、实验应用在本次实验中,我使用Matlab进行了一些数值计算的应用实验。
例如,我利用插值方法来估计某个信号在给定位置的数值,利用数值积分方法来计算某个曲线下的面积,利用数值微分方法来计算某个函数在给定点的导数值,以及利用数值求解方法来求解某个方程的根。
matlab插值实验报告

matlab插值实验报告Matlab插值实验报告引言:在数学和工程领域中,插值是一种常见的数据处理方法。
它通过已知数据点之间的推断来填补数据的空缺部分,从而获得连续的函数或曲线。
Matlab是一种功能强大的数值计算软件,具备丰富的插值函数和工具包。
本实验旨在通过使用Matlab进行插值实验,探索插值方法的原理和应用。
实验步骤:1. 数据准备首先,我们需要准备一组实验数据。
以一个简单的二维函数为例,我们选择f(x) = sin(x),并在区间[0, 2π]上取若干个等间隔的点作为已知数据点。
2. 线性插值线性插值是插值方法中最简单的一种。
它假设函数在两个已知数据点之间是线性变化的。
在Matlab中,可以使用interp1函数进行线性插值。
我们将已知数据点和插值结果绘制在同一张图上,以比较它们之间的差异。
3. 多项式插值多项式插值是一种常用的插值方法,它通过已知数据点构造一个多项式函数来逼近原始函数。
在Matlab中,polyfit函数可以用来拟合多项式。
我们可以选择不同的多项式次数进行插值,并观察插值结果与原始函数之间的差异。
4. 样条插值样条插值是一种更为精确的插值方法,它通过在每个小区间内构造局部多项式函数来逼近原始函数。
在Matlab中,可以使用spline函数进行样条插值。
我们可以选择不同的插值节点数目,并比较插值结果的平滑程度和逼近效果。
5. 拉格朗日插值拉格朗日插值是一种基于多项式的插值方法,它通过构造插值多项式来逼近原始函数。
在Matlab中,可以使用polyval函数进行拉格朗日插值。
我们可以选择不同的插值节点数目,并观察插值结果与原始函数之间的差异。
实验结果:通过实验,我们得到了不同插值方法的结果,并将其与原始函数进行了比较。
在线性插值中,我们观察到插值结果与原始函数之间存在一定的误差,特别是在函数变化较快的区域。
而多项式插值和样条插值在逼近原始函数方面表现更好,特别是在插值节点数目较多的情况下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 插值法与数据拟合 专业班级 机械工程 姓 名 余红杰 学 号 10 指导教师 陈剑 成 绩 日 期 月 日一、实验目的1、学会Lagrange 插值、牛顿插值和三次样条插值等基本插值方法;2、讨论插值的Runge 现象3、学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。
二、实验原理1、拉格朗日插值多项式2、牛顿插值多项式3、三次样条插值 三、实验步骤1、用MATLAB 编写独立的拉格朗日插值多项式函数2、用MATLAB 编写独立的牛顿插值多项式函数3、用MATLAB 编写独立的三次样条函数(边界条件为第一、二种情形)4、已知函数在下列各点的值为:根据步骤1,2,3编好的程序,试分别用4次拉格朗日多项式4()L x 、牛顿插值多项式4()P x 以及三次样条函数()S x (自然边界条件)对数据进行插值,并用图给出 {(,),0.20.08,0,1,2,,10i i i x y x i i =+=},4()L x 、4()P x 和()S x 。
5、在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21(),(11)125f x x x=-≤≤+作多项式插值,对不同n 值,分别画出插值函数及()f x 的图形。
6、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。
(1)用这9个点作8次多项式插值8()L x 。
(2)用三次样条(第一边界条件)程序求()S x 。
7、对于给函数21()125f x x =+在区间[-1,1]上取10.2(0,1,,10)i x i i =-+=,试求3次曲线拟合,试画出拟合曲线并打印出方程,与第5题的结果比较。
四、实验过程与结果:1、Lagrange 插值多项式源代码:function ya=lag(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 ya=0; mu=1; %初始化%循环方式求L 系数,并求和: for i = 1:length(y) for j = 1:length(x) if i ~= jmu = mu * (xa - x(j) ) / ( x(i) - x(j) ); else continue end endya = ya + y(i) * mu ; mu = 1; end2、Newton 源代码:function ya = newton(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 %建立系数零矩阵D 及初始化:D = zeros(length(x)-1);ya = y(1);xi = 1;%求出矩阵D,该矩阵第一行为牛顿插值多项式系数:for i=1:(length(x)-1)D(i,1) = (y(i+1) -y(i))/(x(i+1) -x(i));endfor j=2:(length(x)-1)for i=1:(length(x)-j)D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (x(i+j) - x(i)); endend%xi为单个多项式(x-x(1))(x-x(2))...的值for i=1:(length(x)-1)for j=1:ixi = xi*(xa - x(j));endya = ya + D(1,i)*xi;xi = 1;end3、三次样条插值多项式(1)(第一边界条件)源代码:function y=yt1(x0,y0,f_0,f_n,x) _____________(1)%第一类边界条件下三次样条插值;%xi 所求点;%yi 所求点函数值;%x 已知插值点;%y 已知插值点函数值;%f_0左端点一次导数值;%f_n右端点一次导数值;n = length(x0);z = length(y0);h = zeros(n-1,1);k=zeros(n-2,1);l=zeros(n-2,1);S=2*eye(n);for i=1:n-1h(i)= x0(i+1)-x0(i);endfor i=1:n-2k(i)= h(i+1)/(h(i+1)+h(i));l(i)= 1-k(i);end%对于第一种边界条件:k = [1;k]; _______________________(2)l = [l;1]; _______________________(3)%构建系数矩阵S:for i = 1:n-1S(i,i+1) = k(i);S(i+1,i) = l(i);end%建立均差表:F=zeros(n-1,2);for i = 1:n-1F(i,1) = (y0(i+1)-y0(i))/(x0(i+1)-x0(i));endD = zeros(n-2,1);for i = 1:n-2F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i));D(i,1) = 6 * F(i,2);end%构建函数D:d0 = 6*(F(1,2)-f_0)/h(1); ___________(4)dn = 6*(f_n-F(n-1,2))/h(n-1); ___________(5)D = [d0;D;dn]; ______________(6)m= S\D;%寻找x所在位置,并求出对应插值:for i = 1:length(x)for j = 1:n-1if (x(i)<=x0(j+1))&(x(i)>=x0(j))y(i) =( m(j)*(x0(j+1)-x(i))^3)/(6*h(j))+...(m(j+1)*(x(i)-x0(j))^3)/(6*h(j))+...(y0(j)-(m(j)*h(j)^2)/6)*(x0(j+1)-x(i))/h(j)+... (y0(j+1)-(m(j+1)*h(j)^2)/6)*(x(i)-x0(j))/h(j) ; break;else continue;endendend(2)(自然边界条件)源代码:仅仅需要对上面部分标注的位置做如下修改:__(1):function y=yt2(x0,y0,x)__(2):k=[0;k]__(3):l=[l;0]__(4)+(5):删除—(6):D=[0:D:0]4、——————————————PS:另建了一个f方程文件,后面有一题也有用到。
function y=f(x0)y = 1./(1+25.*x0.^2);___________________________clc;clear;x1=[,,,,];y1=[,,,,];plot(x1,y1,'.');hold onxo=[::1];y=lag(x1,y1,xo);plot(xo,y,'o')hold on;y=newton(x1,y1,xo);plot(xo,y,'r');hold on;y=yt2(x1,y1,xo);plot(xo,y,'*')h = legend('原始','拉格','牛顿','自样',4);5、clc,clear;x1=linspace(-1,1,10);x2=linspace(-1,1,20);xo=[-1::1];yo=f(xo);plot(xo,yo);hold on;y=f(x1);y=newton(x1,y,xo);plot(xo,y,'k');hold on;y=f(x2);y=newton(x2,y,xo);plot(xo,y,'r')h = legend('原始','10插','20插',3);6、clc,clear;x1=[0 1 4 9 16 25 36 49 64];y1=[0 1 2 3 4 5 6 7 8 ];xo=[0:1:64];y=lag(x1,y1,xo)plot(xo,y,'k');hold ony=yt2(x1,y1,xo)plot(xo,y,'r')h = legend('拉格','自然样条',2);7、clc,clear;x1=linspace(-1,1,11);xo=[-1::1];y=f(x1);yo=f(xo);plot(xo,yo,'r');hold onp=polyfit(x1,y,3);y1=polyval(p,xo);plot(xo,y1)h = legend('原图','三次曲线拟合',2);p%该曲线的三次多项式系数依次显示五、讨论分析及感想个人感觉就是在数据点比较少,要求比较低的情况下,使用拉格朗日或是牛顿插值就足够了。
但是当数据点比较多的时候,使用样条曲线就更好。
当数据更多时,就可以使用曲线拟合方法来求近似值。
工程数学的基础知识并不是很苦难,但是很实用,是有必要好好学下的。
Matlab 也是比较强大的工具,比较符合人的思维逻辑,上手很快。
看书上的程序例子和实际编写还是有区别的,看得懂不一定编写的好,主要还是思维方式的锻炼吧~格式方法之类,只要了解了其基本功能,然后就是一系列的组合,多训练就熟悉了,比较有趣的课程吧,关键是有数据,有输出图像,看的清晰明白。
而且出现的错误,都有清晰的指导,修改起来也很快捷。
至于具体的分析,在编写三次样条的时候发现,使用矩阵的思想分析世界是有很大优势的,以后自己会多加训练。