別の単一の曲線(ベクトル)と一致させ、最初のセットの各ベクトルの係数を取得して2番目の曲線と一致させたいベクトルのセット(長さ50、基本的には曲線のセット)があります。係数は>=0.0である必要があります。つまり、単一の曲線に一致する最初の曲線のセットの線形結合です。私がどちらの方向に進むべきかについての助けは役に立ちます。
質問する
1349 次
2 に答える
1
私が正しく理解していれば、 それぞれがスケーリング係数で乗算したい一連の曲線があり、それによっていくつかのターゲット曲線 を可能な限り忠実に再現します。
これは、線形最小二乗近似で簡単に実行できます。
%# create some sample curves
x = -10:0.1:10;
g1 = exp(-(x-3).^2/4);
g2 = exp(-(x-0).^2/4);
g3 = exp(-(x+2).^2/4);
%# make a target curve, corrupt with noise
y = 2*g1+4*g2+g3+randn(size(x))*0.2;
%# use the `ldivide` operator to solve an equation of the form
%# A*x=B
%# so that x (=fact here) is x=A^-1*B or, in Matlab terms, A\B
%# note the transposes, A should be a n-by-3 array, B a n-by-1 array
%# so that x is a 3-by-1 array of factors
fact = [g1;g2;g3]'\y'
fact =
1.9524
3.9978
1.0105
%# Show the result
figure,plot(x,y)
hold on,plot(x,fact(1)*g1+fact(2)*g2+fact(3)*g3,'m')
于 2012-12-24T16:00:44.447 に答える
0
それが彼の意味するところです!..数学バージョン..
x = Table [i、{i、-10、10、.1}]; 基礎={ Exp [-(#-3)^ 2/4]&/ @ x、 Exp [-(#-0)^ 2/4]&/ @ x、 Exp [-(#+ 2)^ 2/4]&/ @ x }; 公演[ ListPlot [Table [{x [[i]]、#[[i]]}、{i、Length [x]}]、 参加->True、PlotStyle-> Hue [Random []]]&/ @ basic] y =テーブル[2ベーシス[[1、i]] + 4ベーシス[[2、i]] +ベーシス[[3、i]] + RandomReal [{。5、.5}]、{i、Length [x]}]; dataplot = ListPlot [Table [{x [[i]]、y [[i]]}、{i、Length [x]}]]
劣決定系を単純に解く場合、mathematicaは魔法のように最小二乗法を実行しないので、最小二乗法の結果を明示的に見つけます。
coefs = FindMinimum [ Total [(#^ 2&/ @(Sum [a [k] basic [[k]]、{k、Length [basis]}]-y))]、 Array [a、Length [basis]]] [[2]] Show [dataplot、 ListPlot [i = 0; {x [[++ i]]、#}&/ @ (合計[a [k]基底[[k]]、{k、3}] /。coefs)、 参加->True]]
述べられているように係数を>=0に制限したい場合は、次のように定式化の値を単純に二乗することができます。
coefs = FindMinimum [ 合計[(#^ 2&/ @ (合計[a [k] ^ 2基底[[k]]、{k、長さ[基底]}]-y))]、 Array [a、Length [basis]]] [[2]] Show [dataplot、 ListPlot [i = 0; {x [[++ i]]、#}&/ @ (合計[a [k] ^ 2基底[[k]]、{k、3}] /。coefs)、 参加->True]]
実際のベストフィットが負の値になりたい場合は、予想どおりに悪い結果が得られます。
于 2012-12-27T20:37:08.970 に答える