2017-07-11 3 views
1

Ich habe den Fall P(t) = a * A(t) - b* B(t), jeder 17281x1 verdoppelt.MATLAB Fitting Matrizen

Jetzt möchte ich Kurvenanpassung verwenden, um die Variablen a und b zu erhalten.

Fitting 1

Fitting Fall, hier a und b 1 und 1

Ich weiß fit und fittype, aber sie scheinen nicht in diesem Fall zu arbeiten.

Irgendwelche Ideen, wie man das gelöst bekommt?

Antwort

1

Wie wäre es mit der Methode der kleinsten Quadrate? Wenn ich richtig verstehe, könnte Ihr Problem als P(t) = [A(t), B(t)] * [a; -b] ausgedrückt werden.

Lassen [a; -b] = x, [A(t), B(t)] = Y und P(t) = P

Nun ist die kleinsten Quadrate Lösung wäre:

x = Y\P; 
:

x = ((Y'*Y)^-1)*Y'*P; 

In Matlab Sie auch die 'Backslash Operator' für diesen Fall nutzen könnten

hierfür finden Sie die Dokumentation hier: mldivide

Als Referenz:

Wikipedia

Mathworks

Ich hoffe, das hilft.

EDIT:

Hier ist mein Testcode:

A = [1;2;3] 
B = [4;5;6] 
P = [7;8;9] 

Y = [A, -B] 

disp('------- regular least squares formula -------') 
x = ((Y'*Y)^-1)*Y'*P 

a = x(1) 
b = x(2) 

disp('------- mldivide -------') 
x = Y\P 

a = x(1) 
b = x(2) 
+0

Sorry, stellte ich meine Antwort und versuchte, ein kleines Beispiel auf meinem Computer, mit diesem Ansatz denke ich Sie Ihre Lösung –

+0

Thx bekommen sollten , , aber wie zu tun '[a; -b] = x 'wie es mehrere linke Seiten gibt können Sie nur Ihren Code kopieren bitte –

+1

Ich habe nur '[a; -b] = x', so dass ich '[a; -b] 'mit' x' in der Formel, als Vereinfachung, und weil die Lösung der Methode der kleinsten Quadrate ein Spaltenvektor wäre, den ich gerade 'x' genannt habe. Ich habe meinen Testcode zu meiner Antwort hinzugefügt. –