2 Vektoren vergleichen? < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:28 Di 12.12.2006 | Autor: | mawai |
Aufgabe | Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt. |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo,
kann mir jemand weiterhelfen:
ich habe in Matlab 2 Größen mit unterschiedl. Auflösung:
a=1200:0.5:5000;
b=1200:40:5000;
Vektor b kann schließl nur 40 Schritte. Das heißt wenn a=1220 hat zeigt b=1200 bzw. 1240 an. Maximale Differenz ist also 20.
Prozentual wäre das dann 100/a*Differenz
Wie kann ich das automatisiert hinbekommen?
Dies würde ich gerne auf prozentuale Differenz untersuchen und plotten lassen.
|
|
|
|
Hallo mawai,
du musst zuerst einmal einen Weg finden, wie du (ohne eine for-Schleife zu programmieren) bestimmen kannst, welchen Abstand die Werte von a zum jeweils nächstliegendsten Wert von b haben.
Wie würdest du das machen?
Hugo
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:32 Di 12.12.2006 | Autor: | mawai |
Hallo Hugo,
tut mir leid, aber ich versteh nicht ganz was mir das bringen soll, verstehe deine Andeutung nicht ganz?
meine Maximale Differenz werde ich immer da haben, wo eben (b(x)-b(x-1))/2 ist. Also hier z.B (1240-1200)/2=20.
Wenn ich Richtung kleiner/größer 1220 werde wird die Differenz wieder kleiner, weil ich mich ja an 1200/1240 nähere.
Prozentual nimmt die Abweichung bei höheren Werten auch exponential ab.
Auf dem Blatt Papier ist mir das schon klar, aber wie kann ich das mit Matlab lösen?
|
|
|
|
|
Hallo mawai,
wie kannst du zu einer vorgegebenen Zahl, z.B. 1374, einen Vektor bestimmen, der als i-ten Eintrag jeweils den Abstand zum i-ten Eintrag von b enthält?
Mit diesem Schritt fängt man zunächst einmal an.
Danach automatisierst du diesen Vorgang für alle Einträge des Vektors von a und bekommst eine Matrix, die alle Abstände zwischen den Einträgen beider Vektoren enthält.
Aus dieser Matrix und dem Vektor a kann man am Ende für jeden Eintrag von a den prozentualen Fehler bestimmen, den man beim Ersetzen durch einen Wert von b mindestens macht.
Hugo
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 23:04 Mi 13.12.2006 | Autor: | mawai |
Hallo Hugo,
tut mir leid, aber ich kann nicht ganz folgen.
Kannst du mir bitte mal die Lösung mit Matlab posten?
z.B. a=0:0.5:4000; b=0:40:4000;
maximale Differenz wäre 39,5 -> b wiederspiegelt solange 0 bis a=40.
Es müßte also ein lineares ZigZag (Sägezahn) rauskommen 0-39,5-0.....
Bekomm das mit Matlab einfach nicht dargestellt, bin doch absoluter Laie.
|
|
|
|
|
Hallo,
meinst du so etwas? (ist nur ein Zehntel der Kurve)
[Dateianhang nicht öffentlich]
Ohne for-Schleife habe ich es nicht hingekommen, aber so:
for i=1:length(a),
f=find(sort([a(i) b])==a(i));
abst(i)=min(abs(b(max(1,f-2):min(f+2,length(b)))-a(i)));
end;
Gruß
Martin
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
|
Hallo mawai,
wenn du wissen willst, wie weit die Zahl 2447 von Einträgen des Vektors
b=0:45:9000
mindestens entfernt ist, dann kannst du erst einmal mit
d=abs(b-2447)
berechnen lassen, welche Abstände alle Einträge von b zu dieser Zahl haben.
Der kleinste davon ist min(d) und die prozentuale Abweichung dann
[mm] \frac{d}{244}\cdot [/mm] 100%
Jetzt müsstest du das für alle Einträge des Vektors a machen.
Das geht entweder mit einer for-Schleife oder anders. Ich gehe davon aus, dass au und b Zeilenvektoren sind.
A=a'*ones(size(b)); % jeder Wert von a wird mit
B=ones(size(a'))*b; % jedem Wert von b verglichen
D=abs(A-B);
Jetzt hast du eine Matrix, in der der Eintrag D(i,j) der Abstand zwischen [mm] a_i [/mm] und [mm] b_j [/mm] ist. Schau dir in der Matlab-Hilfe an, wie der Befehl min auf Matrizen wirkt. Je nachdem wie gibt dir
min(D)./a oder min(D)./a' oder min(D')./a oder min(D')./a'
die richtige Lösung aus.
Hugo
|
|
|
|