找回密码
 注册
Simdroid-非首页
查看: 93|回复: 3

polyfit 与polyder 问题求助

[复制链接]
发表于 2009-4-20 15:30:39 | 显示全部楼层 |阅读模式 来自 上海
各位大侠:
用polyfit可以对矩阵中某一列与对应列进行拟合,然后用polyder求导数;
如a=
5-2110.88-6477.71
4.5-2344.45-6250.34
4-2573.46-6026.88
3.5-2796.84-5808.39
3-3013.1-5596.38
2.5-3229.21-5383.86
2-3445.52-5170.49
1.5-3661.92-4956.38
1-3878.31-4741.62
0.5-4094.58-4526.34
0-4310.62-4310.62
-0.5-4526.34-4094.58
-1-4741.62-3878.31
-1.5-4956.38-3661.92
-2-5170.49-3445.52
-2.5-5383.86-3229.21
-3-5596.38-3013.1
-3.5-5808.39-2796.84
-4-6026.88-2573.46
-4.5-6250.34-2344.45
-5-6477.71-2110.88

上述矩阵a,可以用

q1=polyfit(a(:,1),a(:,2),1);
q2=polyfit(a(:,1),a(:,3),1);
d1=polyder(q1);
d2=polyder(q2);
求得第二、三列对第一列的拟合关系及一阶导数,
但是,若在a1=(-5,-2)、(-2,2)、(2,5)三段内分别求第二、三列对第一列的拟合关系及导数,怎么实现呢?

感谢指导!
发表于 2009-4-20 15:50:52 | 显示全部楼层 来自 北京
Simdroid开发平台
II   你可以按段分成三个小矩阵,再按你上面的代码执行即可
   既然知道,他们在矩阵中相应的位置,那就好办
   如果不知道位置,可以加个判断,找出相应范围内的数据
   再进行拟合和微分即可

  1.      ad1=find(a(:,1)<=-2&a(:,1)>=-5)
  2.      ad2=find(a(:,1)<=2&a(:,1)>=-2)
  3.      ad3=find(a(:,1)<=5&a(:,1)>=2)
  4.      a1=a(ad1,:)
  5.      a2=a(ad2,:)
  6.      a3=a(ad3,:)
  7.      q1=polyfit(a1(:,1),a1(:,2),1);
  8.      q2=polyfit(a1(:,1),a1(:,3),1);
  9.      d1=polyder(q1);
  10.      d2=polyder(q2);
  11.      q3=polyfit(a2(:,1),a2(:,2),1);
  12.      q4=polyfit(a2(:,1),a2(:,3),1);
  13.      d3=polyder(q3);
  14.      d4=polyder(q4);
  15.      q5=polyfit(a3(:,1),a3(:,2),1);
  16.      q6=polyfit(a3(:,1),a3(:,3),1);
  17.      d5=polyder(q5);
  18.      d6=polyder(q6);

  19.      
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-4-20 16:05:53 | 显示全部楼层 来自 上海
斑竹非常到位!
我的数据非常庞大,上述仅是举了个例子,凭肉眼找其位置的话极其不便,斑竹指出了利用判断语句来查找并赋值的方法和命令,方法极其到位!
帮我解决了一个大问题。
十分感激!
回复 不支持

使用道具 举报

发表于 2010-5-11 22:54:29 | 显示全部楼层 来自 陕西西安
恩,不错,很强大
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 23:29 , Processed in 0.053324 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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