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

Frage an die Matlab-Profis --> 5 fach Integral

 

Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2015, 12:16     Titel:
  Antworten mit Zitat      
Hallo Harald,

dein Code klappt super.

Nun möchte ich aber folgendes Integral auswerten, wobei ich jedoch hier zur Vereinfachungn immer die Grenzen zw. 0 und 1 gesetzt habe.

Den Integralausdruck findet man auf dem Bild, oben den Originalausdruck und unten den vereinfachten Ausdruck, den ich zunächst zum testen integrieren wollte.

Folgendes Problem tritt dabei auf:

Ersetze ich überall die Grenzen zwischen 0 und 1, so rechnet der mehrere Stunden und bricht dann am Ende ab mit einer Fehlermeldung.

Dass das so lange dauert, liegt vermutlich darin, dass ich im ersten (bzw. innersten) Integral die Variable x nicht mit 1 ersetzen darf, da sonst nichts bei rauskommt.

Gut, dann habe ich die 1 im ersten Integral mit dem x ersetzt und bekomme jetzt logischerweiße eine Fehlermeldung, dass x nicht definiert ist.


Hier mein Code dazu:
Code:

clc,clear
tic

F1=@(x,y,z,p,q) (x-p)./(sqrt((x-p).^2+(y-q).^2+(z-0.5).^2)).^3

F2=@(x,y,z,p,q) (x-p)./(sqrt((x-p).^2+(y-q).^2+(z-0.75).^2)).^3

intFun= @(z,p,q) integral2(@(x,y) F1(x,y,z,p,q)-F2(x,y,z,p,q),0,x,0,1);

IF=@(z,p,q) arrayfun(@(z,p,q) intFun(z,p,q),z,p,q)

Erg=integral3(@(z,p,q) IF(z,p,q),0,1,0,1,0,1, 'RelTol', 1e-6)

toc
 


Hmm, gibt es eine Möglichkeit, wie ich dies in den Griff bekomme?

Danke Harald!

Unbenannt.png
 Beschreibung:

Download
 Dateiname:  Unbenannt.png
 Dateigröße:  37.86 KB
 Heruntergeladen:  454 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2015, 11:53     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ersetze ich überall die Grenzen zwischen 0 und 1, so rechnet der mehrere Stunden und bricht dann am Ende ab mit einer Fehlermeldung
.
Mit welcher Fehlermeldung? Hier würde ich definitiv das Testen von integraln vom File Exchange empfehlen. Der einzige Grund, warum das vorher nicht anwendbar war, war die partielle Ableitung (und auch da denke ich inzwischen, dass man das umformen könnte).

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2015, 12:37     Titel:
  Antworten mit Zitat      
Hallo Harald,

also mit integraln komme ich zwar zurecht, jedoch bekomme ich auch hier die Fehlermeldung, dass x nicht definiert ist.

Mit integraln funktioniert es genau so wie mit deinem Code, d.h. für Funktionen wo die Grenzen klar vorgegeben werden, passt das super.

Muss jedoch einmal symbolisch gerechnet werden (da ymax hier x ist), so funktioniert das nicht, oder übersehe ich etwas?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2015, 13:10     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es so versuchen... statt von 0 bis x von 0 bis 1 integrieren, in die Funktion aber eine Fallunterscheidung einbauen, dass der Integrand 0 wird, falls y>x.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2015, 13:48     Titel:
  Antworten mit Zitat      
Harald vielen Dank für deine Antworten, aber was habe ich dadurch gewonnen bzw. ist dass mathematisch äquivalent, wenn ich das einfach so mache?

[EDITED, Jan, BITTE KEIN TOP-QUOTING!!!]
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2015, 13:58     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
was habe ich dadurch gewonnen

integraln ist anwendbar, es wird einfacher

Zitat:
ist dass mathematisch äquivalent, wenn ich das einfach so mache?

Ja, denn über 0 integrieren gibt 0.

Beispiel:
Code:
syms x y
int(int(x + y^2, y, 0, x), x, 0, 1)

f = @(x, y) (x + y.^2) .* (y>x); % das kann leichter sein als Fallunterscheidung
integral2(f, 0, 1, 0, 1)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2015, 14:14     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

Ja, denn über 0 integrieren gibt 0.


Naja, da kommt doch eine Konstante raus.

Also wenn ich dein Code auf das 5 fach Integral mit den Grenzen zwischen 0 und 1 ersetze, so bekomme ich folgende Meldung:

Warning: Reached the maximum number of function evaluations (10000). The result fails the global error test.
> In funfun\private\integral2Calc>integral2t at 129
In funfun\private\integral2Calc at 9
In integral2 at 106


Ich versteh aber das mit der Fallunterscheidung noch nicht, also die Intention:

Ich frage ab, ob y>x ist, sofern das stimmt, bekomme ich entweder 1 oder null....

Weil, was ist, wenn y kleiner als x ist, dann passt doch das Ergebnis nicht mehr, oder?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2015, 14:57     Titel:
  Antworten mit Zitat      
Hallo,

die Warnung bekomme ich auch, das Ergebnis stimmt aber überein.
Du kannst ja testhalber die Anzahl der Funktionsauswertungen erhöhen (bei mir Zeile 32 von integral2calc). Das dauert dann allerdings (noch) länger.


y < x: es wird "normal" integriert
y > x: es wird über 0 integriert (somit kein Beitrag).

Und damit wird umgesetzt, dass für y von 0 bis x integriert werden soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2015, 16:34     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:


y < x: es wird "normal" integriert
y > x: es wird über 0 integriert (somit kein Beitrag).

Und damit wird umgesetzt, dass für y von 0 bis x integriert werden soll.



Hallo Harald.

aber du hast ja geschrieben:

f = @(x, y) (x + y.^2) .* (y>x), d.h. für y<x bekomme ich doch eine 0 und somit wird über 0 integriert, oder?

Aber es tut mir leid, ich bin so total der Matlab-liebhaber, aber auf diesen Trick wäre ich nie gekommen zumal ich es immer noch nicht verstanden habe. Kannst du mir diesen Ansatz vll. etwas ausführlicher erklären, ich stehe total auf den schlauch. Habe eben auch mit meinem Kommilitonen darüber diskutiert, der Ansatz ist immer noch nicht verstanden.


Grüße Benjamin&Sascha
 
Harald
Forum-Meister

Forum-Meister


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

ihr habt recht, ich hatte mich im Code in der Richtung des Vergleichs geirrt. Dummerweise kommt in diesem Beispiel das gleiche heraus, egal ob man < oder > verwendet.

Besseres Beispiel mit richtiger Vergleichsrichtung:
Code:
syms x y
int(int(x + y^3, y, 0, x), x, 0, 1)

f = @(x, y) (x + y.^3) .* (y<x); % das kann leichter sein als Fallunterscheidung
integral2(f, 0, 1, 0, 1)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2015, 08:36     Titel:
  Antworten mit Zitat      
Hallo Harald,

klappt wunderbar! Vielen Dank für deine Mühe! Hast uns sehr geholfen!
 
Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2015, 09:10     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich versuche nun den Integralausdruck auszuwerten, er rechnet und rechnet, dabei bekomme ich andauern folgende Meldung im Matlab-command-window:

Warning: Reached the maximum number of function evaluations (10000). The result fails the global error test.
> In funfun\private\integral2Calc>integral2t at 129
In funfun\private\integral2Calc at 9
In integral2 at 106
In @(z,p,q)integral2(@(x,y)F1(x,y,z,p,q)-F2(x,y,z,p,q),0,1,0,k)
In @(z,p,q)intFun(z,p,q)
In @(z,p,q)arrayfun(@(z,p,q)intFun(z,p,q),z,p,q)
In @(z,p,q)IF(z,p,q)
In integral3>@(y,z)FUN(x(i)*ones(size(z)),y,z) at 147
In funfun\private\integral2Calc>integral2t/tensor at 228
In funfun\private\integral2Calc>integral2t at 88
In funfun\private\integral2Calc at 9
In integral3>innerintegral at 146
In funfun\private\integralCalc>iterateScalarValued at 314
In funfun\private\integralCalc>vadapt at 132
In funfun\private\integralCalc at 75
In integral3 at 121
>>



Soll ich das weiterlaufen lassen und beobachten, oder ist da was falsch, was ich ändern muss?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.10.2015, 09:47     Titel:
  Antworten mit Zitat      
Hallo,

was erzeugt denn diese Fehlermeldung?

Ich kann mich nur wiederholen: eine Schachtelung von integral2 und integral3 ist nur sinnvoll, wenn es "nicht anders geht" (z.B. wegen partieller Ableitungen dazwischen).

Für ein "normales" 5fach-Integral würde ich integraln von File Exchange nehmen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.10.2015, 09:52     Titel:
  Antworten mit Zitat      
Hallo Benjamin Nels,

Ich weise Dich in diesem Thread jetzt zum 8. Mal darauf hin, dass in diesem Forum die vorhergehenden Nachrichten nicht vollständig gequotet werden. Es ist zeitaufwändig Deine Nachrichten so zu editieren, dass sie den Thread nicht mit redundantem Rauschen füllen.

Bitte, Benjamin, blähe Deine Nachrichten nicht unnötig auf. Es ist immer eine gute Idee, sich an den Stil eines Forums zu halten.

Danke, Jan

Zuletzt bearbeitet von Jan S am 14.10.2015, 09:57, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Benjamin Nels

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2015, 09:55     Titel:
  Antworten mit Zitat      
Hallo Jan,

sorry, ich mache nichts absichtlich. Was heißt denn hier quoten oder was mache ich falsch?

Geht es ums zitieren? Die anderen zitieren doch auch, oder soll das nicht gemach werden?
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter

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.