Simpsonregel mit Matlab |
| 08.03.2013, 18:35 | Dshing | Auf diesen Beitrag antworten » | ||||||||||
| Simpsonregel mit Matlab Kann mir jemand sagen, was ich machen muss, um ein quadrat einzugeben? P.S. Kann man hier auch ohne Java was posten, oder ist das pflicht? |
||||||||||||
| 08.03.2013, 18:43 | zyko | Auf diesen Beitrag antworten » | ||||||||||
| RE: Simpsonregel mit Matlab Dein xs ist keine Zahl sondern ein Zahlenvektor. In matlab bedeutet xs^2 bilde dessen Vektorprodukt. Das geht aber nur wenn die inneren Dimensionen übereinstimmen. Wenn du aber nur das Quadrat der einzelnen Vektorkomponenten haben willst, dann musst du xs.^2 schreiben. Dies erzeugt einen gleichlangen Vektor. |
||||||||||||
| 08.03.2013, 18:48 | chrizke | Auf diesen Beitrag antworten » | ||||||||||
Ohne zu wissen, wie du die Funktion deklarierst oder welche Fehlermeldungen du bekommst, kann ich nur raten. In dem Code findest du folgende zwei Zeilen
In der ersten Zeile definiert man einen Vektor an Zahlen. In der zweiten Zeile erhält man einen Vektor mit den Werten der Funktion F aus der ersten Zeile. Einen Vektor kannst du natürlich nicht hoch irgendwas rechnen, sondern du musst matlab mitteilen, dass jeder Eintrag des Vektors hoch irgendwas gerechnet werden soll. Dazu benutzt man den "." Das heißt, du musst alle Operatorn "*", "/", "^" durch ".*", "./", ".^" ersetzen. Als Beispiel für schreibt man dann:
|
||||||||||||
| 08.03.2013, 19:27 | Dshing | Auf diesen Beitrag antworten » | ||||||||||
Wirklich vor jedem Operator? Oder nur vor dem ^2. Also für den Anfang würde ich gerne die Funktion: sqrt(1+(-((-0.108*exp(-(x/-1.61)))/-1.61)-(-0.23*exp(-(x/0.673)))/0.673)^2) von 0 bis 1.75 Integrieren. Ich kann die Funktion auch leider nicht analytisch lösen, daher kann ich das Ergebnis nur in der Größenordnung überprüfen. Wenn ich jetzt also vor dem ^2 ein Punkt schreibe funktioniert es und es kommt mit 1.76 auch was raus, was ich ungefähr erwartet habe. Würdet ihr sagen, das es dann so richtig ist und ich davon ausgehen kann das es der Wert stimmt? |
||||||||||||
| 09.03.2013, 12:41 | zyko | Auf diesen Beitrag antworten » | ||||||||||
matlab besitzt viele Funktionalitäten, die es ermöglichen auf for-Schleifen zu verzichten. Wenn du deinen Code in tic...toc einschließt, wird die Rechenzeit geliefert. Bei kleinem n und einfachem Integranden mag die Rechenzeit unwesentlich sein. Dein Code: % Simpsonsche Regel: tic I = (yS(1)+yS(nS)) ; % Erster und letzer Wert der Formel faktor = 4 ; for i = 2:n I = I + yS(i)*faktor ; if (faktor == 4) faktor = 2 ; else faktor = 4 ; end ; end Simpson = I*h/3 toc Mein Vorschlag (nicht getestet) Mein Code: % Simpsonsche Regel: tic I = (yS(1)+yS(nS)) ; % Erster und letzer Wert der Formel I = I + 2*(sum(yS(2: (end-1))) + sum(yS(2:2: (end-1)))); Simpson = I*h/3 toc Mit 2*sum(yS(2: (end-1))) werden alle inneren Punktwerte doppelt genommen. Mit 2*sum(yS(2:2: (end-1))) werden alle zweiten inneren Punktwerte nochmals zweifach aufaddiert. Dieses Verfahren erspart die Schleife und die darin enthaltene if-Abfrage, was alles Zeit kostet. S.a. im matlab Help den Befehl 'profile'. Damit kann man detaillierte Rechenzeitinformationen aller ausgeführten Befehlszeilen erhalten. |
||||||||||||
|
|
Verwandte Themen
| Die Beliebtesten » |
|
| Die Größten » |
|
| Die Neuesten » |
