1

別の単一の曲線(ベクトル)と一致させ、最初のセットの各ベクトルの係数を取得して2番目の曲線と一致させたいベクトルのセット(長さ50、基本的には曲線のセット)があります。係数は>=0.0である必要があります。つまり、単一の曲線に一致する最初の曲線のセットの線形結合です。私がどちらの方向に進むべきかについての助けは役に立ちます。

4

2 に答える 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 に答える