Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> Matlab Code verbessern, while-Schleife muss raus!!! :)
Sina
Geschrieben am: Di 13.06.2006, 07:35
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 9.06.2006


Hi!

Ich hab da wieder mal ein Problem. Ich habe einen Code, der mir möglichst 1Mio Stützstellen liefern soll.
Zuerst habe ich das so gelöst:
CODE

while xx<=1
   xx2=xx;
   y=y0;        
   %fsolve iteriert in der nachfolgenden Funktion y so lange, bis die
   %Funktion 0 ergibt.
   [TI, y] = fsolve(@(y)[sqrt(54/pi)*((-1/3)*y* exp((-3/2)*y^2) + (1/18)* pi^(1/2)*6^(1/2)*erf((1/2)*y*sqrt(6)))]-xx2, y);
   arrayx(i)=xx2;
   arrayTI(i)=TI;
   arrayy(i)=y;
   i=i+1;
   xx=xx2+deltaX;
end


Diese While-Schleife ist aber sehr zeitaufwendig, und bei 1Mio Durchläufen kann das ziemlich auf den Wecker fallen smile.gif
Ich habe schon versucht, das ganze mit linspace zu verbessern, habe aber irgendwie nicht die Lösung bekommen, die die While-Schleife gebracht hat...
Kann mir hier jemand helfen, und mir sagen, wie ich diesen Teil "schneller" bekomme?

Viele sonnige Grüße,
sina
Top
PMEmail Poster
Top
 
 
Maik
I&S Menz
#2 Geschrieben am: Di 13.06.2006, 12:48 (+05:13)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 432
Mitglied seit: 16.03.2006


Der erste Schritt wäre wohl erstmal, die ganzen Konstanten-Berechnungen ausserhalb von der while Schleife zu packen...

CODE


q = sqrt(3/2);
r = sqrt(pi/54);
ri = 1/r;

while xx<=1
  xx2=xx;
  y=y0;        
  %fsolve iteriert in der nachfolgenden Funktion y so lange, bis die
  %Funktion 0 ergibt.
  [TI, y] = fsolve(@(y)[ri* (r*erf(q*y) - 0.333333*y*exp(-1.5 * y^2))]-xx2, y);
  arrayx(i)=xx2;
  arrayTI(i)=TI;
  arrayy(i)=y;
  i=i+1;
  xx=xx2+deltaX;
end



Ich garantiere für nix... mein Mathe ist eingerostet und Matlab kann ich garnet...

PS: was zur Hölle macht eigentlich @(y)[........] ???


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sina
#3 Geschrieben am: Di 13.06.2006, 12:57 (+00:08)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 9.06.2006


Das @(y) bedeutet, dass y in der nachfolgenden Funktion so lange iteriert wird, bis die Funktion Null ergibt. Also sozusagen ist der ganze Block eine Nullstellensuche. smile.gif

Danke, dass mit dem auslagern ist schomal eine gute Idee...
Trotzdem würd ich gern die While-Schleife noch fortbekommen ...
Mal schaun, ob das noch klappt...

Ich wär für jeden Vorschlag offen smile.gif
Top
PMEmail Poster
Top
 
Sascha Ahlers
#4 Geschrieben am: Di 13.06.2006, 12:58 (+00:00)
Report PostQuote Post

AyomRank 8
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 1681
Mitglied seit: 27.12.2004


Mal so als Frage, wozu soll die Schleife dienen? Ohne diese Information ist die Optimierungen nicht gerade einfach.



MfG Sascha Ahlers


--------------------
Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."

Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Sina
#5 Geschrieben am: Di 13.06.2006, 13:03 (+00:05)
Report PostQuote Post

AyomRank 2
****

Gruppe: Member (inaktiv)
Beiträge: 6
Mitglied seit: 9.06.2006


Ok, sorry smile.gif

Also, ich habe eine Kurve im Format x=f(y).
Ich benötige diese aber im üblichen Format y=f(x).
Da die einfache Umwandlung nicht funktioniert (oder ich zu blöd dafür bin smile.gif )muss ich eine Nullstellensuche durchführen...
Und das tut die While-Schleife im Groben und Ganzen...
hilft euch das weiter?
Top
PMEmail Poster
Top
 
Maik
I&S Menz
#6 Geschrieben am: Di 13.06.2006, 13:32 (+00:29)
Report PostQuote Post

AyomRank 5
**********

Gruppe: Member (aktiv)
Beiträge: 432
Mitglied seit: 16.03.2006


so richtig versteh ich es nicht...

Müsste die Zeile:
CODE
[TI, y] = fsolve(@(y)[sqrt(54/pi)*((-1/3)*y* exp((-3/2)*y^2) + (1/18)* pi^(1/2)*6^(1/2)*erf((1/2)*y*sqrt(6)))]-xx2, y);


nicht eigentlich so aussehen:

CODE
[y, TI] = fsolve(@(y)[sqrt(54/pi)*((-1/3)*y* exp((-3/2)*y^2) + (1/18)* pi^(1/2)*6^(1/2)*erf((1/2)*y*sqrt(6)))]-xx2, y);


ich habe das hier zu fsolve gefunden:
http://www-ccs.ucsd.edu/matlab/toolbox/optim/fsolve.html

demnach gibt die Funktion als ersten Wert die x-Koordinate zurück (bei dir ist es y) und als 2. Wert den Funktionswert (wobei ich mir nicht ganz sicher bin ob die den Funktionswert f(x) meinen, oder F(x) ist aber in diesem Fall egal)

und @(y)[...] ist wohl sowas wie eine anonyme Funktiondefinition... allerdings habe ich dazu nix gefunden, ich geh einfach mal davon aus.


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/12462

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Wie kann ich Freebieking verbessern? Jan-Remmer Harms 467 19 So 4.05.2008, 08:55
PHP: Performance verbessern cr4m0 331 14 Di 25.03.2008, 16:29
PHP-Code schützen radarin 212 8 So 13.01.2008, 22:23
Code ändern, aber ...? japsa 352 6 Mi 7.11.2007, 13:05
Strukurierung des HTML/CSS code Kabir 183 2 Di 25.09.2007, 17:16
Meinen RSS-Feed als Code für andere Webmaster SPACEart 361 4 Fr 31.08.2007, 16:24
Code in 2000 HTML-Dateien einfügen David Cooper 290 8 Mo 27.08.2007, 13:47
Gefahr von PHP Code in GIF Grafikdateien pangu 681 14 So 19.08.2007, 22:40
[S] Google AdWords Promotion Code Philipp_R 2434 3 Mi 1.08.2007, 16:48
Wie entsteht ein solcher Code Ronald Nickel 517 12 So 15.07.2007, 10:21




Anzeige - [Interessiert an einer Anzeige?]


Anzeigen






 



[Interessiert an einer Anzeige?]