hhtnwpu 发表于 2007-5-29 10:27

求助非线性回归的最小二乘法

函数为y=(a+b*x1^c)*(1+d*log(x2/0.00057))*(1-((x3-293)/293)^f)
a,b,c,d,f为要拟合的参数,y为因变量,x1,x2,x3为三个变量,x为52*3的矩阵,y为52*1的矩阵。打算用nlinfit来算, a,b,c,d,f初植为。

命令窗口:
x=
y=’
beta=;
betafit=nlinfit(x,y,'model',beta)
model.m文件
function yy=model(beta,x)
yy=(beta(1)+beta(2)*x(:,1)^beta(3))*(1+beta(4)*log(x(:,2)/0.01)) *(1-((x(:,3)-25)/1643)^beta(5));
请帮忙解决,谢谢!!
是不是()*()有交叉项nlinfit不能算?我又两边取对数。但在指数项可能又不能算,报错
error==>mpower
matrix must be suqare
之后又把幂的底数换为e后,数据少的话可以算,但为复数,数据多时又报错。
无word只好传了txt

hhtnwpu 发表于 2007-5-29 10:29

望大侠指教.

不知道是不是nlinfit中有两括号相乘有交叉不能算啊?

eight 发表于 2007-5-29 10:38

原帖由 hhtnwpu 于 2007-5-29 10:29 发表 http://www.chinavib.com/forum/images/common/back.gif
不知道是不是nlinfit中有两括号相乘有交叉不能算啊?


请注意点运算和矩阵运算的区别,对此可看看 置顶贴:聚宝盆 中提到的精华贴

[ 本帖最后由 eight 于 2007-5-29 10:43 编辑 ]

dingd 发表于 2007-5-29 11:49

下面是用1stOpt算的:

均方差(RMSE): 35.5323096770365
残差平方和(SSE): 65652.3416112108
相关系数(R): 0.987565402796316
相关系数之平方(R^2): 0.97528542480025

参数        最佳估算
----------        -------------
beta1              1904.23420458104
beta2              -1.04525293293857
beta3              -1.30971896814068
beta4              0.0403272929669862
beta5              0.5672148098383

hhtnwpu 发表于 2007-5-29 12:02

多谢,可否贴出程序?

多谢,可否贴出程序?,用1stOpt算和nlinfit差别大吗?我估计beta0(2)应在100以上.

dingd 发表于 2007-5-29 12:19

1stOpt不需猜初值,适应性好。如果模型参数没有物理意义的限制或约束,上面结果应是最好的。nlinfit对初值太敏感,不好使,稍微难点的问题,光猜初值就要花费大量精力和时间,还不能保证所得结果最优。

1stOpt代码:

Algorithm = LM2;
Function y=(beta1+beta2*x1^beta3)*(1+beta4*log(x2/0.01)) *(1-((x3-25)/1643)^beta5);
Data;
0.028        0.00057        293        1070
0.037        0.00057        293        1080
0.045        0.00057        293        1090
0.053        0.00057        293        1100
0.061        0.00057        293        1120
0.072        0.00057        293        1130
0.08        0.00057        293        1150
0.089        0.00057        293        1150
0.093        0.00057        293        1160
0.106        0.00057        293        1170
0.113        0.00057        293        1180
0.124        0.00057        293        1190
0.133        0.00057        293        1195
0.028        1500        293        1410
0.037        1500        293        1420
0.045        1500        293        1430
0.053        1500        293        1440
0.061        1500        293        1450
0.072        1500        293        1460
0.08        1500        293        1470
0.089        1500        293        1470
0.093        1500        293        1480
0.106        1500        293        1470
0.113        1500        293        1480
0.124        1500        293        1480
0.133        1500        293        1495
0.028        1500        183        1530
0.037        1500        183        1600
0.045        1500        183        1615
0.053        1500        183        1610
0.061        1500        183        1605
0.072        1500        183        1610
0.08        1500        183        1620
0.089        1500        183        1620
0.093        1500        183        1620
0.106        1500        183        1615
0.113        1500        183        1620
0.124        1500        183        1620
0.133        1500        183        1625
0.028        1500        163        1690
0.037        1500        163        1720
0.045        1500        163        1730
0.053        1500        163        1740
0.061        1500        163        1740
0.072        1500        163        1760
0.08        1500        163        1760
0.089        1500        163        1760
0.093        1500        163        1750
0.106        1500        163        1755
0.113        1500        163        1740
0.124        1500        163        1725
0.133        1500        163        1730

hhtnwpu 发表于 2007-5-29 12:31

多谢大侠!!

多谢牛人,你觉得还有其它解法吗?理论上这个问题的解,5个参数都该是正数的

hhtnwpu 发表于 2007-5-29 12:38

疑问!

我这只有matlab,请问此题用matlab是否可以解?毕设论文要用,请帮帮我!!谢谢!!

dingd 发表于 2007-5-29 14:19

如果要求所有参数值都为正,在“Function"语句前加一句:
ParameterDomain = ;
就能保证都大于0了,只是最终结果要比无约束的差点:

均方差(RMSE): 36.1310600109825
残差平方和(SSE): 67883.5818708952
相关系数(R): 0.987139800063916
相关系数之平方(R^2): 0.974444984870228
决定系数(DC): 0.974443180407927

参数        最佳估算
----------        -------------
beta1              1.89407786386106E-9
beta2              2020.68374271964
beta3              0.0307379431368949
beta4              0.0403234376567827
beta5              0.567388200207612

Matlab自然能解,但上面解释过了,涉及初值的选取再加上约束,成功率不敢保证。

hhtnwpu 发表于 2007-5-30 08:24

用nlinfit计算时对初值敏感意味着什么?

调用nlinfit做回归分析时对初值敏感意味着什么呢?
问题http://forum.vibunion.com/space/html/93/t-44593.html,我用matlab计算调用nlinfit,

hhtnwpu 发表于 2007-5-30 08:32

我的计算是这样的

model.m文件
function yy=model(beta,x)
yy=(beta(1)+beta(2).*x(:,1).^beta(3)).*(1+beta(4)*log(x(:,2))) .*(1-((x(:,3)-25)/1643).^beta(5));
%第二个括号中对数运算值有小改动,数据还是那组,命令窗口如下:
x=
y=’
beta=;
betafit=nlinfit(x,y,'model',beta)
.^与^的区别已分清,还有*与.*,但现在结果对初值敏感,换初值结果变化大,用1stopt计算,写函数时老报错,
Function y=(beta1+beta2*x1^beta3)*(1+beta4*log(x2)) *(1-((x3-25)/1643)^beta5);
请大侠们指教!

xjzuo 发表于 2007-5-30 09:31

这是很多软件都存在的问题.--- 一般都要有一定经验才可以较好地得到收敛解.
当然很多情况下,还是可以得到较好的结果的.
1stOpt的强项是拟合优化,所以这个问题用1stOpt求解较好.
对于微积分,方程求解等,则它就无能为力了,这就要用我们熟知的Matlab(或类似软件)了。
总之,要善于利用不同软件的优点,这样才能更好地解决问题.
页: [1]
查看完整版本: 求助非线性回归的最小二乘法