lubinxu 发表于 2009-6-14 10:28:37

请教:大量数据点三维插值/多维插值

本帖最后由 messenger 于 2009-12-16 18:25 编辑

已经得到其他软件计算的温度场数据(格式x,y,z,T),现在需要知道其他任意一点x0,y0,z0对应的T值,请教哪位大哥给点思路怎么插值?另外数据点个数多达5w~6w多个,怎么办,先谢谢了
      x            y                   z               T
   38.6492   111.6059   0.20217000    2.36781584
   38.6492   111.6057   0.39469000    2.36840782
   38.6493   111.6052   0.61911000    2.36684528
   38.6494   111.6047   0.80288000    2.36517863
   38.6495   111.6041   1.02447000    2.36367391
   38.6496   111.6035   1.19333000    2.36198158
   38.6497   111.6028   1.37900000    2.36035166
   38.6499   111.6021   1.58127000    2.35675595
   38.6500   111.6012   1.79987000    2.35529199
   38.6502   111.6002   2.03451000    2.35183106
   38.6504   111.5991   2.28491000    2.34850112
   38.6506   111.5979   2.55067000    2.34532400
   38.6508   111.5965   2.83135000    2.34222764
   38.6511   111.5950   3.12632000    2.33726472
   38.6514   111.5935   3.43477000    2.33265944
   38.6517   111.5917   3.75602000    2.32811651
   38.6520   111.5899   4.08974000    2.32400985
   38.6524   111.5879   4.43574000    2.31815964
   38.6527   111.5858   4.79391000    2.31473928
   38.6531   111.5835   5.16417000    2.30971897
   38.6536   111.5811   5.54648000    2.30337141
   38.6540   111.5786   5.94084000    2.29962711
   38.6545   111.5759   6.34724000    2.29463474
   38.6550   111.5731   6.76575000    2.29052507
   38.6555   111.5701   7.19658000    2.28725131
   38.6560   111.5670   7.63995000    2.28502594
   38.6566   111.5636   8.09617000    2.28203959
   38.6572   111.5601   8.56555000    2.28038295
   38.6579   111.5564   9.04847000    2.27849517
   38.6586   111.5525   9.54531000    2.27813360
   38.6593   111.5485    10.05647000    2.27944147
   38.6600   111.5442    10.58246000    2.28235907
   38.6608   111.5397    11.12399000    2.28577076
   38.6616   111.5349    11.68185000    2.29112513
   38.6625   111.5300    12.25680000    2.29736808
   38.6634   111.5248    12.84951000    2.30576639
   38.6643   111.5193    13.46059000    2.31634073
   38.6653   111.5135    14.09059000    2.32827869
   38.6664   111.5075    14.74000000    2.34167680
   38.6675   111.5012    15.40938000    2.35742544
   38.6686   111.4946    16.09937000    2.37540034
   38.6698   111.4878    16.81059000    2.39480732
   38.6711   111.4806    17.54359000    2.41615413
   38.6724   111.4730    18.29893000    2.43978413
   38.6737   111.4652    19.07718000    2.46489574
   38.6752   111.4570    19.87886000    2.49169829
   38.6766   111.4485    20.70457000    2.51995080

lubinxu 发表于 2009-6-9 13:23:18

请教:大量数据点三维插值/多维插值

本帖最后由 messenger 于 2009-12-16 18:24 编辑

现有一组数据,分别为x,y,z,f,先在要求某个点x0,y0,z0对应的f值,这个怎么插值实现?先谢了
数据为:
x         y          z          f
0.5      10      20      0.08057
0.5      15      20      0.12704
0.5      20      20      0.137
0.5      25      20      0.14857
0.5      30      20      0.15088
1      10      20      0.10161
1      15      20      0.13561
1      20      20      0.14128
1      25      20      0.14693
1      30      20      0.15097
1.5      10      20      0.078873
1.5      15      20      0.1047
1.5      20      20      0.11543
1.5      25      20      0.11896
1.5      30      20      0.12426
2      10      20      0.082246
2      15      20      0.10786
2      20      20      0.11522

messenger 发表于 2009-6-9 16:53:07

help interpn

lubinxu 发表于 2009-6-13 14:25:37

用多维INTERP3试了不行,能不能提供例子,谢谢

messenger 发表于 2009-6-14 16:11:30

想得到任意一点的函数值最好在原始计算软件中解决,一般商业仿真软件都提供这种功能。

如果非要导入Matlab中插值求解,导入数据要按照Matlab格式。

lubinxu 发表于 2009-6-14 22:13:45

关键是另外一种软件与这种软件有不同的数据点,所以必须插值,版主能否提供点在matlab中插值的思路

messenger 发表于 2009-6-14 22:49:48

Matlab插值很简单,直接用命令就可以了

主要是你的数据不对,插值找不到对应的点。

一般要下面这样的数据格式:

x(:,:,1) =
x(:,:,2) =

y(:,:,1) =[-3 -3 -3 -3; 3 3 3 3]
y(:,:,2) =[-3 -3 -3 -3; 3 3 3 3];

z(:,:,1) =[-3 -3 -3 -3; -3 -3 -3 -3]
z(:,:,2) =


T(:,:,1) =[-0.060002 -0.98349 -2.2994 -3.5362; -0.060002 -0.98349 -2.2994 -3.5362];
T(:,:,2) =[-0.060002 -0.98349 -2.2994 -3.5362; -0.060002 -0.98349 -2.2994 -3.5362];

zp2000 发表于 2009-6-15 09:10:01

版主你好,我想借这个帖子问一下,要进行差值的话,如果处理器不能运算浮点,有没有什么比较好的算法能够推荐一下的啊?interpn这个函数有点麻烦呢,需要一点简单点的算法就行

messenger 发表于 2009-6-15 10:35:26

啥处理器呀?这么高级,还不能运算浮点。

不过,你可以这样,根据你要运算数据的大小,以及你要求的精度,将要运算的数据扩大一定的倍数。

比如,要运算的数据为123,你要求小数点后2位有效数字,你可以将数据*1000,变成123000,运算完了,再除1000。

至於差值,不知道你说的是多维插值还是一、二维插值,你提到interpn,可能是要多维插值吧,不过多维插值很麻烦,原来我也以为多维插值只是低维插值的简单扩展。

如果你的数据比较简单的话,可以试试线性插值算法,比interpn简单,interpn的数据准备就很麻烦。

zp2000 发表于 2009-6-15 14:08:03

感谢版主的回答啊,用的是ARM7内核的处理器,用在工业上的,没有硬件的除法器,也不支持浮点数,但是可以用软件的方法定义浮点数和其对应的运算,但是这样要花去大量的计算时间,这个问题我也有点头疼啊!我的查找表是个二维的surface面,即由两个输入确定一个输出,插值算法现在还待定在。。。,相关的内容也可以参考下这个帖子,我还在想办法中。。。
http://forum.simwe.com/thread-884895-1-1.html

lubinxu 发表于 2009-6-17 12:46:57

请问版主,具体用matlab的什么程序命令,谢谢了

cwit 发表于 2009-6-18 22:09:35

本帖最后由 cwit 于 2009-6-18 22:17 编辑

1.从你这个数据来看:
   x            y                   z               T
   38.6492   111.6059   0.20217000    2.36781584
很像经纬度数据,高度数据上的温度数据。

2.你可以将矢量数据,先处理为矩阵数据。X,Y转换为矩阵的索引位置。矩阵的分辨率,可以根据X,Y的最大值最小值范围来设定。

3.X,Y可以作为一个输入参数。

4.这样就可以变成两维数据插值。

借鉴GIS思考方式。

lzx1556 发表于 2009-8-12 15:07:32

matlab计算机图形一书中有插值、拟合等函数的讲解(清华版)。

blsmxb 发表于 2010-5-27 11:26:15

看了半天没看懂~~~

alenku 发表于 2011-7-21 21:47:26

本帖最后由 alenku 于 2011-7-22 17:32 编辑

还不够聪明,看不懂。要是谁能把程序给下,真是感激啊

zhangxiaoxi 发表于 2011-7-30 16:32:18

遇到同样的问题,学校中

tukaiwu 发表于 2011-8-31 16:56:01

messenger 发表于 2009-6-14 16:11 static/image/common/back.gif
想得到任意一点的函数值最好在原始计算软件中解决,一般商业仿真软件都提供这种功能。

如果非要导入Matlab ...

版主你好,请问向楼主的数据一样,能不能用matlab三维插值得到f=f(x,y,z)的表达式?

stats01 发表于 2011-9-15 20:00:27

lubinxu 发表于 2009-6-9 13:23 static/image/common/back.gif
现有一组数据,分别为x,y,z,f,先在要求某个点x0,y0,z0对应的f值,这个怎么插值实现?先谢了
数据为:
x...

这里,Z完全一样,不应作为一个变数,应予剔除。另外,作为曲面拟合,数据点太少了。
页: [1]
查看完整版本: 请教:大量数据点三维插值/多维插值