求助非线性回归的最小二乘法
函数为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
望大侠指教.
不知道是不是nlinfit中有两括号相乘有交叉不能算啊? 原帖由 hhtnwpu 于 2007-5-29 10:29 发表 http://www.chinavib.com/forum/images/common/back.gif不知道是不是nlinfit中有两括号相乘有交叉不能算啊?
请注意点运算和矩阵运算的区别,对此可看看 置顶贴:聚宝盆 中提到的精华贴
[ 本帖最后由 eight 于 2007-5-29 10:43 编辑 ] 下面是用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
多谢,可否贴出程序?
多谢,可否贴出程序?,用1stOpt算和nlinfit差别大吗?我估计beta0(2)应在100以上. 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
多谢大侠!!
多谢牛人,你觉得还有其它解法吗?理论上这个问题的解,5个参数都该是正数的疑问!
我这只有matlab,请问此题用matlab是否可以解?毕设论文要用,请帮帮我!!谢谢!! 如果要求所有参数值都为正,在“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自然能解,但上面解释过了,涉及初值的选取再加上约束,成功率不敢保证。
用nlinfit计算时对初值敏感意味着什么?
调用nlinfit做回归分析时对初值敏感意味着什么呢?问题http://forum.vibunion.com/space/html/93/t-44593.html,我用matlab计算调用nlinfit,
我的计算是这样的
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);
请大侠们指教! 这是很多软件都存在的问题.--- 一般都要有一定经验才可以较好地得到收敛解.
当然很多情况下,还是可以得到较好的结果的.
1stOpt的强项是拟合优化,所以这个问题用1stOpt求解较好.
对于微积分,方程求解等,则它就无能为力了,这就要用我们熟知的Matlab(或类似软件)了。
总之,要善于利用不同软件的优点,这样才能更好地解决问题.
页:
[1]