Matlab 版 (精华区)
发信人: zjliu (Robusting), 信区: Matlab
标 题: 数学工具FAQ[smth]--第一节:一般性问题(2)
发信站: 哈工大紫丁香 (Tue Dec 17 14:57:41 2002) , 转信
===================================
4).什么叫拟合?什么叫插值?二者的区别是什么?
:#FangQ(Qianqian.Fang@dartmouth.edu),2002/6/21, BigGreen/MathTools #
插值和拟合都是函数逼近或者数值逼近的重要组成部分
他们的共同点都是通过已知一些离散点集M上的约束,求取一个定义
在连续集合S(M包含于S)的未知连续函数,从而达到获取整体规律的
目的,即通过"窥几斑"来达到"知全豹"。
简单的讲,所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn},通
过调整该函数中若干待定系数f(λ1, λ2,…,λ3), 使得该函数与已知点集的
差别(最小二乘意义)最小。如果待定函数是线性,就叫线性拟合或者
线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表
达式也可以是分段函数,这种情况下叫作样条拟合。
而插值是指已知某函数的在若干离散点上的函数值或者导数信息,通
过求解该函数中待定形式的插值函数以及待定系数,使得该函数在给
定离散点上满足约束。插值函数又叫作基函数,如果该基函数定义在
整个定义域上,叫作全域基,否则叫作分域基。如果约束条件中只有
函数值的约束,叫作Lagrange插值,否则叫作Hermite插值。
从几何意义上将,拟合是给定了空间中的一些点,找到一个已知形式
未知参数的连续曲面来最大限度地逼近这些点;而插值是找到一个(
或几个分片光滑的)连续曲面来穿过这些点。
具体插值拟合的计算参见本节7和第二节6/7/9/40的回复.
===================================
5).如何生成任意分布的随机变量?
:#FangQ(Qianqian.Fang@dartmouth.edu),2002/6/21, BigGreen/MathTools #
首先要生成一个平均分布的伪随机数a
最简单的一种算法是同余法:
y(n+1)=a*y(n) mod M
其中(M, a) 常见的一组取值为(2^31-1= 2147483647, 7^5=16807),可以
生成[0~M-1]上的随机数,通过线性变换可以得到0~1上的均匀随机数
如果你需要产生概率分布函数(PDF)为f(x)的一维随机变量,首先计算
它的概率累积函数(PCF) F(x)=Integrate[f(t),{t,0,x}],则F^-1(y)
既为所需要的随机变量。其中F^-1为PCF的反函数,y为一个[0~1]上的
平均分布随机变量。对于复杂的PDF无法求解反函数的,可以在资料上
查找"变换抽样法"。
===================================
6).FFT输入和输出的意义是什么?
:#FangQ(Qianqian.Fang@dartmouth.edu),2002/6/21, BigGreen/MathTools #
我们可以把FFT简单地看作一个变换器,输入N+1个数,输出N+1个数
,但他们对应的意义不同,如果把输入当作时域,则输出为频域,表
怔了其对应域的变化快慢。
假设输入信号本身的频率为fc(或者说频带宽为fc),被频率为fs的冲击
串采样(由采样定理,fs >= 2*fc),则变换前的N+1个数字对应的x
轴为{t0,t1,…tN}={0,Ts,2*Ts,....,N*Ts} (其中Ts为1/fs,为采样周期)
则变换后的N+1个数对应的x轴变为频率,范围为0~fs,以fs/N为间隔,
既为频率点{0,fs/N,2*fs/N,……,fs},在matlab中如果用fftshift(fft(data))
,则变换后对应x轴为-fs/2~fs/2,如果满足采样定理的化,信号频带-fc~fc
就包含在转换后的频谱里面了,就不会有失真。
注意:变换后的数字为复数,因为其中包括了幅度的信
息,abs(fftshift(fft(data)))为幅度,angle(fftshift(fft(data)))为相位
===================================
7).我有一组x,y,z值,非规则点阵,如何绘制曲面或者等高线或者插值?
:#FangQ(Qianqian.Fang@dartmouth.edu),2002/6/12, SMTH/MathTools #
1.如果你使用matlab,有如下四种解决办法
1.1:
tri=delaunay(x,y);
trimesh(tri,x,y,z); or trisurf(tri,x,y,z);
1.2: 如果你想得到更加精细和光滑的曲线,而且想绘制coutour
则需要用griddata()插值:
[xi,yi]=meshgrid(min(x):dx:max(x),min(y):dy:max(y));
[zi,xi,yi]=griddata(x,y,z,xi,yi,'cubic');
contourf(xi,yi,zi,20);
1.3: 如果你的matlab安装有PDE Toolbox,可以使用pdeplot(),参见帮助
1.4: 如果你可以连接国外,可以使用MIT的Kirill K. Pankratov写的SaGA
工具箱,下载地址在:
http://www.ai-geostats.org/software/Geostats_software/SAGA.htm
http://globec.whoi.edu/software/saga/
2.如果你使用Tecplot
1.先将三列数据按照顺序保存在一个文本文件中
data.dat文件格式为
x1 y1 z1
x2 y2 z2
...
2. Tecplot菜单File\Load Data file,在左上角选择2D
3. 选中zone,菜单Data\Triangulate
4. 双击该zone,将mesh掩藏掉,把contour打开,然后在
左上角选择3D
5. 如果想插值,先创建一个更细的网格,然后用data菜单中
Interpolation
3.如果你使用Mathematica
data={{x1,y1,z1},{x2,y2,z2},......};
fun=Interpolation[data];
Plot3D[fun[x,y],{x,xmin,xmax},{y,ymin,ymax}];
ContourPlot[fun[x,y],{x,xmin,xmax},{y,ymin,ymax}];
当然,其他还有很多绘图工具,有待补充
===================================
8).请问哪里能找到绘制等高线的算法?
:#FangQ(Qianqian.Fang@dartmouth.edu),2002/7/23, SMTH/MathTools #
在一般的计算机图形学的教材中都有常见算法的描述,下面的网址
有免费的C代码
http://members.bellatlantic.net/~vze2vrva/thesis.html
--
※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 202.118.229.86]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.669毫秒