PDA

查看完整版本 : [MATLAB基础] 四维数据的拟合并求峰值【急】


ouyangj0
2010-03-30, 10:28
问题:

假如有m=f(x,y,z),共有(x0,y0,z0,m0)…(x26,y26,z26,m26),共27点。能否拟合出一个最大的M来。

X是1到3步长为1的数列,Y和Z也是如此,这样一共是27点,每点对应一m值,要根据这27点求出一个最大的M,并M对应之xyz的准确坐标,此坐标可能为浮点。


换个说法:
有3*3*3的27个点,每个点对应一个数值。比如:(1,1,1,4),(1,1,2,7),(1,1,3,5),(1,2,1,25)……(3,3,3,10)。要求这个数值中的最大值。最简单的办法是遍历比较这27个点,可能求出的是(1,2,1,25),因为25最大;但现在不想用遍历,而是想先拟合出一个函数,然后再求这个函数的峰值。这样的峰值可能比之前通过比较得来的更好。这个峰值可能不在这27个点对应的第四维数值中。我不仅需要这个峰值,也需要这个峰值对应的前三个坐标,这三个坐标可能不是整数,而是浮点数。

再比如二维的:三个点(1,2)(2,8)(3,6),(4,5)如果用极值来算肯定是2对应的8这个数最大。但如果用这三个点来拟合一个抛物线(是拟合,不是算,因为可能没有抛物线经过这四个点,所以拟合出一个最接近的)。则可能这个顶点会更靠近(3,6)这个点,很可能是(2.5,8.7)之类的……


已有思路:先找一个模型,然后再拟合出这个模型的参数,再根据这个模型求峰值。我现在的模型是:

f=@(x,y,z)(b(1)*x.*x.*x,b(2)*y.*y.*y,b(3)*z.*z.*z,b(4)*x.*x.*y,b(5)*x.*x.*z,b(6)*y.*y.*z,b(7)*y.*y.*x,b(8)*z.*z.*x,b(9)*z.*z.*y,b(10)*x.*x,b(11)*y.*y,b(12)*z.*z,b(13)*x.*y,b(14)*y.*z,b(15)*z.*x,b(16)*x,b(17)*y,b(18)*z,b(19)); 大家可以选其他模型或者多个模型比较其误差之类。可根据下面说的应用场景来确定模型。


应用场景:

有三张图片,每张图片是3*3,如果把三张图片从上到下叠放,并设为1、2、3层。这样就有27个点。 每个点都有灰度值。现在要求27个点的灰度值最大值。以前的做法是直接比较求极值,但我想用拟合的方式来求。就是想求出一个更准确的浮点数的最大值(灰度)来,并找到其对应的更准确的位置,比如M=f(1.2,2.4,1.5)=26.7。也就是第1.5层的横坐标为1.2,纵坐标为2.4处可能是更好的峰值26.7。



测试数据:

x= [1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3]
y= [1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3]
z= [1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3]
m=[5 4 6 12 7 9 14 1 5 20 4 7 7 17 8 6 23 17 1 4 6 7 4 10 9 7 3]


输出:
最大的预测峰值:最大值与最小值,及其他们对应的x,y,z坐标(浮点数)

谢谢各位!!!


PS:我找到一个三维拟合的帖子,提供了两个解答,但没有看懂,也不知道如何换到4维上呢??
帖子的地址是:http://zhidao.baidu.com/question/65188680.html