www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Mathematica" - Problem mit NIntegrate
Problem mit NIntegrate < Mathematica < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Mathematica"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Problem mit NIntegrate: Tipp
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 02:01 So 27.07.2008
Autor: PaRu

ich möchte eine nummerische lösung für eine gleichung in der die variable, nach der gelöst werden soll, in einem integral steht. das ganze habe ich versucht wie folgt zu lösen:

[mm] D_c[\text{En}]\text{:=}\frac{1}{4 \pi ^2}\sqrt{\text{En}\left(\frac{2 m_e}{\text{hBar}^2}\right)^3}\\ [/mm]
[mm] \text{Ea}=\left(\text{En}-h \frac{c}{\lambda _{\text{gap}}}\right)\frac{m_{\text{hh}}}{m_e+m_{\text{hh}}}\\ [/mm]
[mm] f_c[\text{En}]\text{:=}\frac{1}{1+\text{Exp}\left[\frac{\text{Ea}-\text{En}_{\text{fc}}}{k T}\right]}\\ [/mm]
[mm] \text{NSolve}\left[N_z==\text{NIntegrate}\left[D_c[\text{En}] f_c[\text{En}],\left\{\text{En},0,10^{-18}\right\}\right], \text{En}_{\text{fc}}\right] [/mm]

das problem scheint zu sein, dass NIntegrate nicht [mm] \text{En}_{\text{fc}} [/mm] kennt. wie kann man das problem umgehen?

Dateianhänge:
Anhang Nr. 1 (Typ: nb) [nicht öffentlich]
        
Bezug
Problem mit NIntegrate: Antwort
Status: (Antwort) fertig Status 
Datum: 07:12 So 27.07.2008
Autor: Somebody


> ich möchte eine nummerische lösung für eine gleichung in
> der die variable, nach der gelöst werden soll, in einem
> integral steht. das ganze habe ich versucht wie folgt zu
> lösen:
>  
> [mm]D_c[\text{En}]\text{:=}\frac{1}{4 \pi ^2}\sqrt{\text{En}\left(\frac{2 m_e}{\text{hBar}^2}\right)^3}\\[/mm]
>  
> [mm]\text{Ea}=\left(\text{En}-h \frac{c}{\lambda _{\text{gap}}}\right)\frac{m_{\text{hh}}}{m_e+m_{\text{hh}}}\\[/mm]
>  
> [mm]f_c[\text{En}]\text{:=}\frac{1}{1+\text{Exp}\left[\frac{\text{Ea}-\text{En}_{\text{fc}}}{k T}\right]}\\[/mm]
>  
> [mm]\text{NSolve}\left[N_z==\text{NIntegrate}\left[D_c[\text{En}] f_c[\text{En}],\left\{\text{En},0,10^{-18}\right\}\right], \text{En}_{\text{fc}}\right][/mm]
>  
> das problem scheint zu sein, dass NIntegrate nicht
> [mm]\text{En}_{\text{fc}}[/mm] kennt.

NIntegrate ist eine numerische Integration: und dies setzt voraus, dass der Integrand für jeden Wert der Integrationsvariablen auf eine Konstante heruntergekocht werden kann, was hier nicht der Fall ist. Kurz: So geht's sicher nicht.

> wie kann man das problem  umgehen?

Allenfalls könntest Du darauf hoffen, dass sich der Wert dieses Integrals durch Integrate symbolisch (d.h. als Funktion von [mm] $\text{En}_{\text{fc}}$) [/mm] berechnen lässt (also mit Integrate, statt NIntegrate). Dass dies möglich ist, scheint mir aber auf den ersten Blick eher unwahrscheinlich. Ein solches, symbolisches Ergebnis der Integration könntest Du dann natürlich von NSolve nach [mm] $\text{En}_{\text{fc}}$ [/mm] auflösen lassen.

Ich denke, Du müsstest versuchen, NSolve dazu zu veranlassen, NIntegrate für jeden Wert von [mm] $\text{En}_{\text{fc}}$ [/mm] neu aufzurufen. (Dürfte dramatisch negative Konsequenzen für die Geschwindigkeit von NSolve haben: aber besser langsam als gar nicht...)
  Vielleicht würde es für diesen Zweck schon genügen, eine eigene Funktion zu definieren, die für [mm] $\text{En}_{\text{fc}}$ [/mm] den Wert von NIntegrate zurück gibt, und NSolve nur diese eigene Funktion zu übergeben, um eine voreilige symbolische Expansion von NIntegrate im Body von NSolve zu verhindern. - Mangels Zugang zu Mathematica kann ich aber in diese Richtung zur Zeit nicht experimentieren...

Bezug
                
Bezug
Problem mit NIntegrate: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 12:01 Mo 28.07.2008
Autor: PaRu

danke erst einmal. doch leider verstehe ich deinen letzten absatz nicht so recht. zudem bin ich auch nicht so der mathematica experte.
> Vielleicht würde es für diesen Zweck schon genügen, eine
> eigene Funktion zu definieren, die für
> [mm]\text{En}_{\text{fc}}[/mm] den Wert von NIntegrate zurück gibt,
> und NSolve nur diese eigene Funktion zu übergeben, um eine
> voreilige symbolische Expansion von NIntegrate im Body von
> NSolve zu verhindern.

normalerweise würde man das problem über ein optimierungsverfahren lösen. man setzt für [mm]\text{En}_{\text{fc}}[/mm] einen wert ein und schaut ob das ergebnis zu groß oder zu klein ist. dementsprechend ändert man [mm]\text{En}_{\text{fc}}[/mm] ab. das ganze itteriert so lange, bis die differenz von dem soll-wert zum ist-wert ([mm]N_{z}[/mm]) sehr klein ist. da gibt es doch bestimmt auch fertige verfahren in mathematica.

Bezug
                        
Bezug
Problem mit NIntegrate: Antwort
Status: (Antwort) fertig Status 
Datum: 12:58 Mo 28.07.2008
Autor: Somebody


> danke erst einmal. doch leider verstehe ich deinen letzten
> absatz nicht so recht. zudem bin ich auch nicht so der
> mathematica experte.
>  > Vielleicht würde es für diesen Zweck schon genügen, eine

> > eigene Funktion zu definieren, die für
> > [mm]\text{En}_{\text{fc}}[/mm] den Wert von NIntegrate zurück gibt,
> > und NSolve nur diese eigene Funktion zu übergeben, um eine
> > voreilige symbolische Expansion von NIntegrate im Body von
> > NSolve zu verhindern.

Bei Deiner Verwendung von Solve
[mm] [center]$\text{NSolve}\left[N_z==\text{NIntegrate}\left[D_c[\text{En}] f_c[\text{En}],\left\{\text{En},0,10^{-18}\right\}\right], \text{En}_{\text{fc}}\right] [/mm] $[/center]
Enthält der Körper des an NIntegrate übergebenen Integranden noch eine Variable. Deshalb kann NIntegrate keine numerische Integration mit den gegebenen Grenzen machen. Du musst meiner Meinung nach Solve beim Vergleich mit [mm] $N_z$ [/mm] auf der rechten Seite von $==$ eine Funktion angeben, die [mm] $\mathrm{En}_{\text{fc}}$ [/mm] als explizites Argument engegennimmt.

>  
> normalerweise würde man das problem über ein
> optimierungsverfahren lösen. man setzt für
> [mm]\text{En}_{\text{fc}}[/mm] einen wert ein und schaut ob das
> ergebnis zu groß oder zu klein ist. dementsprechend ändert
> man [mm]\text{En}_{\text{fc}}[/mm] ab. das ganze itteriert so lange,
> bis die differenz von dem soll-wert zum ist-wert ([mm]N_{z}[/mm])
> sehr klein ist. da gibt es doch bestimmt auch fertige
> verfahren in mathematica.

Schon, nur versucht Mathematica den Ausdruck [mm] $\text{NIntegrate}\left[D_c[\text{En}] f_c[\text{En}],\left\{\text{En},0,10^{-18}\right\}\right]$ [/mm] zuerst soweit zu evaluieren, bis es überhaupt erkennen kann, wo denn der Wert von [mm] $\text{En}_{\text{fc}}$ [/mm] eingesetzt werden kann. Bei diesem Versuch NIntegrate zu evaluieren, kommt es zu einem Fehler, weil ja eben [mm] $\text{En}_{\text{fc}}$ [/mm] noch gar nicht definiert ist. Also könntest Du eine explizite Funktion definieren, die [mm] $\text{En}_{\text{fc}}$ [/mm] als Argument entgegen nimmt und als Wert den Wert von NIntegrate (für diesen Wert von [mm] $\text{En}_{\text{fc}}$) [/mm] zurückgibt.
Es würde wahrscheinlich auch genügen, den Integranden von NIntegrate als Funktion zu schreiben, der der Parameter [mm] $\text{En}_{\text{fc}}$ [/mm] explizit übergeben wird. Das heisst, Du könntest Deine Funktion [mm] $f_c$ [/mm] mit zwei Parametern versehen, so:

[mm]f_c[\text{En},\text{En}_{\text{fc}}]\text{:=}\frac{1}{1+\text{Exp}\left[\frac{\text{Ea}-\text{En}_{\text{fc}}}{k T}\right]}[/mm]


und dann Solve + NIntegrate etwa in dieser Form aufrufen:

[mm]\text{NSolve}\left[N_z==\text{NIntegrate}\left[D_c[\text{En}] f_c[\text{En},\text{En}_{\text{fc}}],\left\{\text{En},0,10^{-18}\right\}\right], \text{En}_{\text{fc}}\right][/mm]


Kurz: Du darfst die Einsetzung konkreter Zahlenwerte für [mm] $\text{En}_{\text{fc}}$ [/mm] nicht über den blossen Kontext, das "Environment" machen lassen, sondern musst die Einsetzung explizit über Einsetzen von Werten für einen Funktionsparameter vornehmen.

Bezug
                                
Bezug
Problem mit NIntegrate: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:40 Mo 28.07.2008
Autor: PaRu

leider funktioniert dein vorschlag nicht. es macht keinen unterschied, ob ich die variable [mm]\text{En}_{\text{fc}}[/mm] expliziet im funktionskopf erwähne.

ich habe noch die funktion findroot gefunden, bei der ich mir erhoft habe, dass sie nach dem von mir beschriebene algorithmus funktioniert.
[mm]\text{FindRoot}\left[N_z==\text{NIntegrate}\left[D_c[\text{En}] f_c[\text{En},\text{En}_{\text{fc}}],\left\{\text{En},0,10^{-18}\right\}\right], \{\text{En}_{\text{fc}}, \text{En}_0\}\right][/mm]
doch leider bekomme ich wieder ohne ende fehlermeldungen.

Dateianhänge:
Anhang Nr. 1 (Typ: nb) [nicht öffentlich]
Bezug
                                        
Bezug
Problem mit NIntegrate: Antwort
Status: (Antwort) fertig Status 
Datum: 17:09 Mo 28.07.2008
Autor: Somebody


> leider funktioniert dein vorschlag nicht. es macht keinen
> unterschied, ob ich die variable [mm]\text{En}_{\text{fc}}[/mm]
> expliziet im funktionskopf erwähne.
>  
> ich habe noch die funktion findroot gefunden, bei der ich
> mir erhoft habe, dass sie nach dem von mir beschriebene
> algorithmus funktioniert.
>  
> [mm]\text{FindRoot}\left[N_z==\text{NIntegrate}\left[D_c[\text{En}] f_c[\text{En},\text{En}_{\text{fc}}],\left\{\text{En},0,10^{-18}\right\}\right], \{\text{En}_{\text{fc}}, \text{En}_0\}\right][/mm]
>  
> doch leider bekomme ich wieder ohne ende fehlermeldungen.

Das erstaunt mich nicht, denn Du hast im Integranden ja noch weitere Variablen drin, wie etwa $k$ und $T$. Wo sind denn für diese Symbole konkrete numerische Werte definiert, so dass numerisches Integrieren überhaupt möglich ist? Wenn Du den Integranden [mm] $D_c[\text{En}] f_c[\text{En},\text{En}_{\text{fc}}]$ [/mm] mit einer konkreten Zahl anstelle von [mm] $\text{En}_{\text{fc}}$ [/mm] von Mathematica evaluieren lässt: kommt dann ein Term heraus, in dem [mm] $\text{En}$ [/mm]  (die Integrationsvariable für NIntegrate) die einzige verbleibende Variable ist? - Wenn nicht, musst Du eben diesen weiteren Variablen konkrete Werte zuweisen, bevor Du NIntegrate anwendest.

Bezug
                                                
Bezug
Problem mit NIntegrate: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 17:47 Mo 28.07.2008
Autor: PaRu

ich hatte eigentlich eine neue nb-datei anghängt, bei der alles definiert ist? egal ich poste sie nochmal.

ich kann En_fc nicht angeben, da dieser wert optimiert werden soll. es geht nicht! jeder optimierungsalgorithmus benutzt einen startwert und iteriert so lange, bis es passt. anscheinend ist das aber bei FindRoot nicht der fall. FindRoot und NIntegrate kommunizieren wohl nicht so recht miteinander. muss ich das nun über eine while-schleife selber programmieren?

das integral läßt sich nummerisch ohne probleme lösen. in der nb-datei schätze ich einen startwert mit dem es prima geht.

Dateianhänge:
Anhang Nr. 1 (Typ: nb) [nicht öffentlich]
Bezug
                                                        
Bezug
Problem mit NIntegrate: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:05 Mi 30.07.2008
Autor: PaRu

ich habe es hin bekommen,  indem ich die funktionen direkt in dem NIntegrate-befehl ersetzt habe.

Bezug
        
Bezug
Problem mit NIntegrate: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:06 Mi 30.07.2008
Autor: PaRu

kann mir bitte jemand erklären, warum mathematica hier fehler ausgibt?

Dateianhänge:
Anhang Nr. 1 (Typ: nb) [nicht öffentlich]
Bezug
        
Bezug
Problem mit NIntegrate: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 10:23 Mi 30.07.2008
Autor: PaRu

warum kann mathematica die funktionen in NIntgrate nicht auflösen?
das problem lässt sich nur lösen, wenn ich die funktionen direkt in den von NIntegrate zu lösenden term schreibe. ich würde aber gerne der übersicht halber die funktionen weiter benutzen. kann man da etwas mit Block, Evaluate oder holdall machen oder ist dass die völlig falsche richtung?

Dateianhänge:
Anhang Nr. 1 (Typ: nb) [nicht öffentlich]
Bezug
                
Bezug
Problem mit NIntegrate: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:26 Do 31.07.2008
Autor: PaRu

das problem liegt nicht an NIntegrate sondern an der definition der einen funktion. mein einer eingabeparameter hatte ein indice und das verträgt sich nicht mit dem unterstrich in der funktionsdefinition.

Bezug
                
Bezug
Problem mit NIntegrate: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:20 Sa 30.08.2008
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Mathematica"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]