www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - Optimierung einer Rechnung
Optimierung einer Rechnung < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Optimierung einer Rechnung: Tipp/Korrektur
Status: (Frage) beantwortet Status 
Datum: 19:37 Sa 12.09.2009
Autor: JustSmile

Hallo zusammen!

Ich habe mich heute mal hobbymäßig an ein Programm gemacht, mit welchem ich gewisse Wahrscheinlichkeiten berechnen möchte...

Es geht darum, zur Berechnung einer Laplace-Wahrscheinlichkeit die Anzahl der günstigen Fälle auszugeben:
Zur Verfügung stehen bis zu
- 3 4-seitige
- 2 6-seitige
- 2 8-seitige
- 1 10-seitiger
- 1 12-seitiger
- 1 20-seitiger Würfel

Bei meinem Programm kann man zunächst eingeben, für welche Zahl die Wahrscheinlichkeit berechnet werden soll (größte Zahl wird etwa 50 sein) und anschließend, wie viele Würfel zur Verfügung stehen.

So für sich allein, läuft es bereits korrekt und halbwegs flott, nur soll es später in ein größeres Programm implementiert werden, welches alle möglichen Würfelkombinationen durchgeht, wodurch die Ausführung sehr lange dauert; vor allem, wenn viele Würfel verwendet werden.

Es geht mir jetzt also darum, Vorschläge oder Korrekturen zu erhalten, die Anzahl der günstigen Fälle schneller zu berechnen.
Meinen Kommentierten Quelltext füge ich mal mit ein. Bin leider noch kein Profi in Matlab^^

zum Download (oder s.u.):
m-file: http://www.fileuploadx.de/251124
txt-file: http://www.fileuploadx.de/31362


Besten Dank schonmal im Voraus und einen schönen Abend allen Lesern ;)


PS: Da es bislang nur ein Teil eines größeren Programms ist und das Endergebnis zu einer komplizierteren Aufgabe gehört, passen die Rechnungen nicht zu einer Laplace-Wahrscheinlichkeit. Habe das jetzt nur zur Vereinfachung gesagt - ist aber für mein Problem auch vollkommen nebensächlich.





% günstige und mögliche
% final

function gunstige

% Zahlabfrage
z=input('Gebe die Zahl ein: ');

% Eingabe der zur Verfügung stehenden Würfel
Aw4=input('4: ');
Aw6=input('6: ');
Aw8=input('8: ');
Aw10=input('10: ');
Aw12=input('12: ');
Aw20=input('20: ');


% Mögliche Fälle

% Übersetzen der Würfelanzahl in einzelne Würfel
if Aw4==0
    w41=1;
    w42=1;
    w43=1;
elseif Aw4==1;
    w41=4;
    w42=1;
    w43=1;
elseif Aw4==2;
    w41=4;
    w42=4;
    w43=1;
elseif Aw4==3;
    w41=4;
    w42=4;
    w43=4;
end
if Aw6==0
    w61=1;
    w62=1;
elseif Aw6==1;
    w61=6;
    w62=1;
elseif Aw6==2;
    w61=6;
    w62=6;
end
if Aw8==0
    w81=1;
    w82=1;
elseif Aw8==1;
    w81=8;
    w82=1;
elseif Aw8==2;
    w81=8;
    w82=8;
end
if Aw10==0
    w101=1;
else
    w101=10;
end
if Aw12==0
    w121=1;
else
    w121=12;
end
if Aw20==0
    w201=1;
else
    w201=20;
end
% Anzahl der möglichen Fälle
mogliche=w41*w42*w43*w61*w62*w81*w82*w101*w121*w201;


% Günstige Fälle

% Für die Schleifen benötigte Variablen einführen
a=0;
b=0;
c=0;
d=0;
e=0;
f=0;
g=0;
h=0;
i=0;
j=0;
gunstige=0;

% Schleife für den ersten 4seitigen Würfel, in jeder Schleife erhöht sich
% die Augenzahl um 1
while a<3
    % Überprüfung, ob der erste 4seitige Würfel überhaupt verwendet wird
    if Aw4==0
        % falls nicht Verwendet, wird hierdurch die while-Schleife nicht weiter
        % ausgeführt
        a=3;
        % Die Augenzahl dieses nicht vorhandenen Würfels wird auf 0 gesetzt
        aa=0;
    else
        % falls der Würfel verwendet wird, wird hier in jeder Schleife die
        % Augenzahl um 1 erhöht
        a=a+1;
        % die Augenzahl wird festgesetzt
        aa=a;
    end
    % Analog zum ersten vierseitigen Würfel, wird hier der zweite
    % vierseitige Würfel behandelt
    while b<3
        if Aw4<=1
            b=3;
            bb=0;
        else
            b=b+1;
            bb=b;
        end
        % etc
        while c<3
            if Aw4<=2
                c=3;
                cc=0;
            else
                c=c+1;
                cc=c;
            end
            while d<5
                if Aw6==0
                    d=5;
                    dd=0;
                else
                    d=d+1;
                    dd=d;
                end
                while e<5
                    if Aw6<=1
                        e=5;
                        ee=0;
                    else
                        e=e+1;
                        ee=e;
                    end
                    while f<7
                        if Aw8==0
                            f=7;
                            ff=0;
                        else
                            f=f+1;
                            ff=f;
                        end
                        while g<7
                            if Aw8<=1
                                g=7;
                                gg=0;
                            else
                                g=g+1;
                                gg=g;
                            end
                            while h<9
                                if Aw10==0
                                    h=9;
                                    hh=0;
                                else
                                    h=h+1;
                                    hh=h;
                                end
                                while i<11
                                    if Aw12==0
                                        i=11;
                                        ii=0;
                                    else
                                        i=i+1;
                                        ii=i;
                                    end
                                    % der letzte Würfel, der Zwanzigseitige
                                    while j<19
                                        if Aw20==0
                                            j=19;
                                            jj=0;
                                        else
                                            j=j+1;
                                            jj=j;
                                        end
                                        
                                        % Summation der Augenzahl für die
                                        % aktuellen Würfelaugenzahlen
                                        test=aa+bb+cc+dd+ee+ff+gg+hh+ii+jj;
                                        
                                        % Überprüfe, ob es sich um die
                                        % passende Augenzahl handet
                                        if test==z
                                            % falls ja, wird hiermit
                                            % gezählt, auf wie viele Weisen
                                            % die Zahl kombiniert werden
                                            % kann
                                            gunstige=gunstige+1;
                                        end
                                    end
                                    % Auf Null setzten der
                                    % Schleifenvariable für den
                                    % Zwanzigseitigen Würfel für die
                                    % weiteren Kombinationen der vorherigen
                                    % Würfel
                                    j=0;
                                end
                                i=0;
                            end
                            h=0;
                        end
                        g=0;
                    end
                    f=0;
                end
                e=0;
            end
            d=0;
        end
        c=0;
    end
    b=0;
end
% Ausgabe der Wahrscheinlichkeit
P=gunstige/mogliche
end

        
Bezug
Optimierung einer Rechnung: Antwort
Status: (Antwort) fertig Status 
Datum: 23:31 Fr 25.09.2009
Autor: MatthiasKr

Hallo Tobias,

ehrlich gesagt habe ich deinen code jetzt nicht durchgearbeitet und verstehe auch nicht 100%-ig, was das programm genau leisten soll. Ich kann dir also nur ein paar allgemeine tips geben, mit denen du vielleicht etwas anfangen kannst:

1.)  kann man den dahinterstehenden mathematischen algorithmus nicht vielleicht optimieren? Muessen wirklich saemtliche faelle durchge-x-t werden?

2.) Wie du vermutlich weisst, ist MATLAB besonders dann stark, wenn es um rechnen mit matrizen geht. Zig-fach verschachtelte schleifen und bedingungen sollte man, falls irgend moeglich, vermeiden. Nach meinem eindruck zu urteilen, koennte das bei deinem konkreten problem allerdings schwierig sein.

3.) Falls Du also diese ganzen verzweigungen wirklich brauchst und einen wirklich schnellen code produzieren willst, geht eigentlich kein weg an C bzw. C++ vorbei. Moechtest du deine routine in ein groesseres projekt in MATLAB einbinden, so koenntest Du sie als MEX-file in C kompilieren und dann als MATLAB funktion einbinden. Das geht (zumindest fuer uebersichtliche routinen) sehr gut und elegant.

gruss
matthias

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de