24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2202  |  回复: 12

albertazhao

铜虫 (初入文坛)

[求助] 非线性回归中,函数表达式错误Matrix dimensions must agree????

非线性回归中,函数表达式错误Matrix dimensions must agree????
怎么回事呢?急急急!!!
程序如下
x =
    1.1200
    1.2400
    1.3000
    1.1700
    1.1600
    0.9760
    0.8090
    0.8100
    0.4440
    0.4290
y =
    1.5900
    1.6300
    1.8600
    1.7700
    1.7300
    1.4500
    1.3600
    1.2000
    0.9520
    0.8280
ab=[1 2];
f=inline('y-(a(2)*(1.1*sqrt(x)+a(1))./(0.5*x+52))','x','y','a');
[a,r]=lsqnonlin(f,ab,[ ],[ ],[ ],x,y)


albertazhao@gmail.com
回复此楼
7777777777
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖置顶 ( 共有3个 )

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★
albertazhao: 回帖置顶 2012-07-19 14:06:09
albertazhao: 金币+5, ★★★很有帮助 2012-07-19 14:06:35
CODE:
function alb
x =[ 1.1200;1.2400;1.3000;1.1700;1.1600;0.9760;0.8090;0.8100;0.4440;0.4290];
y =[ 1.5900;1.6300;1.8600;1.7700;1.7300;1.4500;1.3600;1.2000;0.9520;0.8280];
ab=[1 2];
f=inline('y-(a(2)*(1.1*sqrt(x)+a(1))./(0.5*x+52))','x','y','a');
[a,r]=lsqnonlin(@(a)f(x,y,a),ab)
end

showmethemoney
9楼2012-07-17 17:37:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖


臭水沟: 金币+1, 谢谢交流~~ 2012-07-17 22:29:55
albertazhao: 回帖置顶 2012-07-19 14:01:35
引用回帖:
8楼: Originally posted by albertazhao at 2012-07-17 17:30:59
ab=;
f=inline('y-(a(2)*(1.1*sqrt(x)+a(1))./(0.5*x+52))','a','x','y');
=lsqnonlin(@(a)f(x,y,a),ab)   
我的运行错误,为什么?
Error in inline expression ==> y-(a(2)*(1.1*sqrt(x)+a(1))./(0.5*x+5 ...

问题在于定义f时是a,x,y的顺序,调用时是x,y,a的顺序,改成一致应该就可以了

» 本帖已获得的红花(最新10朵)

showmethemoney
10楼2012-07-17 17:47:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

★ ★ ★
albertazhao: 回帖置顶 2012-07-19 16:37:15
xiegangmai: 金币+3, 谢谢应助! 2012-07-20 00:19:24
引用回帖:
11楼: Originally posted by albertazhao at 2012-07-19 13:59:50
可以运行了,
为什么是这个顺序
另外我换了数据,为什么就得不到结果,结果还是初始值
cftool命令也不能得到稳定数值,运行一次得到的数值和运行第二次不同
我拟合公式
拟合方程-非线性回归-Matlab lsqnonlin ...

要保证你使用时的顺序跟你定义时的顺序是一致的,前面用axy,后面就要用axy,前面用xya,后面就要用xya。当然,前面用xya,后面你也可以用yxa,但是y和x就反了,但是你不能用xay,因为你的a是2个元素,y是一个元素。
拟合不出来是因为你的y太大了,ab的变化对y的影响很小。需要自己改写函数

更详细的在matlab帮助里搜索Local Minimum Possible就可以看到了
showmethemoney
12楼2012-07-19 15:20:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

mei3014

金虫 (正式写手)

木有头屑

哪个是自变量?
一勤天下无难事,处世无难忍最高。
2楼2012-07-17 12:00:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

albertazhao

铜虫 (初入文坛)

引用回帖:
2楼: Originally posted by mei3014 at 2012-07-17 12:00:38
哪个是自变量?

http://zhidao.baidu.com/question/451848649.html#replyask-62449207
不能附图,问题在这里详细描述
我在百度知道悬赏提问了。
7777777777
3楼2012-07-17 13:28:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

albertazhao

铜虫 (初入文坛)

引用回帖:
3楼: Originally posted by albertazhao at 2012-07-17 13:28:50
http://zhidao.baidu.com/question/451848649.html#replyask-62449207
不能附图,问题在这里详细描述
我在百度知道悬赏提问了。...

General model:
     f(x) = b*(1.1*sqrt(x)+a)/(0.5*x+52)
Coefficients (with 95% confidence bounds):
       a =     -0.2423  (-0.3988, -0.08585)
       b =       92.99  (75.48, 110.5)

Goodness of fit:
  SSE: 0.05727
  R-square: 0.9482
  Adjusted R-square: 0.9417
  RMSE: 0.08461
这个是用Matlab 的cftool命令做的。是交互式,我想知道用程序哪里出错,怎么解决。
7777777777
4楼2012-07-17 13:54:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

albertazhao

铜虫 (初入文坛)

引用回帖:
2楼: Originally posted by mei3014 at 2012-07-17 12:00:38
哪个是自变量?

用1stOpt:

Function y=a2*(1.1*sqrt(x)+a1)/(0.5*x+52);
Data;
x=1.1200,1.2400,1.3000,1.1700,1.1600,0.9760,0.8090,0.8100,0.4440,0.4290;
y=1.5900,1.6300,1.8600,1.7700,1.7300,1.4500,1.3600,1.2000,0.9520,0.8280;
复制代码
均方差(RMSE): 0.075677672378937
残差平方和(SSE): 0.0572711009669372
相关系数(R): 0.973733426792748
相关系数之平方(R^2): 0.948156786453548
决定系数(DC): 0.948156780435072
卡方系数(Chi-Square): 0.0203090417650265
F统计(F-Statistic): 154.311404020362

参数        最佳估算
----------        -------------
a2        92.9877941634666
a1        -0.242321929529164
7777777777
5楼2012-07-17 13:55:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

albertazhao

铜虫 (初入文坛)

引用回帖:
5楼: Originally posted by albertazhao at 2012-07-17 13:55:18
用1stOpt:

Function y=a2*(1.1*sqrt(x)+a1)/(0.5*x+52);
Data;
x=1.1200,1.2400,1.3000,1.1700,1.1600,0.9760,0.8090,0.8100,0.4440,0.4290;
y=1.5900,1.6300,1.8600,1.7700,1.7300,1.4500,1.3600,1.2000,0 ...

这个也可以公式变形,简化为直线方程进行拟合,结果如下y(0.5x+52)=1.1b*sqrt(x)+ab
b = 93.0213
a = -0.2426
我想知道lsqnonlin函数问题出在哪里。
7777777777
6楼2012-07-17 14:23:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
臭水沟: 金币+2, 谢谢交流~~ 2012-07-17 22:29:45
[a,r]=lsqnonlin(@(a)f(x,y,a),ab,[ ],[ ],[ ])



a =

   -0.2423   92.9878


r =

    0.0573
showmethemoney
7楼2012-07-17 16:05:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

albertazhao

铜虫 (初入文坛)

引用回帖:
7楼: Originally posted by csgt0 at 2012-07-17 16:05:29
=lsqnonlin(@(a)f(x,y,a),ab,,,)



a =

   -0.2423   92.9878


r =

    0.0573

ab=[1 2];
f=inline('y-(a(2)*(1.1*sqrt(x)+a(1))./(0.5*x+52))','a','x','y');
[a,r]=lsqnonlin(@(a)f(x,y,a),ab)   
我的运行错误,为什么?
Error in inline expression ==> y-(a(2)*(1.1*sqrt(x)+a(1))./(0.5*x+52))
Matrix dimensions must agree.

可否给我你的完整程序,谢谢
7777777777
8楼2012-07-17 17:30:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 albertazhao 的主题更新
信息提示
请填处理意见