博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MATLAB拟合和插值
阅读量:6267 次
发布时间:2019-06-22

本文共 3366 字,大约阅读时间需要 11 分钟。

定义

插值和拟合:

曲线拟合是指您拥有散点数据集并找到最适合数据一般形状的线(或曲线)。

插值是指您有两个数据点并想知道两者之间的值是什么。中间的一半是他们的平均值,但如果你只想知道两者之间的四分之一,你必须插值。

 

拟合

我们着手写一个线性方程图的拟合:

y=3x^3+2x^2+x+2

首先我们生成一组数据来分析:

x=-5:0.5:5;e=50*rand(1,length(x))-25;%制造[-25,25]的随机数作为误差y=3*x.^3+2*x.^2+x+2+e;%得到y值plot(x,y,'.')

 

x =  Columns 1 through 6   -5.0000   -4.5000   -4.0000   -3.5000   -3.0000   -2.5000  Columns 7 through 12   -2.0000   -1.5000   -1.0000   -0.5000         0    0.5000  Columns 13 through 18    1.0000    1.5000    2.0000    2.5000    3.0000    3.5000  Columns 19 through 21    4.0000    4.5000    5.0000y =  Columns 1 through 6 -350.0110 -248.6360 -169.3421  -89.5653  -88.2298  -57.7238  Columns 7 through 12  -32.5505    2.3308   11.5861    9.0123   -0.4538    5.7254  Columns 13 through 18   -2.1840   30.3596   20.4478   73.2138   88.1756  152.0492  Columns 19 through 21  236.2809  334.3864  411.0563

 

这时候x,y作为已知数据存在,要求我们拟合x,y的散点图,这时候会用到这个函数。

语法

p = polyfit(x,y,n)

[p,S] = polyfit(x,y,n)
[p,S,mu] = polyfit(x,y,n)

说明

p = polyfit(x,y,n) 返回阶数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中)。p 中的系数按降幂排列,p 的长度为 n+1

[p,S] = polyfit(x,y,n) 还返回一个结构体 S,后者可用作 polyval 的输入来获取误差估计值。

[p,S,mu] = polyfit(x,y,n) 还返回 mu,后者是一个二元素向量,包含中心化值和缩放值。mu(1) 是 mean(x),mu(2) 是 std(x)。使用这些值时,polyfit 将 x 的中心置于零值处并缩放为具有单位标准差 

 

plot(x,y,'.')%已知数据的散点图hold ond=polyfit(x,y,2);%进行线性拟合,假设函数为二次函数y1=d(1)*x.^2+d(2)*x+d(3);plot(x,y1)//绘制猜测的函数

  

明显不符合,我们继续猜测

plot(x,y,'.')hold ond=polyfit(x,y,3);y1=d(1)*x.^3+d(2)*x.^2+d(3)*x+d(4);plot(x,y1)

拟合成功。

 

插值

一维插值

以上面的数据为例子 

 

x=-5:0.5:5;e=50*rand(1,length(x))-25;%制造[-25,25]的随机数作为误差y=3*x.^3+2*x.^2+x+2+e;%得到y值%插值x2=-5:0.1:5;y2=interp1(x,y,'x2,'spline');plot(x2,y2,'r+')

 

二维插值

语法

[X,Y] = meshgrid(x,y)

[X,Y] = meshgrid(x)

[X,Y,Z] = meshgrid(x,y,z)

[X,Y,Z] = meshgrid(x)

说明

[X,Y] = meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。

[X,Y] = meshgrid(x) 与 [X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)×length(x) 的方形网格坐标。

[X,Y,Z] = meshgrid(x,y,z) 返回由向量 x、y 和 z 定义的三维网格坐标。X、Y 和 Z 表示的网格的大小为 length(y)×length(x)×length(z)。

[X,Y,Z] = meshgrid(x) 与 [X,Y,Z] = meshgrid(x,x,x) 相同,并返回网格大小为 length(x)×length(x)×length(x) 的三维网格坐标。

 

我们先绘制一个三维的图像

[x,y]=meshgrid(-5:1:5,-10:2:10);z=12-x.^3-y.^3;surf(x,y,z)

给人的感觉是很“粗糙”的,这时候我们使用插值,增加数据。

[x0,y0]=meshgrid(-5:0.2:5,-10:0.4:10);z0=interp2(x,y,z,x0,y0,'spline');surf(x0,y0,z0)

 

 

问题

1、已知以下实验测量数据,

1

1.5

2.5

3

4.5

-0.86

13.66

90.25

152.57

473.70

(1)请画出以上数据的散点图;

(2)请用合适的多项式拟合上述数据;

(3)请用三次样条一次插值以上数据.

2、已知网格化数据如下:

         

-1

-0.5

0

0.5

1

-2

1.77

1.12

0.32

0.44

-2.35

-1

1.62

1.29

0.94

-1.49

-0.78

0

0.23

-1.01

-0.74

1.08

-0.13

1

-0.61

-0.41

-0.63

-0.05

1.44

2

-2.94

-0.22

0.56

0.17

1.73

                               

              

               

 

 

 

 

 

 

请用三次样条二次插值法插出更光滑精细的曲面.  

 

答案

%1-(1)clc,clearx=[1 1.5	2.5 3 4.5];y=[-0.86	13.66 90.25 152.57 473.70];plot(x,y,'.');%1-(2)d=polyfit(x,y,1);y1=d(1)*x+d(2);plot(x,y,'.');plot(x,y1);%对比线性图与散点图,发现不匹配d=polyfit(x,y,2);y1=d(2)*x.^2+d(2)*x+d(3);plot(x,y,'.');plot(x,y1);%对比线性图与散点图,发现匹配成功,拟合完成%1-(3)x=[1 1.5 2.5 3 4.5];y=[-0.86	13.66 90.25 152.57 473.70];x1=[1:0.1:4.5];y1=interp1(x,y,x1,'spline');plot(x,y,x1,y1);%2[x1,y1]=meshgrid(-2:1:2,-1:0.5:1);z1=[1.77 1.21 0.32 0.44 -2.35;1.62 1.29 0.94 -1.49 -0.78;0.23 -1.01 -0.74 1.08 -0.13;...-0.61 -0.41 -0.63 -0.05 1.44;-2.94 -0.22 0.56 0.17 1.73];surf(x1,y1,z1)[x,y]=meshgrid(-1:0.1:1, -2:0.2:2);z=interp2(x1,y1,z1,x,y,'spline');surf(x,y,z)

 

  

 

转载于:https://www.cnblogs.com/Mayfly-nymph/p/10721051.html

你可能感兴趣的文章
LVM逻辑卷
查看>>
zoj3591 Nim(Nim博弈)
查看>>
canvas绘图
查看>>
poj - 3039 Margaritas on the River Walk
查看>>
bootstrap(5)关于导航
查看>>
Aptana插件在eclipse中安装
查看>>
jQuery-数据管理-删除事件
查看>>
下载器简单实例
查看>>
java实现分页工具类(JDBC)
查看>>
欧几里德算法与扩展欧几里德算法
查看>>
Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2)
查看>>
通过kafka提供的命令来查看offset消费情况
查看>>
oracle数据库从入门到精通之四
查看>>
自定义圆形图片控件
查看>>
sharepoint 2013 补丁升级步骤
查看>>
asp.net core 2.0 web api基于JWT自定义策略授权
查看>>
Skype for Business Server 2015-04-前端服务器-3-安装-管理工具
查看>>
第12章代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
我们为什么从Python转到go?
查看>>
5.Azure负载均衡(上)
查看>>