wgwhl 发表于 2010-8-6 15:57

三维数据拟合问题

已知测试数据:x,y,z 分别是 5 X 9 矩阵,现要在 x,y 平面内绘制 z 的等值线。我的拟合方法是按照下面的方法进行的,不知道是否正确,请高手指点。
for index = 1 : 5
    xi = x(: , index);
    yi = y(: , index);
    zi = y(: , index);

    % 1、用 x,y 拟合曲线多项式
    FX = polyfit(xi,yi,4);

    % 2、根据拟合曲线多项式取1000个点的值用于画曲线图
    Xi = linspace(min(xi),max(yi),1000);    % 得到 1000 个 x 值
    Yi = polyval(FX, Xi);% 得到 1000 个 y 值
   
    % 3、用 Xi,Yi 拟合Zi
    F = ;
    a = F \ zi;
    Zi = a(1) + a(2) * Xi + a(3) * Yi;   %得到 1000 个 z 值

    % 4、将每一行拟合后的数据加入各自的拟合数据矩阵
    X = ;   % 5 X 1000 矩阵数据
    Y = ;   % 5 X 1000 矩阵数据
    Z = ;   % 5 X 1000 矩阵数据
end
% 后面的代码就是用plot 画 X,Y的 平面图,用 contour 画 Z 在X,y平面的等值线图
因为数学基础不好,不知道这样拟合出来的数据是否合理?另外:如何做,使结果是 1000 X 1000 的矩阵数据呢?请指点。
谢谢!

另外:如果 X,Y平面是对数坐标,用 contour 画出来的等值线是正确的吗?

[ 本帖最后由 wgwhl 于 2010-8-6 16:14 编辑 ]

ChaChing 发表于 2010-8-7 11:46

回复 楼主 wgwhl 的帖子

没LZ的原始数据, 不好试LZ的程序!:loveliness:
Xi = linspace(min(xi),max(yi),1000);是否有误?
还有试试griddata可否满足LZ需求?

wgwhl 发表于 2010-8-7 12:18

回复 沙发 ChaChing 的帖子

是的,这个地方敲错了,因为源程序变量不是这个,在发帖的时候改成x,y,z了,
Xi = linspace(min(xi),max(yi),1000);应为Xi = linspace(min(xi),max(xi),1000);

我已经想到了其他办法,先试试再来这里问吧
页: [1]
查看完整版本: 三维数据拟合问题