WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Welche Integralfunktion am besten nutzen?

 

bluesaturn
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2014, 21:07     Titel: Welche Integralfunktion am besten nutzen?
  Antworten mit Zitat      
Hallo Forum,
meine Integranden habe eine Kombination aus Besselfunktionen und exponentiell abfallenden Kurven oder nur Besselfunktion.
Ich denke, es gibt aber eine Singularitaet an der Intervallgrenze. Bisher habe ich quadgk benutzt, aber schafft Matlab das? Ich habe leise Zweifel, dass Matlab richtig integriert. Ich habe ein anderes Programm, nicht Matlab benutzt, welches ein Ergebnis liefert, dass den Messdaten ähnlicher sieht.
Kann da jemand vielleicht eine Empfehlung aussprechen?
VG
blue
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.07.2014, 21:34     Titel:
  Antworten mit Zitat      
Hallo,

quadgk wird salopp gesagt versuchen, innerhalb der vorgegebenen Toleranzen zu bleiben. Klar ist natürlich, dass das nur unter gewissen Annahmen garantiert werden kann. Wenn ein schmaler, hoher Peak z.B. nicht abgetastet wird, kann das das Ergebnis beträchtlich verfälschen.
Es kann z.B. einen Versuch wert sein, die Toleranzen herabzusetzen (über die Parameter 'AbsTol' und 'RelTol').
Alternativ auch andere Integrationsmethoden versuchen, z.B. auch
Code:

Bei relativ einfachen Integranden kann auch Symbolisches Integrieren ein Versuch wert sein.

Am besten ansehen kann man sich das wohl anhand eines konkreten Beispiels.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jac
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 24.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2014, 17:22     Titel:
  Antworten mit Zitat      
Singularitäten sind natürlich generell für (nicht nur numerische) Integration ein Problem, wenn der Betrag gar nicht konvergiert wird es schwierig. quadgk ist im Allgemeinen schon ein sehr leistungsfähiger Algorithmus.
Wenn du die Lage der Singularität allerdings bereits von vornherein auf die Integrationsintervallgrenze eingrenzen kannst, so versuch doch einfach mal manuell die Integrationsgrenze etwas runter zu setzen, so dass bis "kurz vor der Singularität" integriert wird. Das wird ja letzlich sowieso das sein, was du willst, denn in eine Singularität rein zu integrieren sollte mangels Konvergenz wenig Sinn machen oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
bluesaturn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2014, 22:34     Titel:
  Antworten mit Zitat      
Guten Morgen.
Ich stehe leider immer noch auf dem Schlauch mit der Integration in Matlab.
Ich würde gerne folgendes integrieren:

\int\limits_0^1\left[\int\limits_a^{R_0} f(q,r_c,\alpha)\rm{d}r_c \cdot \int\limits_a^{R_0} f(q,r_c,\alpha)\rm{d}r_c \right]\rm{d}\alpha


Die Funktion f beinhaltet eine Besselfunktion, die oszilliert, und eine weitere ekelige Funktion. Analytisch komme ich hier auf keinen Fall voran.
Zuvor hatte ich es schon einmal mit dblquad probiert und das Ergebnis war sehr merkwürdig, da ich, wie ich vermute, nicht die Stützstellen wählen kann.
Wie würdet ihr oben folgendes integrieren in Matlab?

Was nicht funktioniert, ist folgendes:

Zitat:

f=@(q,alpha)(L*sinc(q.*alpha.*(L./2)./pi).*quadgk(@(rcx)r_e.*nrcx(rcx).*2.*pi.*rcx.*besselj(0,q.*rcx.*sqrt(1-alpha.^2)),a,R0));
f9=@(q,alpha)(f(q,alpha)).^2;
test=@(q)quadgk(@(alpha)f9(q,alpha),0,1,'RelTol',reltol,'AbsTol',abstol)

Ich bekomme den Fehler "Matrix dimensions must agree.", aber ich habe wirklich alles mit dem Punkt multipliziert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.08.2014, 23:25     Titel:
  Antworten mit Zitat      
Guten Abend eher,

versuch doch mal, das ganze zu entschachteln. Man könnte z.B. auch alles in eine .m-Datei schreiben.

Ansonsten bitte den Code reproduzierbar machen, also Beispiele für sämtliche Konstanten angeben.

Wenn du dblquad mit niedrigen Toleranzen aufrufst, sollte das Ergebnis nicht "merkwürdig" sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
bluesaturn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2014, 23:40     Titel:
  Antworten mit Zitat      
Guten Abend, Harald.
Entschuldigung, ich bin gerade in einer anderen Zeitzone unterwegs.
Alles ist in einer .m-Datei geschrieben.
Gut, ich bastle mal einen Beispielcode, der durchlaeuft. Kann ich die Konstanten einfach als Nummern angeben? Sie kommen eigentlich alle aus anderen Berechnungen, die aber den Code wieder aufblähen.
Was sind denn bitte niedrige Toleranzen? Welchen Wertebereich würdest du empfehlen?
Re "merkwuerdig":
Mein Kollege empfahl mir damals eigentlich auf dblquad zu verzichten. Er ist der Meinung, da unsere Funktionen alle oszillieren aufgrund der Besselfunktion und der Tatsache, dass man die Stützstellen nicht wählen kann bei Matlab, besser "geschachtelt" zu integrieren. Sprich für alle q und alle alpha diese Integrale auszuwerten. Allerdings bin ich mir nicht sicher, wie das dann mit der Normalisierung klappt.
Aber gut, ich bastle mal ein lauffähiges Minimalbeispiel.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.08.2014, 00:04     Titel:
  Antworten mit Zitat      
Hallo,

z.B. reltol = 1e-12 sollte MATLAB dazu zwingen, mit ausreichend feiner Abtastung zu arbeiten. Es kann zwar sein, dass dblquad da nicht gerade effizient ist, aber die Ergebnisse sollten ausreichend genau sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
bluesaturn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 06.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2014, 00:08     Titel:
  Antworten mit Zitat      
Guten Morgen Smile
Haettest du auch einen Wert für abstob vielleicht, bitte?
VG
b
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.08.2014, 00:19     Titel:
  Antworten mit Zitat      
Hallo,

ebenso 1e-12.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.