Simpsonregel mit Matlab

Neue Frage »

Dshing Auf diesen Beitrag antworten »
Simpsonregel mit Matlab
Hallo, ich versuche grade mit Matlab ein Integral zulösen, leider kenne ich mich mit dem Programm nur sehr schlech aus. Ich hab für die Lösungsmethode mittels Simpsonregel den Code gefunden(siehe Anhang) Der funktioniert auch soweit, wenn ich jetzt aber irgendeine Funktion mit ...^2 eingebe, dann gibt er mir einen Fehler aus.
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?
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.
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

code:
1:
2:
3:
4:
xS = a : h : b ;
yS = F(xS) ; 


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:

code:
1:
2:
3:
x.^2
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?
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.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »