ich versuche es heute nochmal, weil ich immernoch am grübeln bin und die arbeit nur weiter vor mir herschiebe... es geht hauptsächlich um matrizen und vektoren
Code:
A = [1,2,2,1,1;0,0,0,0,0;0,0,0,0,0;0,0,0,0,0;0,0,0,0,0];
% ich lasse mir von der matrix A, die vorinitialisiert ist mit nullen, nur % die erste Zeile errechnen und direkt schon jetzt sollen die einträge % unterteilt werden:
Fi = []; %hier soll der eintrag A(i) stehen, wo eine 1 vorkommt
Pi = []; %hier wo eine 2 vorkommt
% das hier klappt aber nicht so richtig, als ergebnis bekomme ich hier nur in Fi % eine 1 und Pi ist leer % Warum? % sollte es klappen und Fi = [1,4,5], dann möchte ich die matrix A an der % stelle A(2,3) auch mit einer 1 befüllen % bei Pi = [2,3] möchte ich folgendermaßen weiterarbeiten, A(1,2)=2 % und A(1,4)= 1 => A(2,4)=2 und natürlich A(1,3)=2 und A(1,4)=1 => A(3,4)=2 % und das ganze auch mit A(3,4) und A(3,5)...
Ich wäre sehr dankbar, wenn mir jemand meine blindheit warum das mit dem partitionieren in Fi und Pi nicht funktioniert nimmt.... Ich bin zwar blutiger anfänger, aber dass ich selbst das nicht auf die reihe kriege war mir nicht bewusst. tut mir leid, wenn die frage für euch etwas dumm rüber kommt. Ich hatte schon einmal eine antwort bekommen auf die frage, wo jmd den vorschlag gemacht hat mit unique values zu arbeiten, aber das ist nicht sinn der sache, es soll schon um die konkreten einträge gehen, um dann damit die obere dreiecksmatrix im vorfeld zu befüllen und sich das errechnen an diesen stellen zu ersparen. es geht nämlich um eine laufzeitverbesserung, des zugrundeliegenden algorithmus, der A berechnet...
Dies testet die Werte von A(1) bis A(5). Da Matlab Arrays spalten-orientiert speichert, entspricht das A(1,1) bis A(5,1). Unter diesen Werten befindet sich keine 2.
Zitat:
% sollte es klappen und Fi = [1,4,5], dann möchte ich die matrix A an der
% stelle A(2,3) auch mit einer 1 befüllen
% bei Pi = [2,3] möchte ich folgendermaßen weiterarbeiten, A(1,2)=2
% und A(1,4)= 1 => A(2,4)=2 und natürlich A(1,3)=2 und A(1,4)=1 => A(3,4)=2
% und das ganze auch mit A(3,4) und A(3,5)...
Das verstehe ich überhaupt nicht. Wieso soll A(2,3) auf 1 gesetzt werden, wenn Fi gleich [1,4,5] ist?
danke für den Tipp erstmal, nun funktioniert es, wenn ich einfach angebe A(1,i). Das ist schonmal prima.
Jetzt zu dem weiterarbeiten... Dem ganzen liegt ein programm zugrunde, dass chemische reaktionen miteinander vergleicht und beziehungen zwischen diesen angibt. in der matrix A stehen in den zeilen und in den spalten alle vorhandenen reaktionen und die einträge 1 bis 5 (ich hab hier einfachheitshalber nur 1 und 2 angegeben) deuten auf die beziehung, der jeweiligen reaktionen i und j zueinander, hin.
Wenn bspw. die Reationen A(1,4) und A(1,5) den beziehungstyp 1 Fi = [1,4,5] haben, kann ich daraus schließen, dass die Reaktionen 4 und 5 A(4,5) auch den beziehungstyp 1 haben, also dort in die matrix schonmal eine 1 eintragen. Dem ganzen liegt eine Tabelle zugrunde, die ich hier mal aufführen kann:
A(1,2) = 1 und A(1,3) = 1 --> A(2,3) = 1
A(1,2) = 1 und A(1,3) = 2 --> A(2,3) = 2 [der umgekehrte fall gillt auch]
A(1,2) = 1 und A(1,3) = 3 --> A(2,3) = 3
A(1,2) = 1 und A(1,3) = 4 --> A(2,3) = 4
A(1,2) = 1 und A(1,3) = 5 --> A(2,3) = 5
A(1,2) = 2 und A(1,3) = 2 --> A(2,3) = kann keine aussage treffen
A(1,2) = 2 und A(1,3) = 3 --> A(2,3) = 3
A(1,2) = 2 und A(1,3) = 4 --> A(2,3) = 4
A(1,2) = 2 und A(1,3) = 5 --> A(2,3) = 5
A(1,2) = 3 und A(1,3) = 1 --> A(2,3) = 4
A(1,2) = 3 und A(1,3) = 2 --> A(2,3) = 4
A(1,2) = 3 und A(1,3) = 3 --> A(2,3) = keine aussage
A(1,2) = 3 und A(1,3) = 4 --> A(2,3) = 4
A(1,2) = 3 und A(1,3) = 5 --> A(2,3) = keine aussage
A(1,2) = 4 und A(1,3) = 1 --> A(2,3) = 3
A(1,2) = 4 und A(1,3) = 2 --> A(2,3) = 3
A(1,2) = 4 und A(1,3) = 3 --> A(2,3) = 3
A(1,2) = 4 und A(1,3) = 4 --> A(2,3) = keine aussage
A(1,2) = 4 und A(1,3) = 5 --> A(2,3) = keine aussage
A(1,2) = 5 und A(1,3) = 1 --> A(2,3) = 5
A(1,2) = 5 und A(1,3) = 2 --> A(2,3) = 5
A(1,2) = 5 und A(1,3) = 3 --> A(2,3) = 5
A(1,2) = 5 und A(1,3) = 4 --> A(2,3) = keine aussage
A(1,2) = 5 und A(1,3) = 5 --> A(2,3) = keine aussage
Vllt verstehst du jetzt was ich meine und hast eine idee daszu? das wäre mir eine SEHR SEHR große hilfe! Ich kann aber auch verstehen, da das jetzt wirklich sehr kompliziert wirkt und es länger dauert sich da einzufuchsen, wenn das zu viel mühe und arbeit ist... dann muss ich mir nachhilfe oder so suchen...
vielen Dank für eure Antworten, ich hab das problem bereits gelöst und es auch geschafft, alles zu befüllen, war etwas kompliziert zu erklären...
Nun hab ich aber noch eine kleine frage, da ihr so nett seid schreib ich das gleich mal hier rein.
Es geht ja um eine laufzeitverbesserung bei dem programm und ich bekomme als ausgabe immer diese tabelle und ich lass mir die zeit in sekunden mit
t1=cputime
code
t2=cputime
t2-t1
ich möchte jetzt aber gern das ganze 10 mal laufen lassen, dann meinen verbesserten algorithmus 10 mal laufen lassen und am ende die zeiten vergleichen...
geht das und wenn ja wie? bisher hab ich mir immer die zeiten aufgeschrieben mit stift und papier und dann einen mittelwert daraus errechnet, aber da gibt es doch sicher eine einfachere möglichkeit, bei der ich weniger schreiben und in den rechner tippen muss oder?
vielen dank schonmal im voraus!
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 13.07.2011, 15:26
Titel:
Code:
tic for i=1:10
%code des alten algorithmus
end toc tic for i=1:10
%code des alten algorithmus
end toc
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
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.