WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Iterative Matrizenrechnung bei Ausgleichung

 

Malnijr
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 28.06.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2021, 11:41     Titel: Iterative Matrizenrechnung bei Ausgleichung
  Antworten mit Zitat      
Hallo,

für meine Abschlussarbeit an der Uni muss ich für etliche Epochen einer Satellitenbeobachtung eine Ausgleichung durchführen. Vor ein paar Jahren hatte ich auch eine Einführung in Octave, die Basics sind also da, aber komplexe Systeme bereiten mir doch Schwierigkeiten,....

Es geht darum, die Standardabweichung für die einzelnen Epochen zu berechnen. Das gelingt mir auch mit folgendem Skript:

Code:
%

clear all

%---------------A-Matrix der Unbekannten ----------------------------------------

A =[

0.28008766   -0.4136   0.8663   1   0   0   ;
-0.095831837   -0.6363   0.7654   1   0   0   ;
-0.08688968   -0.1004   0.9911   1   0   0   ;
0.105235503   -0.3136   -0.9437   1   0   0   ;
-0.377192249   -0.8999   0.2190   1   0   0   ;
-0.529941856   0.7977   -0.2878   1   0   0   ;
0.589888171   -0.1420   -0.7949   1   0   0   ;
-0.163909034   -0.0163   -0.9863   1   0   0   ;
0.070380984   -0.8484   -0.5247   0   1   0   ;
0.652946618   -0.2806   -0.7035   0   1   0   ;
-0.419696483   -0.2519   -0.8720   0   1   0   ;
-0.047740587   -0.7243   0.6878   0   1   0   ;
0.177956886   0.2086   0.9617   0   1   0   ;
-0.118688728   -0.8097   -0.5747   0   1   0   ;
-0.10323116   0.8849   0.4542   0   1   0   ;
0.322883236   -0.8961   0.3045   0   0   1   ;
-0.615313057   0.1248   0.7783   0   0   1   ;
-0.265484009   0.8784   0.3974   0   0   1   ;
-0.052812888   -0.2644   0.9630   0   0   1   ;
0.584602504   -0.5115   -0.6297   0   0   1   ;
-0.086429029   0.9347   0.3448   0   0   1   ;


];

%------------P-Matrix / Gewichtungsmatrix ---------------------------------------



P = diag([

0.657028746
0.756297479
1
0.044889963
1
0.758555093
0.323065011
-0.3968609
-0.875021299
-0.798771228
0.201267578
0.807951002
0.008964638
1
0.891343699
-0.749804668
0.746000511
0.899985397
1
0.513381134
0.904735186




]);

Qll = P^-1;

%----------------------- l-Vektor-----------------------------------------------

l = [

-0.6509
0.0942
-0.6129
-0.5601
-0.594
0.299
-0.5245
-0.2712
-0.8272
1.1112
-0.6396
0.0933
0.2468
-0.1922
0.7416
0.0905
0.5316
-0.1124
1.098
-0.2743
0.6689


];

%---------------------------Berechnung der Verbesserungsmatrix v und Unbekanntenvektor x-------------------------------------
N = A' * P * A;

x = N^-1 * A' * P * l;

v = A * x - l

%------------------------------ Standardabw. s --------------------------------------------------------------

%n = Anzahl der Messungen
%u = Anzahl der Unbekannten

n = length(A);
u = 6;

s = sqrt((v'*P*v)/(n-u))


 
 



Nun ist aber meine Schwierigkeit, diese Matrizen weiter zu bearbeiten.
In meiner A-Matrix will ich nun alle Zeilen löschen, in dem der Wert der 4. Spalte meiner Ausgangsdaten unter z.B. 40 liegt. Die Ausgangsdaten wären:

Code:

90.1307   39.7929   -0.6509   47.835
51.6868   27.4026   0.0942   41.988
76.2555   64.5358   -0.6129   49.52
152.691   23.2248   -0.5601   40.024
290.2004   72.0358   -0.594   50.79
212.6439   34.8495   0.299   42.095
310.7814   16.6268   -0.5245   42.489
260.8512   30.0106   -0.2712   47.503
287.5385   43.4299   -0.8272   45.812
282.3375   24.3524   1.1112   44.814
333.5493   10.4841   -0.6396   39.889
120.8855   46.3654   0.0933   47.462
51.1299   32.709   0.2468   44.429
67.3987   81.0692   -0.1922   49.053
99.0763   27.8029   0.7416   43.344
55.3237   31.7253   0.0905   39.688
81.4813   33.6655   0.5316   42.764
300.3156   21.5825   -0.1124   43.979
287.2586   70.4128   1.098   52.028
71.5378   54.0883   -0.2743   49.849
174.4506   53.055   0.6689   40.858

 


Aus diesen Daten entwickelt sich die A-Matrix und die P-Matrix.
Wenn jetzt also der Wert der 4. Spalte, wie z.B. bei der 11. Zeile, unter 40 fällt, soll bei meiner A-Matrix, P-Matrix und l-Matrix diese Zeile auch gelöscht werden.
Dann soll die Rechung wiederholt werden und die Standardabweichung erneut berechnet werden.

Durch ein paar Nachforschungen bin ich auch auf folgenden Code gestoßen:

Code:

A = [1 2 3 4; 5 6 7 8; 9 10 11 0];
B = A; % Hilfsmatrix
spalte = 4; % Nur die vierte Spalte wird untersucht
j = 1;
count = 0;
for k=1:size(A,1) % Alle Zeilen werden durchsucht
    if A(k, spalte) == 0 % Wenn der SpaltenEintrag in der k-ten Zeile Null ist
       B(j,:) = []; % ... dann lösche die Zeile
       count = count + 1;
       j = k - count ;
    end
end
A = B;
 


Leider weiß ich nicht so ganz, wie ich das alles zusammensetzen kann.


Danke schonmal im Voraus! Ich hoffe, es ist alles verständlich.


Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.06.2021, 16:40     Titel: Re: Iterative Matrizenrechnung bei Ausgleichung
  Antworten mit Zitat      
Hallo Malnijr,
Zitat:
In meiner A-Matrix will ich nun alle Zeilen löschen, in dem der Wert der 4. Spalte meiner Ausgangsdaten unter z.B. 40 liegt.

Code:
A = A(A(:, 4) >= 40, :)

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Malnijr
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 28.06.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2021, 19:23     Titel:
  Antworten mit Zitat      
Hallo Jan, danke für deine Antwort!

Gibt es dann auch eine Möglichkeit, diese Zeilen automatisch in den anderen Matrizen zu löschen? Diese haben ja auch die gleiche Anzahl an Zeilen.
Sozusagen wie ein Code der "Lösche hier Zeile 3 und 4, wenn in A-Matrix auch Zeile 3 und 4 gelöscht wird"?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.06.2021, 17:40     Titel:
  Antworten mit Zitat      
Hallo Malnijr,

Ja, das geht einfach:
Code:
mask = (A(:, 4) >= 40);
A = A(mask, :);
B = B(mask, :);

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Malnijr
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 28.06.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2021, 12:57     Titel:
  Antworten mit Zitat      
Hi Jan!

Super, das funktioniert einwandfrei.

Und wenn ich jetzt z.B. sagen möchte, ich will alle Zeilen rauslöschen, wo die Werte z.B. zwischen 100 bis 200 und zwischen 250 bis 300 liegen?

Mein Vorschlag wäre folgender:

Code:
mask = (A(:,:) >= 100 <= 200 & >= 250 <= 300);
A = A(mask, :);
B = B(mask, :);



Oder aber
Code:
mask = (azi(:,:) 100 <= A <= 200 &  250 <= A <= 300 );
A = A(mask,:);
B = B(mask, :);


Leider funktioniert bei mir beides nicht, hast du da evtl. noch einen Tipp für mich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.