MATLAB学习笔记(十一)

在本章中将要学习以下内容:

1. 用线性模拟或三次样条模型求数据的插值
2. 将一维数据点建模为一个多项式
3. 使用基本拟合工具
4. 使用曲线拟合工具
5. 进行数值积分
6. 进行数值微分
7. 求解微分方程的数值解

一.插值

1.线性插值
进行工程测量时,不可能采集到每个点的数值,因此需要插值技术。两种最常用的插值技术是线性插值和三次样条插值。
在 matlab中使用interp1函数,首先需要创建一对有序数组作为函数的输入量,然后用interp1函数估计给定x值对应的y的值:

>> x = 0:5
x =
     0     1     2     3     4     5
>> y = [15,10,9,6,2,0];
>> interp1(x,y,3.5)
ans =
     4 

interp1的第三个输入参数可以是矢量,可以进行多点插值运算:

>> new_x = 1:0.2:5;
>> interp1(x,y,new_x)
ans =
  Columns 1 through 11
   10.0000    9.8000    9.6000    9.4000    9.2000    9.0000    8.4000    7.8000    7.2000    6.6000    6.0000
  Columns 12 through 21
    5.2000    4.4000    3.6000    2.8000    2.0000    1.6000    1.2000    0.8000    0.4000         0

我们可以将插值结果和原始数据绘制在同一副图中:

>> new_y = ans;
>> plot(x,y,new_x,new_y,'o') 

这里写图片描述

注意:函数interp1的默认运算方法是线性插值,但是也可以进行其他插值运算。如果显式的指定interp1函数用作线性插值运算,则需要指定第4个参数为liner:

>> interp1(x,y,3.5,'linear')
ans =
     4 

2.三次样条插值
尽管用之间连接数值点估计中间点事最简单的办法,但是不一定是最好的办法。使用函数interp1中的三次样条插值技术可以建立一条平滑的曲线。

>> interp1(x,y,3.5,'spline')
ans =
    3.9417 

对多个点进行插值后绘制图形,其中直线部分是由原始数据点画出的:

>> new_x = 0:0.2:5;
>> new_y_spline = interp1(x,y,new_x,'spline')
new_y_spline =
  Columns 1 through 11
   15.0000   13.3088   12.0251   11.0869   10.4325   10.0000    9.7275    9.5531    9.4149    9.2512    9.0000
  Columns 12 through 22
    8.6133    8.0987    7.4773    6.7707    6.0000    5.1872    4.3563    3.5317    2.7381    2.0000    1.3419
  Columns 23 through 26
    0.7883    0.3637    0.0928         0 
>> plot(x,y,new_x,new_y_spline,'-o')

这里写图片描述

附表:函数interp1的插值法选项:

选项说明
‘linear’线性插值,函数的默认功能
‘nearest’最邻近点内插
‘spline’三次样条插值
‘pchip’形状保持分段三次插值
‘cubic’形状保持分段三次插值

3.多维插值
多元函数指的是多个自变量的变化导致因变量的变化,如x和y的值决定z的值。
二维线性插值使用函数interp2来计算:

>> y = 2:2:6;
>> x = 1:4;
>> z = [7,15,22,30;54,109,164,218;403,807,1210,1614];
>> interp2(x,y,z,1.5,3)
ans =
   46.2500

函数interp2输入的第一部分必须是矢量,用来定义与列相关的数值。函数interp2输入的第二部分也必须是一个矢量,用来定义与行有关的数值。数组z必须与矢量x具有相同的列数,与矢量y具有相同的行数。函数输入的第四和第五部分分别为与要确定的z值相对应的x的值和y的值。
MATLAB提供三维插值函数interp3和n维插值函数interpn.

二.曲线拟合

1.线性回归
线性回归技术就是采用最小二乘法来比较不同的表达式,确定哪一种能更好的对数据变化规律进行建模。
线性回归在MATLAB中用函数polyfit实现,该函数要求三个输入内容:x值矢量,y值矢量和一个用来表示拟合多项式阶数的整数。应为直线为一阶多项式,函数polyfit中应该为1:

>> x = [0:5];
>> y = [15,10,9,6,2,0];
>> polyfit(x,y,1)
ans =
   -2.9143   14.2857 

拟合结果为:y = -2.9143x + 14.2857
计算拟合后的误差:

>> best_y = -2.9143 * x + 14.2857
best_y =
   14.2857   11.3714    8.4571    5.5428    2.6285   -0.2858
>> new_sum = sum((y - best_y) .^ 2)
new_sum =
    3.3714 

图像如下图:

>> plot(x,y,'o',x,best_y)

这里写图片描述

2.多项式回归
常用的方法是用N次多项式来拟合曲线

>> x
x =
     0     1     2     3     4     5
>> y
y =
    15    10     9     6     2     0
>> polyfit(x,y,2)
ans =
    0.0536   -3.1821   14.4643
>> polyfit(x,y,3)
ans =
   -0.0648    0.5397   -4.0701   14.6587 

二次拟合后的函数是: smooth_y2 = 0.0536 * smooth_x.^2 - 3.182 * smooth_x + 14.4643;
三次拟合后的函数是:smooth_y3 = -0.0648 * smooth_x.^3 + 0.5398 * smooth_x.^2 - 4.0701 * smooth_x + 14.6587;

将两个拟合后的图绘制在一起,原来的点用圆圈表示,可以看出不同的函数的拟合效果:

>> smooth_x = 0:0.2:5;
>> smooth_y2 = 0.0536 * smooth_x.^2 - 3.182 * smooth_x + 14.4643;
>> subplot(1,2,1)
>> plot(x,y,'o',smooth_x,smooth_y2)
>> axis([0,6,-5,15]);
>> 
>> smooth_y3 = -0.0648 * smooth_x.^3 + 0.5398 * smooth_x.^2 - 4.0701 * smooth_x + 14.6587;
>> subplot(1,2,2)
>> plot(x,y,'o',smooth_x,smooth_y3)

这里写图片描述

3.函数polyval
函数polyfit可以根据回归条件返回最优数据拟合多项式的系数,函数polyval不需要重新输入系数就能完成同样的工作。函数polyval要求两个输入量,一个类似函数polyfit创建的系数数组,另一个是x的数组,利用它来计算新的y值。
即:polyval函数是基于polyfit函数的

>> coef = polyfit(x,y,1)
coef =
   -2.9143   14.2857
>> y_first_order_fit = polyval(coef,x)
y_first_order_fit =
   14.2857   11.3714    8.4571    5.5429    2.6286   -0.2857

等价于:

>> y_first_order_fit = polyval(polyfit(x,y,1),x)
y_first_order_fit =
   14.2857   11.3714    8.4571    5.5429    2.6286   -0.2857 

我们分别用四阶函数和五阶函数来拟合曲线,并把它们绘制在一张图中:

>> y4 = polyval(polyfit(x,y,4),smooth_x);
>> y5 = polyval(polyfit(x,y,5),smooth_x);
>> subplot(1,2,1)
>> plot(x,y,'o',smooth_x,y4)
>> axis([0,6,-5,15])
>> subplot(1,2,2)
>> plot(x,y,'o',smooth_x,y5)
>> axis([0,6,-5,15])

这里写图片描述

可以看出,用五阶模拟可以准确的匹配实际数据。

三.使用交互式拟合工具

1.基本拟合工具
为了使用基本拟合工具,我们首先创建一个图形:

>> x  = 0:5;
>> y = [0,20,60,68,77,110];
>> y2 = 20 * x;
>> plot(x,y,'o')
>> axis([-1,7,-20,120])

这里写图片描述

随后我们在工具选项中选择基本拟合选项,基本拟合窗口在图形的顶端打开,通过修改linear,cubic和show equations可以产生图形:
这里写图片描述

例如,选择4阶多项式,并显示残差结果。残差是指实际值与计算值之和。
这里写图片描述

除了基本拟合窗口外,图形菜单栏还有数据统计功能,利用数据统计窗口可以对图中的样本求均值和求标准差等基本的运算,并把运算结果保存在工作区中:
这里写图片描述
选择显示x轴和y轴的最大值和最小值,如下图所示:
这里写图片描述

2.曲线拟合工具箱
除了基本拟合功能外,MATLAB还提供了转本用于数据统计和拟合运算的工具箱。曲线拟合工具箱提供了一个图形用户接口,可以进行除了多项式拟合之外的其他形式的拟合。在执行之前必须安装图线拟合工具箱。
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习MATLAB时,编写学习笔记是一种很好的方法,可以帮助您记录重要的概念、语法和技巧,以及解决问题的步骤。以下是一些关于编写MATLAB学习笔记的建议: 1. 组织结构:使用清晰的标题和分节来组织您的学习笔记。将不同的主题分成单独的部分,并使用子标题来进一步细分内容。 2. 内容概要:在每个部分或子标题下,写下该主题的概要。这样可以帮助您回顾和理解该主题的关键点。 3. 示例代码和输出:对于每个主题,包括一些示例代码和相应的输出结果。这有助于您理解和演示具体的MATLAB语法和功能。 4. 问题与解答:如果您在学习过程中遇到了一些困惑或问题,将其记录下来,并在笔记中提出并解答这些问题。这样可以帮助您深入思考并加深对该主题的理解。 5. 笔记补充:除了基本概念和语法外,您还可以添加一些额外的笔记,如最佳实践、编程技巧、常见错误等。这些额外的笔记可以提供更多的实用信息和提示。 6. 参考资料:在您的学习笔记中,包括引用的参考资料,如教程、文档、书籍或网站链接。这样,您可以随时回顾并深入研究相关的主题。 7. 总结和复习:在学习笔记的结尾,添加一个总结部分,回顾和总结您学到的重点和关键概念。此外,定期复习您的学习笔记也是加深理解和记忆的好方法。 以上是关于编写MATLAB学习笔记的一些建议。希望这对您有所帮助,并祝您在MATLAB学习过程中取得成功!如果有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值