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

Rechnung mehrfach durchlaufen

 

Mister Iös
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 09.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2013, 21:23     Titel: Rechnung mehrfach durchlaufen
  Antworten mit Zitat      
hi!

ich bin ziemlich neu in der matlab welt und habe sonst auch nicht viel mit programmierung zu tun. schönes programm und sehr mächtig aber nun muss ich mich damit beschäftigen und weiß bei folgendem problem leider nicht weiter. ich weiß noch nicht einmal nach was ich suchen muss.
Also:

ich habe drei matritzen (3x3) von denen ich zwei für die weitere berechnung verwende. diese beginnt mit einer matrixmultiplikation. die berechnung muss aber mit allen kombinationen durchgeführt werden und da es sich um matritzen handelt gibt es derer sechs, wenn ich mich nicht irre. nun könnte man die rechnung einfach sechs mal kopieren und mit den verschiedenen kombinationen durchlaufen lassen. aber erstens ist das nicht besonders elegant und zweitens soll das programm später evtl. noch für mehr als drei matritzen erweitert werden.
ich hatte als ansatz irgendwas mit for-schleifen im kopf, aber ich denke das ist falsch. ich bin sicher, dass matlab diese aufgabe mit leichtigkeit beherrscht, aber wie immer liegt das problem zwischen schreibtischstuhl und bildschirm.

ich hoffe ihr könnt mir da weiterhelfen! vielen dank schonmal!

vg
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.03.2013, 23:34     Titel:
  Antworten mit Zitat      
Hallo,

die Anzahl der Kombinationen hängt davon ab, was du genau machen möchtest. Insbesondere: darf die Matrix auch mit sich selbst multipliziert werden?
Eine for-Schleife sollte da so oder so passen:
Code:

for I=1:3
for J = [1:I-1 I+1:3] % wenn I nicht J sein darf, ansonsten 1:3
ergebnis{I,J} = ...
end
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Mister Iös
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 09.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2013, 17:47     Titel:
  Antworten mit Zitat      
hi!

vielen dank für die antwort. dann war meine überlegung vllt doch nicht so falsch. also noch mal deutlicher:
drei matritzen: U1, U2, U3 die rechnung beginnt eigentlich mit C=inv(Ui)*Uj²*inv(Ui). um es zu vereinfachen hab ich eine einfache matrixmultiplikation draus gemacht. so gibt es sechs kombinationen:
U1*U2, U2*U1, U2*U3, U3*U2, U1*U3, U3*U1
mit sich selbst sollen die matritzen nicht multipliziert werden. der code sollte dann am ende ungefähr so aussehen:

U1=[...]
U2=[...]
U3=[...]

for-schleife oder was auch immer

C=inv(Ui)*Uj²*inv(Ui) und weitere rechnung

wie schaffe ich es desweiteren dass die ergebnisse am ende nicht wahllos ausgegeben werden, sondern ich diese zuordnen kann und dann zb sortieren mit 'sort'?

----------
edit: rechtschreibfehler
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.03.2013, 19:08     Titel:
  Antworten mit Zitat      
Hallo,

ich hab dir doch schon den quasi fertigen Vorschlag gemacht? Damit du ihn nutzen kannst, musst du lediglich die Matrizen in ein Cell Array ablegen, also
Code:

U{1} = ...
etc.


Das Ergebnis ist doch für jede Kombination der Matrizen eine Matrix. Nach welchen Kriterien sollen die denn dann sortiert werden?

Dass die Ergebnisse vernünftig angeordnet werden ist schon durch meinen ersten Vorschlag gegeben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Mister Iös
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 09.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2013, 19:16     Titel:
  Antworten mit Zitat      
die rechnung geht ja noch weiter. am ende kommt ein wert für eine dehnung und eine dazugehörige wahrscheinlichkeit für jede kombination der matritzen heraus. gibt auch noch weitere input parameter. geht um kristallographische untersuchungen. wie gesagt bin ich völlig unbedarft was matlab angeht. dann muss ich die vorgeschlagene lösung wohl erstmal verstehen.! XD
vielen dank nochmal!

------------
edit:

die die dehnungen sollen am ende nach den wahrscheinlichkeiten sortiert werden. die anfänglichen matritzen stellen eine einheitszelle im kristall dar und die wahrscheinlichkeit besagt, welche kombination am ende bei welcher spannung am ehesten auftritt. aber das ist alles nicht wirklich relevant für das eigentliche problem. nur zum verständnis was ich vor habe. ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.03.2013, 19:26     Titel:
  Antworten mit Zitat      
Hallo,

probier's halt einfach mal :) Das sollte sich ziemlich direkt übertragen lassen.

Und wenn's dabei Probleme gibt, kann man die am besten am dann vorliegenden Code besprechen.

In welcher Form liegen diese Wahrscheinlichkeiten denn vor bzw. wurden sie schon berechnet? Es wird generell darauf hinauslaufen, die Wahrscheinlichkeiten zu sortieren und die Sortierreihenfolge (zweites Rückgabeargument von sort) auf die entsprechenden Matrizen anzuwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Mister Iös
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 09.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2013, 19:59     Titel:
  Antworten mit Zitat      
so ich glaube ich habe es jetzt geschnallt! ^^ der code schaut jetzt so aus:

Code:

a0=1;
a=2;
c=3;

x=a/a0;
y=c/a0;

U{1}=[x 0 0; 0 x 0; 0 0 y];
U{2}=[x 0 0; 0 y 0; 0 0 x];
U{3}=[y 0 0; 0 x 0; 0 0 x];

for i=1:3
for j = [1:i-1 i+1:3]
    C1=inv(U{i})*U{j}^2*inv(U{i})
end
end
 


nur leider wird C1 bei jedem durchlauf wieder geändert. schön wäre es wenn die ergebnisse unter verschiedenen namen also zb C11, C12, C13,... gespeichert werden oder in einem cell array. wie schaffe ich das?

---------
edit:
ein cell array wäre wohl das beste, da die rechnung noch weiterläuft. müsste man hier vllt. wieder eine for-schleife einsetzten? also quasi für den index?
Private Nachricht senden Benutzer-Profile anzeigen
 
Mister Iös
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 09.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2013, 20:26     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:


In welcher Form liegen diese Wahrscheinlichkeiten denn vor bzw. wurden sie schon berechnet? Es wird generell darauf hinauslaufen, die Wahrscheinlichkeiten zu sortieren und die Sortierreihenfolge (zweites Rückgabeargument von sort) auf die entsprechenden Matrizen anzuwenden.

Grüße,
Harald


die wahrscheinlichkeiten berechnen sich erst später. sie beziehen sich dann prinzipiell auch auf die kombinationen der matritzen aber eigentlich sollen nur skalare dehnungswerte (die sich wiederum aus den kombinationen ergeben) damit sortiert werden. ich denke das sollte dann aber kein problem sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mister Iös
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 09.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2013, 03:51     Titel:
  Antworten mit Zitat      
Mister Iös hat Folgendes geschrieben:


nur leider wird C1 bei jedem durchlauf wieder geändert. schön wäre es wenn die ergebnisse unter verschiedenen namen also zb C11, C12, C13,... gespeichert werden oder in einem cell array. wie schaffe ich das?


keiner eine idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 13.03.2013, 09:07     Titel:
  Antworten mit Zitat      
Hallo,

Code:
k=1;
for i=1:3
    for j = [1:i-1 i+1:3]
        C(k,1) = {inv(U{i})*U{j}^2*inv(U{i})}
        k=k+1;
    end
end


Mit C{1,1} greift man auf die Werte im ersten Feld des Arrays zu.

Man sollte übrigens vermeiden Variablen der Art C11, C12, C13 usw anzulegen. Auf C(1,1), C(1,2) usw kann man im weiteren Verlauf besser zugreifen.

Grüße,
Seban
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: 13.03.2013, 14:25     Titel:
  Antworten mit Zitat      
Hallo Seban,

Noch zwei kleine Tips:
Code:
k=1;
C = cell(1, 3 * 2);  % Pre-allocate!
for i=1:3
    for j = [1:i-1 i+1:3]
        C{k} = inv(U{i})*U{j}^2*inv(U{i});
        k=k+1;
    end
end

Eine Pre-allocation ist bei einem {1x6} Array zwar noch nicht messbar schneller, aber es lohnt sich, dies grundsätzlich immer anzuwenden, weil man dann niemals nachbessern muss, falls es doch plötzlich auf {1x1e6} aufgebohrt wird. Nachbessern ist nämlich eine der übelsten Fehlerquellen.

Es ist billiger, per C{k}=y direkt in ein Cell-element zu schreiben, anstatt mit C(k)={y} zunächst ein {1x1} Cell zu erzeugen und es in das Cell-Array zu kopieren.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Mister Iös
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 09.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2013, 19:54     Titel:
  Antworten mit Zitat      
vielen vielen dank! ihr habt mir alle sehr geholfen!
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.