声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1691|回复: 2

[编程技巧] 三维数据拟合问题

[复制链接]
发表于 2010-8-6 15:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

  1. for index = 1 : 5
  2.     xi = x(: , index);
  3.     yi = y(: , index);
  4.     zi = y(: , index);

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

  7.     % 2、根据拟合曲线多项式取1000个点的值用于画曲线图
  8.     Xi = linspace(min(xi),  max(yi),  1000);    % 得到 1000 个 x 值
  9.     Yi = polyval(FX, Xi);  % 得到 1000 个 y 值
  10.    
  11.     % 3、用 Xi,Yi 拟合Zi
  12.     F = [ones(size(zi)), xi, yi];
  13.     a = F \ zi;
  14.     Zi = a(1) + a(2) * Xi + a(3) * Yi;   %  得到 1000 个 z 值

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

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

[ 本帖最后由 wgwhl 于 2010-8-6 16:14 编辑 ]
回复
分享到:

使用道具 举报

发表于 2010-8-7 11:46 | 显示全部楼层

回复 楼主 wgwhl 的帖子

没LZ的原始数据, 不好试LZ的程序!:loveliness:
Xi = linspace(min(xi),  max(yi),  1000);是否有误?
还有试试griddata可否满足LZ需求?
 楼主| 发表于 2010-8-7 12:18 | 显示全部楼层

回复 沙发 ChaChing 的帖子

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

我已经想到了其他办法,先试试再来这里问吧
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 15:46 , Processed in 0.078378 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表