Matlab随笔之插值与拟合(下)
1、二维插值之插值节点为网格节点
已知m x n个节点:(xi,yj,zij)(i=1…m,j=1…n),且xi,yi递增。求(x,y)处的插值z。
Matlab可以直接调用interp2(x0,y0,z0,x,y,`method`)
其中 x0,y0 分别为 m 维和 n 维向量,表示节点, z0 为 n × m 维矩阵,表示节点值, x,y
为一维数组,表示插值点, x 与 y 应是方向不同的向量,即一个是行向量,另一个是列
向量, z 为矩阵,它的行数为 y 的维数,列数为 x 的维数,表示得到的插值, 'method'
的用法同上面的一维插值。
如果是三次样条插值,可以使用命令
pp=csape({x0,y0},z0,conds,valconds), z=fnval(pp,{x,y})
其中 x0,y0 分别为 m 维和 n 维向量, z0 为 m × n 维矩阵, z 为矩阵,它的行数为 x 的维
数,列数为 y 的维数,表示得到的插值,具体使用方法同一维插值。
eg:
(1)、用interp2函数插值:
x=::;
y=::;
z=[ ];
p=::;
q=::;
q=q';%须为列向量
z0=interp2(x,y,z,p,q);%分段线性插值
z1=interp2(x,y,z,p,q,'spline');%三次线条插值
subplot(,,);
mesh(p,q,z0);
title('分段线性插值');
subplot(,,);
mesh(p,q,z1);
title('三次线条插值');
%可以观察出,三次线条插值的图像更平滑
运行结果:
(2)、用csape函数插值:
x=::;
y=::;
z=[ ];
p=::;
q=::;
q=q';
%三次线条插值
pp=csape({x,y},z');%注意跟interp2的区别,有个转置
z0=fnval(pp,{p,q});
mesh(p,q,z0');%注意跟interp2的区别,有个转置
title('三次线条插值');
运行结果:
2、二维插值之插值节点为散乱节点
已知 n 个节点: ( xi , yi , zi )(i = 1,2,…, n) ,求点 (x, y) 处的插值 z 。
对上述问题, Matlab 中提供了插值函数 griddata,其格式为:
ZI = GRIDDATA(X,Y,Z,XI,YI)
其中 X、 Y、 Z 均为 n 维向量,指明所给数据点的横坐标、纵坐标和竖坐标。向量 XI、
YI 是给定的网格点的横坐标和纵坐标,返回值 ZI 为网格( XI, YI)处的函数值。 XI
与 YI 应是方向不同的向量,即一个是行向量,另一个是列向量。
eg:
%散乱节点的二维插值
x=[ 103.5 185.5 157.5 107.5 117.5];
y=[7.5 141.5 22.5 137.5 85.5 -6.5 - 56.5 -66.5 -33.5];
z=-[ ];
x0=[::];
y0=[-::]';
z0=griddata(x,y,z,x0,y0,'cubic');%保凹凸性3次插值
%[xx,yy]=meshgrid(x0,y0);无需采样,故不需要该函数
mesh(x0,y0,z0);
运行结果:
在上述问题中,补上寻找最大值的程序:
%max(z0)返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值
%find(A) 寻找矩阵A非零元素下标,返回矩阵A中非零元素所在位置
%[i,j,v]=find(A)返回矩阵A中非零元素所在的行i,列j,和元素的值v(按所在位置先后顺序输出)
[p,q]=find(z0==max(max(z0)));
zmax=z0(p,q)
3、最小二乘法实现曲线拟合
(1)用最小二乘法求一个形如 y = a + bx^ 2 的经验公式:
%等价于[,x^][a;b]=y,转换成解超定方程问题,超定方程的解是根据最小二乘法得来的 x=[ ]';
y=[19.0 32.3 49.0 73.3 97.8]';
r=[ones(,),x.^]
ab=r\y
x0=:0.1:;
y0=ab()+ab()*x0.^;
plot(x,y,'o',x0,y0,'r')
(2)多项式拟合
%a=polyfit(x,y,n)用多项式求过已知点的表达式,其中x为源数据点对应的横坐标,可为行向量、矩阵,y为源数据点对应的纵坐标,可为行向量、矩阵,n为你要拟合的阶数,一阶直线拟合,二阶抛物线拟合,并非阶次越高越好,看拟合情况而定,a为m+1的行向量。polyfit函数的数学基础是最小二乘法曲线拟合原理,所得到的函数值在基点处的值与原来点的坐标偏差最小,常用于数据拟合,polyfit 做出来的值从左到右表示从高次到低次的多项式系数。
如果要求拟合函数在x`点的函数值,可以调用polyval(a,x`)函数
eg:
x0=[ ];
y0=[ ];
%画出散点图
plot(x0,y0,'ro');
hold on
%用线性拟合
p=polyfit(x0,y0,);
z0=polyval(p,x0);
plot(x0,z0);
运行结果:
4、最小二乘优化 (最小二乘:least square)
1、lsqlin函数
eg:
%拟合形如y=a+bx^2的函数
%采样点
x=[ ]';
y=[ 32.3 73.3 97.8]';
r=[ones(,),x.^];
ab=lsqlin(r,y)
x0=:0.1:;
y0=ab()+ab()*x0.^;
plot(x,y,'o',x0,y0,'r')
运行结果:
5、曲线拟合与函数逼近
eg:
求 f(x) =cos x, (-pi/2<=x<=pi/2) 在 H = Span{1, x^2 , x^4} 中的最佳平方逼近多项式。
程序如下:
syms x%定义符号数值
base=[,x^,x^];
y1=base.'*base
y2=cos(x)*base.'
r1=int(y1,-pi/,pi/)
r2=int(y2,-pi/,pi/)
a=r1\r2%a为符号数值
xishu1=double(a)%化简符号数值
digits()%设置符号数值的精度
xishu2=vpa(a)%任意精度(符号类)数值
运行结果:
y1 = [ 1, x^2, x^4]
[ x^2, x^4, x^6]
[ x^4, x^6, x^8] y2 = cos(x)
x^2*cos(x)
x^4*cos(x) r1 = [ pi, pi^3/12, pi^5/80]
[ pi^3/12, pi^5/80, pi^7/448]
[ pi^5/80, pi^7/448, pi^9/2304] r2 = 2
pi^2/2 - 4
pi^4/8 - 6*pi^2 + 48 a = (15*(pi^4 - 308*pi^2 + 3024))/(4*pi^5)
-(210*(pi^4 - 228*pi^2 + 2160))/pi^7
(1260*(pi^4 - 180*pi^2 + 1680))/pi^9 xishu1 = 0.9996
-0.4964
0.0372 xishu2 = 0.99957952
-0.49639233
0.037209327 >>
所以y的最佳平方逼近多项式为y=0.9996-0.4964x^2+0.0372x^4
Matlab随笔之插值与拟合(下)的更多相关文章
- Matlab随笔之插值与拟合(上)
原文:Matlab随笔之插值与拟合(上) 1.拉格朗日插值 新建如下函数: function y=lagrange(x0,y0,x) %拉格朗日插值函数 %n 个节点数据以数组 x0, y0 输入(注 ...
- matlab学习——05插值和拟合(黄河小浪底调水调沙问题)
05插值和拟合 黄河小浪底调水调沙问题 data3.txt 1800 1900 2100 2200 2300 2400 2500 2600 2650 2700 2720 2650 32 60 75 8 ...
- matlab学习——05插值和拟合(一维二维插值,拟合)
05插值和拟合 1.一维插值 (1) 机床加工零件,试用分段线性和三次样条两种插值方法计算.并求x=0处的曲线斜率和13<=x<=15范围内y的最小值. x0=[0 3 5 7 9 11 ...
- matlab——插值与拟合
@ 目录 前言 一.拟合 1.定义 2.三种判别准则 3.最小二乘法 (1)一般形式 (2)常用函数 (3)matlab实现 二.插值 1.定义 2.方法 (1)分段线性插值 (2)拉格朗日插值多项式 ...
- Matlab曲面拟合和插值
插值和拟合都是数据优化的一种方法,当实验数据不够多时常常须要用到这样的方法来绘图. 在matlab中都有特定的函数来完毕这些功能. 这两种方法的确别在于: 当測量值是准确的,没有误差时,一般用插值: ...
- Matlab随笔之画图函数总结
原文:Matlab随笔之画图函数总结 MATLAB函数画图 MATLAB不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示(Scientific visualization).本节将介绍MATL ...
- Matlab随笔之矩阵入门知识
原文:Matlab随笔之矩阵入门知识 直接输入法创建矩阵 – 矩阵的所有元素必须放在方括号“[ ]”内: – 矩阵列元素之间必须用逗号“,”或空格隔开,每行必须用“;”隔开 – 矩阵元素可以是任何不含 ...
- Matlab随笔之线性规划
原文:Matlab随笔之线性规划 LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t. ...
- Matlab随笔之指派问题的整数规划
原文:Matlab随笔之指派问题的整数规划 注:除了指派问题外,一般的整数规划问题无法直接利用Matlab函数,必须Matlab编程实现分支定界法和割平面解法. 常用Lingo等专用软件求解整数规划问 ...
随机推荐
- JavaScript对象的创建
原文 简书原文:https://www.jianshu.com/p/6cb1e7b7e379 大纲 前言 1.简单方式创建对象的方法 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对 ...
- angular组件间的信息传递
原文 https://www.jianshu.com/p/82207f2249c1 大纲 1.父组件向子组件传递信息:通过属性 2.子组件向父组件传递信息:通过事件 3.父组件获取子组件的信息:通过调 ...
- [AngularFire 2] Protect Write Access Using Security Rules
We cannot allow un-auth user to change the database data as they want, for Firebase, it is easy just ...
- adb常用命令 分类: H1_ANDROID 2013-09-08 15:22 510人阅读 评论(0) 收藏
安装软件 adb install apk文件名称.apk 重新安装该软件 adb install -r apk文件名称.apk 卸载apk软件 adb uninstall apk包名.apk ...
- 在线生成 QR Code
http://tool.oschina.net/qr 在线生成二维码(QR码)-采用ZXing与d-project
- Android 判断软键盘弹出并隐藏的简单完美解决方案
最近项目中有一个编辑框,下面是个ListView.在触发编辑框弹出软键盘后,ListView还能滑动,并且ListView的item还能响应单击.这样的体验效果很不好.于是便想在滑动或单击item时判 ...
- 断言(Assert)与异常(Exception)
## 断言和异常 断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置. 异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性. ## 断言的使用 在防御式编程中经常会用断 ...
- [Ramda] Pick and Omit Properties from Objects Using Ramda
Sometimes you just need a subset of an object. In this lesson, we'll cover how you can accomplish th ...
- svn服务配置
1关闭所有svn服务 nie-xiao-bo-mac-pro:svnproject mac$ killall -9 svnserve 2.开启某文件路径svn服务 nie-xiao-bo-mac-pr ...
- java取奇偶数的基本练习
public class JiOu { public static void main(String[] args) { int a = 11; System.out.println("这个 ...