24小时热门版块排行榜    

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

zhw921116

新虫 (初入文坛)

[求助] MATLAB拟合已有2人参与

我用下面的数据和公式进行拟合,出现错误,麻烦大神解答
clear all
x1=[10,20,30,40,50,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40]';
x2=[8,8,8,8,8,4,6,8,10,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]';
x3=[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,2,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]';
x4=[0,0,0,0,0,0,0,0,0,0,0,0,0,0.25,0.5,0.75,0.8,0.9,1,1.2,1.3,1.4,1.5,2]';
x=[x1,x2,x3,x4];
S=[2,2.8,3.5,4.5,4.8,3,3.3,4.5,6.8,4.5,3,2.6,4.5,6,6.5,7.6,6.8,6.2,5,3.5,3.4,1.1,0,0]';
a0=[3.208,0.073,3.265,-0.431,0.069,0.417,11,1.076,0.565]';
fun=inline('a(1)+a(2)*x1+a(3)*x2.^a(4)+a(5)*exp(a(6)*x3)+a(7)/a(8)/sqrt(pi./2)*exp(-2*(x4-a(9)).^2/a(8)/a(8))','a','x');
[a,r,j]=nlinfit(x,S,fun,a0)

MATLAB拟合
错误.png
回复此楼

» 猜你喜欢

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

zhw921116

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by dingd at 2016-03-22 11:36:08
1stOpt拟合结果:
均方差(RMSE): 0.43390091962119
残差平方和(SSE): 4.51848019315474
相关系数(R): 0.976560633341951
相关系数之平方(R^2): 0.953670670593233
确定系数(DC): 0.953670670593233
卡方系数( ...

多谢,我查了一下,1stopt可以给参数加约束,能不能帮忙再计算一下,如果方便的话可不可以传一下破解的1stopt,可以用钱买。
x1=[10,20,30,40,50,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40]';
x2=[8,8,8,8,8,4,6,8,10,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]';
x3=[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1,2,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5]';
x4=[0,0,0,0,0,0,0,0,0,0,0,0,0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8]';
x=[x1,x2,x3,x4];
S=[2,2.8,3.5,4.5,4.8,3,3.3,4.5,6.8,4.5,3,2,4.5,5,5.7,6,6.3,6.5,7.5,7.2,6.8,6.2,5,4.2,3.5,3.4,1.1,0,0,0,0]';
a0=[8.758,0.073,-1.571,0.069,0.412,13.128,1.195,0.566]';
fun=@(a,x)a(1)+a(2)*x1+a(3)*x2+a(4)*exp(a(5)*x3)+a(6)/a(7)/sqrt(pi./2)*exp(-2.*(x4-a(8)).^2/a(8)/a(8));
[a,r,j]=nlinfit(x,S,fun,a0)
y1=fun(a,x)
a(2)>0;a(3)<0;a(4)>0;a(5)>0;a(6)>0;0.8<a(7)<1.2;0.5<a(8)<0.8;
5楼2016-03-22 23:34:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

wurongjun

专家顾问 (职业作家)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
zhw921116: 金币+2, ★★★很有帮助 2016-03-22 23:36:41
把fun改一下就行啦!
fun=inline('a(1)+a(2)*x(1)+a(3)*x(2).^a(4)+a(5)*exp(a(6)*x(3))+a(7)/a(8)/sqrt(pi./2)*exp(-2*(x(4)-a(9)).^2/a(8)/a(8))','a','x');
运行结果:
>>
a =

    3.2080
    0.0730
    3.2650
   -0.4310
   -0.0000
    0.3309
   11.0000
    1.0760
    0.5650


r =

   -1.9958
   -1.1958
   -0.4958
    0.5042
    0.8042
   -0.9958
   -0.6958
    0.5042
    2.8042
    0.5042
   -0.9958
   -1.3958
    0.5042
    2.0042
    2.5042
    3.6042
    2.8042
    2.2042
    1.0042
   -0.4958
   -0.5958
   -2.8958
   -3.9958
   -3.9958


j =

  1.0e+004 *

  Columns 1 through 7

    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0
    0.0001    0.0010    0.0000    0.0003    2.0452   -0.0025         0

  Columns 8 through 9

         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
         0         0
善恶到头终有报,人间正道是沧桑.
2楼2016-03-22 11:08:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
zhw921116: 金币+3, ★★★很有帮助 2016-03-22 23:37:08
1stOpt拟合结果:
均方差(RMSE): 0.43390091962119
残差平方和(SSE): 4.51848019315474
相关系数(R): 0.976560633341951
相关系数之平方(R^2): 0.953670670593233
确定系数(DC): 0.953670670593233
卡方系数(Chi-Square): 1.05109921892536
F统计(F-Statistic): 40.4711232389677

参数        最佳估算
----------        -------------
a1        -6.72233963538864
a2        0.0736026176846468
a3        5.69457619273679E-5
a4        4.82855796950308
a5        6.728128434041
a6        -2.75700141028568
a7        11.4573837792192
a8        1.11137672190465
a9        0.549488798892685
3楼2016-03-22 11:36:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhw921116

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by wurongjun at 2016-03-22 11:08:52
把fun改一下就行啦!
fun=inline('a(1)+a(2)*x(1)+a(3)*x(2).^a(4)+a(5)*exp(a(6)*x(3))+a(7)/a(8)/sqrt(pi./2)*exp(-2*(x(4)-a(9)).^2/a(8)/a(8))','a','x');
运行结果:
>>
a =

    3.2080
    0.07 ...

多谢,虽然用inline还是没有算出来,但是用@(a,x)代替算出来了,但是计算结果不满意,MATLAB能不能给参数加约束,比如a(3)<0等
4楼2016-03-22 23:23:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见