24小时热门版块排行榜    

查看: 959  |  回复: 7

chaiqing123

金虫 (小有名气)

[求助] matlab回归三参数 求高手解救

自己用最小二乘法 不运行自己的程序如下function binaryfitting_1


options = optimset('Algorithm','Levenberg-Marquardt','MaxFunEvals',5000,'MaxIter',5000);
k0=[0,0,0];
[x,RESNORM,RESIDUAL,EXITFLAG,OUTPUT]=lsqnonlin(@huigui,k0,[],[],options)

function f= huigui(k)

w1=[0
0.173439
0.080751
0.22435
0.583534
0.893463
0.79104
0.685942
0.480876
0.374238
0.273714
0.418471
0.728748
1
]';
a=[0
0.120432
0.090368
0.113979
0.079549
0.031409
0.043315
0.067775
0.089451
0.11814
0.116728
0.138595
0.09497
0
];
w2=1-w1;
for n=1;14
    %目标函数
    b(n)=k(1).*(k(2).*w1(n).*w2(n)-k(3).*w2(n).*w1(n))./(1+k(2).*w1(n)+k(3).*w2(n))
   

end
f=a-b


已知的实验数据
w1=[0
0.173439
0.080751
0.22435
0.583534
0.893463
0.79104
0.685942
0.480876
0.374238
0.273714
0.418471
0.728748
1
]';
a=[0
0.120432
0.090368
0.113979
0.079549
0.031409
0.043315
0.067775
0.089451
0.11814
0.116728
0.138595
0.09497
0
];
w2=1-w1;
有如下关系a=k1.*( k2.*w1.*w2-k3.*w2.*w1 )./(1+k2.*w1+k3.*w2)回归k1 k2 k3
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

caolinggirl

金虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
csgt0: 金币+1, 多谢应助 2012-10-10 10:36:35
k1 =

    0.4763


k2 =

    2.5203


k3 =

    0.6839
2楼2012-10-10 10:28:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖


感谢参与,应助指数 +1
dbb627: 金币+1, 应助指数+1, 感谢应助 2012-10-10 17:11:55
用lsqcurvefit
[k,resnorm] = lsqcurvefit(@myfun,k0,xdata,ydata);
xdata用你的w1表示
ydata用你的a表示
函数里面用
w1=xdata;
w2=1-xdata;
y=k(1).*(k(2).*w1.*w2-k(3).*w2.*w1)./(1+k(2).*w1+k(3).*w2)
showmethemoney
3楼2012-10-10 10:35:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
csgt0: 金币+1, 多谢应助 2012-10-10 14:37:41
chaiqing123: 金币+10, 有帮助 2012-10-12 14:12:42
1stOpt求解:
CODE:
ConstStr w2=1-w1;
Variable w1,a;
Function a=k1*( k2*w1*w2-k3*w2*w1 )/(1+k2*w1+k3*w2);
Data;
//w1        a
0        0
0.173439        0.120432
0.080751        0.090368
0.22435        0.113979
0.583534        0.079549
0.893463        0.031409
0.79104        0.043315
0.685942        0.067775
0.480876        0.089451
0.374238        0.11814
0.273714        0.116728
0.418471        0.138595
0.728748        0.09497
1        0

残差平方和(SSE): 0.00238473528260915
相关系数(R): 0.954827903754545
相关系数之平方(R^2): 0.911696325788299
决定系数(DC): 0.908585468939581
卡方系数(Chi-Square): 0.013589944549627
F统计(F-Statistic): 60.1654894052334

参数        最佳估算
----------        -------------
k1        0.281287404526189
k2        -0.976387658593203
k3        -0.996532155651051

jv2.JPG

4楼2012-10-10 10:45:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

caolinggirl

金虫 (小有名气)

【答案】应助回帖

刚才算错了
k1 =

   -0.1452


k2 =

    1.1525


k3 =

   -0.6839
不过感觉误差还是有些大
5楼2012-10-10 10:49:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaiqing123

金虫 (小有名气)


csgt0: 金币+1, 欢迎交流 2012-10-11 09:37:38
引用回帖:
5楼: Originally posted by caolinggirl at 2012-10-10 10:49:36
刚才算错了
k1 =

   -0.1452


k2 =

    1.1525


k3 =

   -0.6839
不过感觉误差还是有些大

matlab 可能偏差大 那个小软件 计算的精确1stOpt
6楼2012-10-10 23:14:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaiqing123

金虫 (小有名气)

引用回帖:
3楼: Originally posted by csgt0 at 2012-10-10 10:35:50
用lsqcurvefit
= lsqcurvefit(@myfun,k0,xdata,ydata);
xdata用你的w1表示
ydata用你的a表示
函数里面用
w1=xdata;
w2=1-xdata;
y=k(1).*(k(2).*w1.*w2-k(3).*w2.*w1)./(1+k(2).*w1+k(3).*w2)

能不能告诉我下具体的程序,试了 做不出来
7楼2012-10-12 09:02:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

引用回帖:
7楼: Originally posted by chaiqing123 at 2012-10-12 09:02:49
能不能告诉我下具体的程序,试了 做不出来...

先把w1和a在excel里排个序,不然画图不好看。当然不排序也可以计算,就是图不好看。我用上面的k0作初值。初值的选取对结果有影响。
xdata=w1;
ydata=a;
myfun=@(k,xdata)k(1).*(k(2).*xdata.*(1-xdata)-k(3).*(1-xdata).*xdata)./(1+k(2).*xdata+k(3).*(1-xdata));
k0=[0.281287404526189,-0.976387658593203,-0.996532155651051];
[k,resnorm] = lsqcurvefit(myfun,k0,xdata,ydata)
plot(xdata,ydata,xdata,myfun(k,xdata))
showmethemoney
8楼2012-10-12 10:10:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chaiqing123 的主题更新
信息提示
请填处理意见