因此,我试图在MATLAB上拟合一个自定义函数的线性最小二乘模型。我的数据,称为logprice_hour_seas,看起来像是一个复杂的非线性函数,我想用我的自定义函数seasonMatrix来拟合它,但是为了理解MATLAB的MLE是如何工作的,我做了这个愚蠢的拟合,说seasonMatrix只是一个线性函数。帮助我理解这段代码,这是我从MATLAB的网站上复制的,以及逻辑(请阅读下面)
Times = [0:1/8760:8712/8760];
% Calibrate parameters for the seasonality model
seasonMatrix = @(t) [t];
C = seasonMatrix(Times);
seasonParam = C\logprice_hour_seas;现在我的模型应该有一些错误(很多)。但是我做了logprice_hour_seas-C*seasonParam,这都是零!嗯,MLE是用logprice_hour_seas=C*seasonParam解决的,所以这并不奇怪。我不明白什么??
发布于 2017-04-19 16:08:58
正如注释中提到的,您正在破坏矩阵大小。
您创建值的方式seasonParam变成了5x26矩阵。C是一个1x26矩阵。你正在模拟一个不确定的方程组,它可以有多个解.
在这种情况下,幸运的是,对于算法来说,C的一些值是1!这意味着,在解决方案中的所有26个5x1向量(seasonParam)中,只有乘以1的向量需要设置为结果值(logprice_hour_seas)才能得到完美的匹配!因此,您的解决方案seasonParam是
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
5.2560 5.2151 5.2324 5.2224 5.2292
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 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 0 0 0 0整个模型是没有意义的,所以我假设你只是搞砸了尺寸。尝试以下几点:
logprice_hour_seas=[5.2560 5.2151 5.2324 5.2224 5.2292]';
PriceTimes = [0:1/8760:4/8760]';
seasonMatrix = @(t) [sin(2.*pi.*t) cos(2.*pi.*t) sin(4.*pi.*t) cos(4.*pi.*t) t ones(size(t, 1), 1)];
C = seasonMatrix(PriceTimes);
seasonParam = C\logprice_hour_seas;https://stackoverflow.com/questions/43495278
复制相似问题