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

Integration von Funktionenscharen

 

MN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 10:53     Titel: Integration von Funktionenscharen
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2014, 10:56     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
MN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 11:27     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2014, 11:37     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
MN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 11:52     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2014, 12:49     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
MN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2014, 12:59     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2014, 13:06     Titel:
  Antworten mit Zitat      
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
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 - 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.