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

Differenz berechnen und vergleichen, kleinste nehmen

 

Pythagoras79
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2010, 19:06     Titel: Differenz berechnen und vergleichen, kleinste nehmen
  Antworten mit Zitat      
Hallo, habe die Berechnungen f_m_eins und f_m_zwei durchgeführt. Es resultieren 2 Vektoren.
Code:
i=5;
m_eins=[1:i]
f_m_eins=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2)

k=5;
m_zwei=[1:k]
f_m_zwei=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2)


Jetzt will ich eine Matrix erstellen, die die Differenzen angibt. Hierfür muss elementweise der Differenzbetrag berechnet werden, anschließend soll die kleinste Differenz die beiden Werte für m_eins und m_zwei bestimmen die in eine weitere Berechnung eingesetzt werden. Kann mir jemand bei der Matrix helfen?
Private Nachricht senden Benutzer-Profile anzeigen


Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2010, 19:10     Titel: eigene Idee...
  Antworten mit Zitat      
Meine eigene Idee ist:
Code:
Differenz=zeros(i,k)

for m_eins=1:i
    for m_zwei=1:k
        Differenz(i,k)=f_m_eins-f_m_zwei
    end
end

aber da passen die dimensions nicht, warum?
Private Nachricht senden Benutzer-Profile anzeigen
 
InspectorGadget
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 52
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2010, 00:06     Titel:
  Antworten mit Zitat      
Naja, Du betrachtest in der Matrix Differenz die einzelnen Einträge. Aber auf der rechten Seite der Gleichung hast Du die kompletten Vektoren stehen. Das macht´s schwierig!
Zuerst hab ich Dein Problem so verstanden, dass Du die Differenz zwischen dem ersten Eintrag von f_m_eins und f_m_zwei, dann die Differenz vom zweiten Eintrag von f_m_eins und f_m_zwei,... haben willst. Das geht ganz einfach mit:
Code:
Diff=f_m_eins - f_m_zwei;

Jetzt hast Du einen Vektor mit den Differenzen der Einträge an der jeweils gleichen Stelle.
Mit
Code:
bekommst Du den kleinsten Wert des Differenzenvektors.
Dein angegebener Code lässt aber nciht auf dieses Ziel schliessen. Liegt das daran, dass er noch fehlerhaft ist, oder hab cih Dich falsch verstanden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2010, 13:20     Titel: Nicht ganz erledigt...
  Antworten mit Zitat      
Zuerst soll der erste Wert von f_m_eins genommen werden und die Differenz von allen Werten von F-M-zwei berechnet werden, dann der zweite Wert von f_m_eins mit allen f_m_zwei und so weiter...

Deswegen wird es ja insgesamt eine Matrix Differenz, oder?

Diese Matrix soll alle Differenzen untereinander von f_m_eins und f_m_zwei enthalten und dann den geringsten ausgeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
InspectorGadget
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 52
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2010, 13:28     Titel:
  Antworten mit Zitat      
Dann musst Du nur in einer Schleife
Code:
Diff(Counter,:)=f_m_eins(Counter,1) - f_m_zwei;

berechnen. (Bin von Zeilenvektoren ausgegangen!)
Den Rest wie gehabt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2010, 16:30     Titel: Jetzt als Beträge angeben und den kleinsten Wählen
  Antworten mit Zitat      
Hi Inspector,
Zitat:
Dann musst Du nur in einer Schleife
Code:
Diff(Counter,Smile=f_m_eins(Counter,1) - f_m_zwei;

berechnen. (Bin von Zeilenvektoren ausgegangen!)


Bei mir funktioniert es mit:
Code:
for k=1:i
        Differenz(k,:)=f_m_eins(1,k)-f_m_zwei;
end


Muss die Ergebnis-Matrix als Beträge angeben lassen da keine negativen Zahlen in den Vergleich dürfen. Dann muss ich die geringste auswählen. Denke das bekomme ich hin.

Nur:
Zitat:
Hallo, habe die Berechnungen f_m_eins und f_m_zwei durchgeführt. Es resultieren 2 Vektoren.
Code:
i=5;
m_eins=[1:i]
f_m_eins=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2)

k=5;
m_zwei=[1:k]
f_m_zwei=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2)


Jetzt will ich eine Matrix erstellen

gehen die Variablen m_eins und m_zwei ganzzahlig ein und ich muss mir dann die Werte ausgeben lassen. Also m_eins = 3 und m_zwei =5 ergeben die kleinste Differenz von 0,0021 z. B.
Danke für deine Hilfe...
Private Nachricht senden Benutzer-Profile anzeigen
 
InspectorGadget
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 52
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2010, 19:18     Titel:
  Antworten mit Zitat      
Hat sich dann damit alles beantwortet? Oder gibt es noch ein Problem?

Viel Spass weiterhin...
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2010, 18:06     Titel: noch nicht ganz erledigt
  Antworten mit Zitat      
Hi Inspector,
nein, ich bin noch nicht durch. Brauche die ganzzahligen werte ausgegeben von m_eins und m_zwei (siehe post oben im zweiten abschnitt!)
Private Nachricht senden Benutzer-Profile anzeigen
 
InspectorGadget
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 52
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2010, 19:01     Titel:
  Antworten mit Zitat      
So wie ich Dich am Anfang vertanden habe, willst Du wissen, welcher der kleinste Wert in der Differenzmatrix ist, oder?
Oder willst Du die Indizes des kleinsten Wertes? Die bekommst Du mit find:
Code:

N ist die Diffmatrix.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2010, 20:47     Titel: Indizes
  Antworten mit Zitat      
Die Indizes suche ich, da ich diese für eine weitere Berechnung benötige.
Danke vorerst ich werde deine Code mal anwenden!
Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 11:12     Titel: Nochmal..
  Antworten mit Zitat      
Hi Inspector,

hab jetzt den Code soweit fertig:
Code:
i=4;
m_eins=[1:i];
f_m_eins=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2)

m_zwei=[1:i];
f_m_zwei=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2)

Differenz=zeros(i,i);

for k=1:i
        Differenz(k,:)=f_m_eins(1,k)-f_m_zwei;
end

Matrix=abs(Differenz)

Min=min(abs(Differenz))

Allerdings gibt mir Matlab dann als minimum einen Vektor an, ich will aber nur die kleinste Zahl! Geht das nur mit min(min(N))?

Beim Code:
Code:
[a,b]=find(Differenz==min(min(Differenz)))


Gibt er mir für a=1 und für b den Maxwert von i an, komisch...
Gruß
vom Laien Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
InspectorGadget
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 52
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 11:28     Titel:
  Antworten mit Zitat      
Hi!
Mit min sucht Matlab immer den kleinsten Wert aus einer Spalte. Bei einer Matrix als Input bekommst Du einen Vektor mit Länge "Anzahl der Spalten der Matrix" mit den geringsten Einträgen der Matrix. Wendest Du darauf nochmal min an, bekommst Du den geringsten Eintrag aus dem Vektor (als Skalar), und damit den geringsten Eintrag der Matrix. Deswegen min(min(N)). Schau Dir mal die Hilfe zu min an, falls noch was unklar ist. (help min)
Jetzt musst Du noch die Indizes finden, an der dieser kleinste Wert in der Matrix steht. das geht mit dem find befehl. Der erste Rückgabevektor enthält die Zeilennummern, der zweite die Spaltennummern. Sollte der kleinste Wert nur einmal in der Matrix auftreten, sind die beiden Vektoren natürlcih skalar. Näheres wieder in der Hilfe.
Viel Erfolg!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Pythagoras79
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 67
Anmeldedatum: 31.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 16:41     Titel: jetzt siehts gut aus...
  Antworten mit Zitat      
hab aber zwei schleifen gemacht, wegen index...
Code:
i=1000;
j=1000;
A=zeros(i,j);
for m_eins=1:i;
f_m_eins_diff=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2);

for m_zwei=1:j;
f_m_zwei_diff=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2);

A(m_eins,m_zwei)=f_m_eins_diff-f_m_zwei_diff;

end
end

erg=abs(A);

diff=min(min(abs(A)));

[m_eins,m_zwei]=find(A==min(min(abs(A))))



f_m_eins=(m_eins.^2.*sigma.^2.*(T-t))./((log(U./S)).^2);
f_m_zwei=(m_zwei.^2.*sigma.^2.*(T-t))./((log(L./S)).^2);
n=floor(min(f_m_eins,f_m_zwei))


brauche nämlich n für weitere rechnungen.
Vielen Dank für die Hilfe, next problem kommt bestimmt!
Laughing
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 - 2025 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.