|
|
Integration von Funktionenscharen |
|
MN |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.02.2014, 10:53
Titel: Integration von Funktionenscharen
|
|
Hi
ich habe ein Problem beim numerischen integrieren. Gegeben ist eine Funktion in drei Variablen f=@(a,x,y)... ; die will ich in x und in y integrieren. Das aber für verschiedene Werte von a. Genauer habe ich a1=0:0.1:1 und f soll nun 11mal integriert werden. Zunächst habe ich es mit
g=@(x,y) f(a1,x,y);
dblquad(g,0,1,0,1)
probiert, gibt aber eine Fehlermeldung. Deshalb habe ich eine for-Schleife gebaut, also
for a1=0:0.1:1
g=@(x,y) f(a1,x,y)
dblquad(g,0,1,0,1)
end
das funktioniert zwar, ist aber SEHR langsam. Vielleicht habt ihr Ideen, wie das besser geht?
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.02.2014, 10:56
Titel:
|
|
Hallo,
wie sieht f aus? Ist eine symbolische Integration möglich?
Ansonsten fallen mir zunächst keine anderen Möglichkeiten ein. Es wäre jedenfalls hilfreich, mehr über f zu wissen.
Grüße,
Harald
P.S.: Wenn du eine Fehlermeldung bekommst, dann kopiere diese bitte in Zukunft hier rein.
|
|
|
MN |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.02.2014, 11:27
Titel:
|
|
Hallo Harald,
danke für die schnelle Antwort.
f ist ein stückweise definiertes Polynom 2.Grades.
Symbolisches integrieren ist theoretisch möglich, im Büro habe ich aber die symbolic toolbox nicht, daher müsste ich das alles zu Hause machen. Wie wäre denn in diesem Fall der Weg?
Die Fehlermeldung ist die folgende:
??? Error using ==> times
Matrix dimensions must agree.
Error in ==> quad at 62
y = f(x, varargin{:});
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.02.2014, 11:37
Titel:
|
|
Hallo,
Definition der symbolischen Variablen mit syms, und dann symbolische Integration generell mit int.
Polynome sollten da kein Problem sein.
Wenn du das 'stückweise' noch präzisieren könntest, insbesondere: wovon hängen die Grenzen ab?
Grüße,
Harald
|
|
|
MN |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.02.2014, 11:52
Titel:
|
|
Die Grenzen sind von der Gestalt (g<=h) oder ähnlich, wobei g und h wiederum polynome in verschiedenen Variablen sind, teilweise auch in x und y. Bevor die Frage auftaucht, nein das lässt sich nicht in die Integrationsgrenzen einbauen. Die Funktion ist wirklich ziemlich lang und hässlich.
Für das numerische Integrieren hast du also auch keine Idee?
Wie würde das beim symbolischen Integrieren also aussehen - ungefähr so?
a1=0:0.1:1
syms a,x,y
g=@(a)int(int(f,y,0,1),x,0,1);
ans=g(a1)
und das ist schneller als der numerische Weg?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.02.2014, 12:49
Titel:
|
|
Hallo,
wenn das möglich ist, stelle doch bitte mal deinen bisherigen Code komplett zur Verfügung. Es kann gut sein, dass man beispielsweise die Funktionsauswertung an sich effizienter gestalten kann.
Zitat: |
Für das numerische Integrieren hast du also auch keine Idee? |
Nur die Idee, an der Effizienz von f zu arbeiten.
Zitat: |
und das ist schneller als der numerische Weg? |
Ich kann es nicht versprechen, aber es ist zumindest möglich.
Grüße,
Harald
|
|
|
MN |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 10.02.2014, 12:59
Titel:
|
|
den Code würde ich ungern online stellen - wie gesagt ist die Funktion sehr lang und sehr hässlich.
Ich werde es zunächst mit dem symbolischen integrieren versuchen. Es reicht mir erst mal zu wissen, dass es numerisch offenbar nur mit der for-Schleife funktioniert.
Vielen Dank auf jeden Fall an dich, Harald, du hast mir sehr geholfen!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 10.02.2014, 13:06
Titel:
|
|
Hallo,
Zitat: |
wie gesagt ist die Funktion sehr lang und sehr hässlich. |
Vielleicht lässt sich genau das ja ändern.
Lass mal den Profiler über deinen Code laufen. Es würde mich wundern, wenn nicht die meiste Zeit mit Auswertungen von f verbracht werden würde - eben weil davon so viele notwendig sind.
Eine Möglichkeit wäre übrigens noch, sofern vorhanden integral2 statt dblquad zu verwenden. Das ist eine neuere und möglicherweise schnellere Funktion.
Grüße,
Harald
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|