声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3694|回复: 15

[综合讨论] 我做曲线拟合,明明原本散点图是曲线,拟合出来却是直线

[复制链接]
发表于 2009-5-5 10:08 | 显示全部楼层 |阅读模式

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

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

x
我做曲线拟合,明明原本得到的散点图趋势是曲线,拟合出来却是直线,并没有二次项和一次项,为什么哦?不都是这样拟合的么?

%%w自变量,z因变量
clc; clear;
N=5120; T=10;  t=linspace(0,T,N);
m1=17.248; m2=34.496; m3=17.248;
m11=46.347; m22=54.238; m33=89.096;
w1=57.158;w2=131.05;w3=157.92;
for w=40:0.1:170
q1=2.9973*(500*sin(28579/500*t)*w-28579*sin(w*t))/(500*w-28579)/(500*w+28579);
q2=0.05032*(20*sin(2621/20*t)*w-2621*sin(w*t))/(20*w-2621)/(20*w+2621);
q3=0.0100*(25*sin(3948/25*t)*w-3948*sin(w*t))/(25*w-3948)/(25*w+3948);
x=0.294*q1+q2+0.775*q3; y=20*log10(abs(x)); z=max(y);
plot(w,z,'r'); hold on;
end
%%%%%%到此,出来是散点图
%%%添加如下代码
p=polyfit(w,z,2); wi=200:0.05:550; zi=polyval(p,wi);
plot(wi,zi)
%%%%出来却是多了一条毫不沾边的直线!

请指教啊!

[ 本帖最后由 ChaChing 于 2009-5-5 10:57 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-5-5 11:10 | 显示全部楼层

回复 楼主 yuhuihui 的帖子

1.LZ的w/z仅是一个值!?
2.w范围为40~170, 拟合wi范围为200~500!?

[ 本帖最后由 ChaChing 于 2009-5-5 11:15 编辑 ]
发表于 2009-5-5 11:12 | 显示全部楼层
我认为的几处错误(参见红色部分),呵呵,和楼上的意见一致:
%%w自变量,z因变量
clc; clear;
N=5120; T=10;  t=linspace(0,T,N);
m1=17.248; m2=34.496; m3=17.248;
m11=46.347; m22=54.238; m33=89.096;
w1=57.158;w2=131.05;w3=157.92;
i=1;      %% new %%
for w=40:0.1:170
q1=2.9973*(500*sin(28579/500*t)*w-28579*sin(w*t))/(500*w-28579)/(500*w+28579);
q2=0.05032*(20*sin(2621/20*t)*w-2621*sin(w*t))/(20*w-2621)/(20*w+2621);
q3=0.0100*(25*sin(3948/25*t)*w-3948*sin(w*t))/(25*w-3948)/(25*w+3948);
x=0.294*q1+q2+0.775*q3; y=20*log10(abs(x));
z(i)=max(y); plot(w,z(i),'r'); hold on;i=i+1;     %% new %%
end
%%%%%%到此,出来是散点图
%%%添加如下代码
w=(40:0.1:170 )'; z=z';     %% new %%
p=polyfit(w,z,2); wi=200:0.05:550; zi=polyval(p,wi);
plot(wi,zi)
%%%%出来却是多了一条毫不沾边的直线!

[ 本帖最后由 ChaChing 于 2009-5-5 18:59 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2009-5-5 18:00 | 显示全部楼层

回复 板凳 friendchj 的帖子

不好意思,我看不到哪里是用红色标明的,只明白一点我没有加循环,而且不应该一会儿w范围为40~170, 拟合wi范围为200~500。
本人只是使用matlab这个工具,在matlab上是非常菜的。
我不明白“w=(40:0.1:170 )';
z=z';
p=polyfit(w,z,2); wi=200:0.05:550; zi=polyval(p,wi);
plot(wi,zi)”
这一段什么意思啊?加那个转置干什么?这段话该怎样表示才对呢?
 楼主| 发表于 2009-5-5 18:01 | 显示全部楼层

回复 沙发 ChaChing 的帖子

恩,因为没有i循环,确实不对

wi的范围也不对

头大啊。
 楼主| 发表于 2009-5-5 18:09 | 显示全部楼层
请问怎样改才可以呢?
w有一组数
z对应也有一组数

对w和z拟合怎么样才对呢?
发表于 2009-5-5 18:54 | 显示全部楼层
 楼主| 发表于 2009-5-5 21:57 | 显示全部楼层
可是还是不对...

[ 本帖最后由 yuhuihui 于 2009-5-5 22:09 编辑 ]
发表于 2009-5-5 22:49 | 显示全部楼层

回复 8楼 yuhuihui 的帖子

请详细说明,呵呵
发表于 2009-5-11 21:20 | 显示全部楼层
  1. clc
  2. clear
  3. N=5120; T=10; t=linspace(0,T,N);
  4. m1=17.248; m2=34.496; m3=17.248;
  5. m11=46.347; m22=54.238; m33=89.096;
  6. w1=57.158;w2=131.05;w3=157.92;
  7. i=1; %% new %%
  8. for w=40:0.1:170
  9. q1=2.9973*(500*sin(28579/500*t)*w-28579*sin(w*t))/(500*w-28579)/(500*w+28579);
  10. q2=0.05032*(20*sin(2621/20*t)*w-2621*sin(w*t))/(20*w-2621)/(20*w+2621);
  11. q3=0.0100*(25*sin(3948/25*t)*w-3948*sin(w*t))/(25*w-3948)/(25*w+3948);
  12. x=0.294*q1+q2+0.775*q3; y=20*log10(abs(x));
  13. z(i)=max(y); i=i+1; %% new %%
  14. end
  15. %%%%%%到此,出来是散点图
  16. %%%添加如下代码
  17. w=(40:0.1:170 )'; z=z'; %% new %%
  18. p=polyfit(w,z,2);
  19. w1=40:5:170;
  20. z1=polyval(p,w1);
  21. plot(w,z,'r'); hold on;
  22. plot(w1,z1,'o')
  23. legend('原始数据','拟合数据')
复制代码

untitled.jpg
不知道为何你的不显示拟合曲线?

评分

1

查看全部评分

 楼主| 发表于 2009-5-11 22:02 | 显示全部楼层
谢谢friendchj 。
可是拟合后,为什么峰值都没有了呢?
拟合的那个结果好像不对啊...
拟合后的曲线不是应该和原曲线一致的么?
 楼主| 发表于 2009-5-11 22:03 | 显示全部楼层
我一直认为拟合是让拟合后的曲线比原曲线更光滑...
难道不是么?
发表于 2009-5-11 22:10 | 显示全部楼层

回复 12楼 yuhuihui 的帖子

拟合只是找出源数据的函数关系,如果要想光滑,应该进行插值操作。对于你的数据,在40-170这个范围内,数据不符合二次多项式的形式,因此用二次多项式拟合,结果也肯定不对。

评分

1

查看全部评分

 楼主| 发表于 2009-5-11 22:35 | 显示全部楼层
哦,明白些了,那我是应该做插值了啊?!
我先自己看看能不能搞定,不能的话,还麻烦friendchj以及各位老大指教!
发表于 2009-5-12 08:24 | 显示全部楼层
参考下
【资源共享】MATLAB曲线拟合向导(Curve Fitting Toolbox) by octopussheng
http://forum.vibunion.com/forum/thread-49726-1-1.html

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-3 15:54 , Processed in 0.063070 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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