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等专用软件求解整数规划问 ...
随机推荐
- ZOJ Special AC String 水
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3702 题目大意: 对于给定的一个字符串,满足如下要求输出AC,否则WA(好吧我 ...
- hdu 2577 How to Type(DP)
How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- Zookeeper实战之嵌入式执行Zookeeper集群模式
非常多使用Zookeeper的情景是须要我们嵌入Zookeeper作为自己的分布式应用系统的一部分来提供分布式服务.此时我们须要通过程序的方式来启动Zookeeper.此时能够通过Zookeeper ...
- Mysql 安装(Using Generic Binaries)
本次 Mysql 为Community 5.6.21 版本号.安装方式为通用Linux安装方式.即大多数Linux平台都能够採用该方式进行安装. 一.安装步骤 1.安装环境 1)Centos 7.0. ...
- 数据结构与算法——常用数据结构及其Java实现
前言 仿佛一下子,2017年就快过去一半了,研一马上就要成为过去式了,我打算抓住研一的尾巴,好好梳理一下数据结构与算法,毕竟这些基础知识是很重要的嘛.所以准备在这里搞一个系列的文章,以期透彻. 本系列 ...
- c++11之初始化列表
一.前言 C++的学习中.我想每一个人都被变量定义和申明折磨过,比方我在大学笔试过的几家公司.都考察了const和变量,类型的不同排列组合,让你差别有啥不同.反正在学习C++过程中已经被折磨惯 ...
- Android自定义控件View(二)继承控件
在前一篇博客中学习了Android自定义控件View的流程步骤和注意点,不了解的童鞋可以参考Android自定义控件View(一).这一节开始学习自定义控件View(二)之继承系统已有的控件.我们来自 ...
- NSArray NSMutableArray 初始化
NSArray* Array;//此时数组没有初始化,数组=nil [Array objectAtIndex:2];//不会调用其属性方法,这里不会崩溃 NSMutableArray *Mutable ...
- 第六章:任务执行——Java并发编程实战
任务:通常是一些抽象的且离散的工作单元.大多数并发应用程序都是围绕"任务执行"来构造的,把程序的工作分给多个任务,可以简化程序的组织结构便于维护 一.在线程中执行任务 任务的独立性 ...
- 《erlang程序设计》学习笔记-第3章 分布式编程
http://blog.csdn.net/karl_max/article/details/3985382 1. erlang分布式编程的基本模型 (1) 分布式erlang:这种模型可以让我们在一个 ...