24小时热门版块排行榜    

查看: 2442  |  回复: 7
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

hudie012

荣誉版主 (文坛精英)

小兔爱吃萝卜

优秀版主优秀版主优秀版主

[求助] matlab数据拟合问题求助

已知一组数据y,x。根据这组数据要拟合一个公式,确定其中的参数,拟合公式的形式为:y=A*x^n,其中A,n是要拟合的参数。
没有接触过matlab,所以也不懂咋弄,有没有帮忙拟合一下,写一下程序。[ Last edited by hudie012 on 2012-9-6 at 15:04 ]
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 数据.xlsx
  • 2012-09-06 15:04:09, 27.62 K

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

todayisagift
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hudie012

荣誉版主 (文坛精英)

小兔爱吃萝卜

优秀版主优秀版主优秀版主

引用回帖:
5楼: Originally posted by xxz903 at 2012-09-10 11:03:18
代码如下! 结果在图上

function F=hu(x,xdata)  %x=[]
A=x(1);
n=x(2);
x=xdata;
y=A.*x.^n;
F=;
end



data=;

xdata=data(:,1);  %Im
ydata=data(:,2);  %
options= optimset('MaxFunEvals', ...

谢谢,选择应助,否则没法给你评分
todayisagift
6楼2012-09-10 17:40:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 8 个回答

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
hudie012: 金币+5 2012-09-10 17:38:31
xdata=1:10;
ydata=0.5*xdata.^3;   %xdata,ydata是待拟合数据,这里做个例子
p0=[1,5];   %p0是给出的拟合初值,为了与正确结果相区别,随便写了一个
p = lsqcurvefit(@(p,xdata)p(1)*xdata.^p(2),p0,xdata,ydata)  %拟合出来的p就是实际结果,实际结果为0.5,和3,与第2行的一致
showmethemoney
2楼2012-09-06 10:50:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

z萝莉

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
csgt0: 金币+1, 多谢应助 2012-09-06 13:20:48
hudie012: 金币+5 2012-09-10 17:38:40
Sample TextSample Text
这个其实并不难,在研一的课上会学数值分析方法,看上去这是一个非线性函数的拟合,其实可以通过对左右取自然对数将其转化为线性函数的拟合。取对数得到:ln(y)=n*ln(a*x)=n*(ln(a)+ln(x))=n*ln(a)+n*ln(x)这样就可以把原来的式子化为拟合数据y=a*x+b
方法如下:x1=log(x);
y1=log(y);
m=ployfit(x1,y1,1)
然后会出现两个数(这里写成m1,m2),则式子就是ln(y)=m1*ln(x)+m2
所以n=m1,n*ln(a)=m2.
做好自己该做的事
3楼2012-09-06 11:36:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★
hudie012: 金币+5 2012-09-10 17:38:53
拟合效果并不好,建议修改公式
CODE:
data=xlsread('数据.xlsx');
xdata=data(:,1);
ydata=data(:,2);
p0=[0.1,0.5];
options=optimset('MaxFunEvals',1000);
[p,r] = lsqcurvefit(@(p,xdata)p(1)*xdata.^p(2),p0,xdata,ydata,[],[],options);
format long
p
r
y=p(1)*xdata.^p(2);
plot(xdata,ydata,'r',xdata,y,'b')

showmethemoney
4楼2012-09-06 16:26:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见