如何确定常数使用对数转换的线性解决最小化剩余之和广场下面的方程吗?

1视图(30天)
我有一个多元方程形式 y = a1 * (x1 ^ a2) * (x2 ^ a3) * (x3 ^ a4) * (x4 ^ a5) * (x5 ^ a6) ,我有一个数组的值x和y项,每个19775 x1。我需要确定常数的值 a1, a2, a3、a4 a5 并被告知要使用一个线性对数转换的解决剩余方块之和最小化。有在MATLAB方法吗?
附件是我迄今为止我的代码:
% %无因次实证模型
%适合用于创建相关:
% pi_theta = a1。* (pi_y)。^ a2 . * (pi_z)。^ a3。* (pi_twp)。^ a4。*……
% (pi_tcb)。^ a5。* (pi_alpha_cb)。^ a6;
% log10 (pi_theta) = log10 (a1) + a2 * log10 (pi_y) + a3 * log10 (pi_z)…
% + a4 * log10 (pi_twp) + a5 * log10 (pi_tcb) + a6 * log10 (pi_alpha_cb);
%解决常量使用的线性对数转换的解决
%以上的方程。
% a1 =
% a2 =
% a3 =
% a4 =
% a5 =
% a6 =
X =[(大小(pi_y)), log10 (pi_y) log10 (pi_z) log10 (pi_twp),
log10 (pi_tcb) log10 (pi_alpha_cb)];
Y = log10 (pi_theta);
[b,少女,r,无线电侦察,统计]= mvregress (Y、X);
不过,我一直得到这个错误:
错误使用mvregress(第456行)
协方差不是正定。
错误在Dimensionless_parameters_analysis(第266行)
[b,少女,r,无线电侦察,统计]= mvregress (Y、X);

接受的答案

明星黾
明星黾 2019年7月3日
转发- - - - - -
我决定让 遗传算法 在您的数据和功能。
这段代码:
D =负载(“x - y。垫的);
X = D。X;
Y = D.Y;
objfcn = @ (a, x) (1) * (x (: 1)。(2) ^)。* (x (:, 2)。(3) ^)。* (x (:, 3)。(4) ^)。* (x (:, 4)。^ (5)) * (x (:, 5)。^ (6));
ftn = @ (a)规范(Y - objfcn (a, X));
PopSz = 500;
改= 6;
选择= optimoptions (“遗传算法”,“PopulationSize”PopSz,“InitialPopulationMatrix”兰迪(1 e + 4, PopSz parm) * 1 e 1,“MaxGenerations”2 e3,“PlotFcn”@gaplotbestf,“PlotInterval”1);
[θ,fval、exitflag、输出]= ga (ftn改,[],[],[],[],0(改,1),正(改,1),[],[],选择)
聚合相当迅速 (00:06:21) 407年 代生产这些参数的估计:
参数=
1.0 e + 02 *
0.002865234375000
8.700138633728027
0.027473449707031
0.009913467407227
0.000003921508789
0.002913574218750
与健身价值:
fval =
66.598426312801081
这也是最好的几个运行,各有不同 “InitialPopulationMatrix” 振幅。预测的 “Y” 值都是复杂的。

答案(1)

马特·J
马特·J 2019年6月28日
编辑:马特·J 2019年6月28日
合适不合适(无限的解决方案),因为您的数据万博 尤文图斯 pi_tcb 基本上是3.2倍 pi_tmp :
pi_tcb = 10 ^ (X (:, 5));
pi_twp = 10 ^ (X (:, 4));
> >规范(pi_tcb - 3.2 * pi_twp)
ans =
1.906978550450982 e-14

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!