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

Mehrfachintegrale

 

kris1985
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2009, 15:16     Titel: Mehrfachintegrale
  Antworten mit Zitat      
Hallo,
ich hab ein Problem mit Matlab und zwar muss ich eine recht komplexe Integration durchführen von null bis unendlich....
Ich hab es über syms und int() versucht, jedoch kam dann eine Fehlermeldung...

Warning: Explicit integral could not be found.
> In sym.int at 64

ans =

int(k1^2/(k1^2 + k2^2 + (288230376151711744*(Sdelta - (841*k1)/1000)^2)/2546803603676525 + 100)^(5/2), k1)


Folgende Fragestellung hab ich dazu: Wie kann ich Mehrfachintegrale in Matlab stabil lösen?

Bei mir handelt es sich um folgende Fkt die ich Integrieren möchte:

F(k1,k2)=c*((k1^2)/((2*(S-k1)^2)+(k1^2)+(k2^2))

Also würde mich über Hilfe und Anregungen freuen!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich würde die Integration numerisch in einem großen Rechteck, z.B. [0, 100] x [0, 100] oder [0, 1000] x [0, 1000] vornehmen. Die Funktion dazu:
Code:


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2009, 20:14     Titel:
  Antworten mit Zitat      
hallo!
ich werd es morgen auf arbeit mal versuchen...
was mach ich denn wenn ich von 0 bis unendlich integrieren möchte??
einfach xmax=inf und ymax=inf ??

gruß kris
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bis unendlich integrieren geht numerisch nicht. Du wirst das durch hohe Werte annähern müssen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2009, 20:21     Titel:
  Antworten mit Zitat      
ok vielen dank! ich mach mich mal ran und frag evtl nochmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
kris1985
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2009, 21:50     Titel:
  Antworten mit Zitat      
also ...ich hab nun erstmal nen funktion-file geschrieben...

Code:
 function z = integrnd(x, y)
     
      z = 2*((x.^2)./((2*(3-x).^2)+(x.^2)+(y.^2)))


dannach wollte ich integrieren ...läuft denke ich auch soweit ganz gut..
Code:
Q = dblquad(@integrnd, 0,1000000 , 0, 1000000)



jedoch will ich nun noch eine variable in z haben nach der nicht integriert wird....also das z soll wie folgt aussehen
Code:

 z = 2*((x.^2)./((2*(Str-x).^2)+(x.^2)+(y.^2)))

wobei Str die Variable is nach der nich integriert werden soll jedoch geht dsa nich ...will ein ergebniss das ungefährt wie folgt aussieht: Q=N*Str ...wobei N irgendeine Zahl is...

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das geht numerisch eben nicht. Was du allerdings machen kannst: das ganze für verschiedene Werte von str auswerten und dann z.B. plotten.
Symbolisch ist das Problem, dass man eine Stammfunktion finden müsste, und die gibt es wohl nicht analytisch - also bleibt fast nur ein numerischer Ansatz...

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2009, 22:19     Titel:
  Antworten mit Zitat      
hmm meine problem is das ich eine funktion hab die wie folgt aufgebaut ist:

F(Str)= H(Str)* Integral.....
wobei aus dem integral wiederrum eine fkt die abhängig von Str sein soll....und am ende will ich das F(Str) über die Str plotten...

ich versuch mal was zu bauen ...oder weisst du da weiter?

und schonmal danke für die hilfe!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn

Code:
function z = integrnd(x, y, str)


dann

Code:
F(Str)= H(Str)* dblquad(@(x, y) integrnd(x, y, Str), 0,1000000 , 0, 1000000)


Stichwort: anonymous function handle.

Dann
Code:
plot(zrange, F(zrange))


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2009, 23:02     Titel:
  Antworten mit Zitat      
also hab nun mein programm erweitert:
Code:
.....
H=c+(1./(X+r));
plot(f,H)
ylim([-10 20])

F(w)= H(w)* dblquad(@(x, y) integrnd(x, y, w), 0,1000000 , 0, 1000000)
plot(zrange, F(zrange))
 


wobei c,X,r Funktionen von w sind ....
mein funktion-file sieht nun wie folgt aus:
Code:

     function z = integrnd(x, y, w)
     
      z = 2*((x.^2)./((2*((w.*0.0097/343)-x).^2)+(x.^2)+(y.^2)))




aber bekomm folgende fehlermeldung ...

Code:


??? Subscript indices must either be real positive integers or logicals.

Error in ==> reso2 at 66
F(w)= H(w)* dblquad(@(x, y) integrnd(x, y, w), 0,1000000 , 0, 1000000)

wobei reso2 mit script-file is den ich aufruf...
gruß kris
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.12.2009, 23:28     Titel:
  Antworten mit Zitat      
Hi,

mein Fehler, sorry... so müsste es gehen:

Code:
H= @(w) c(w)+(1./(X(w)+r(w)));
plot(f,H)
ylim([-10 20])

F= @(w) H(w)* dblquad(@(x, y) integrnd(x, y, w), 0,1000000 , 0, 1000000)
plot(zrange, F(zrange))


Wichtig: H muss selber ein Function Handle oder ein Ausdruck von w sein.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2009, 23:45     Titel:
  Antworten mit Zitat      
bekomm immernoch ne fehlermeldung....komm da gerade nicht weiter...
also das funktion-file is immernoch gleich und das script-file sieht nun wie folgt aus

Code:

clear
clf
%definitionen
w=3.1416e+003:1.0681e+004;
k=w/343;
Xp=cot(k*0.144);
Uan=36.7
l=0.007
%weitere faktoren
SiZuSo=(0.1*0.1)/(0.1*0.007)
din=(0.007/2)*log((2*0.1)/(pi()*0.007))
dout=(0.007/(pi()*2))*log((8*0.1)/(exp(1)*0.007))

roh1=((w*l)/2)*((1+1i)/Uan);
roh2=((w*l)/2)*((1-1i)/Uan);
%berechnung von faktoren
J01=besselj(0,roh1);

J11=besselj(1,roh1);

J02=besselj(0,roh2);

J12=besselj(1,roh2);

a1=-roh1.*J02;
b21=(J01-i*J11);
a2=J01-(2*i*roh1).*b21;
a3=roh2.*J01;
b22=(J02-i*J12);
a4=J02-(2*i*roh2).*b22;


f1=a1.*a2+a3.*a4;

c1=roh1.*(i*roh2).*b22;
c2=a2;
c3=roh2.*(i*roh1).*b21;
c4=a4;

f2=c1.*c2-c3.*c4;

F=f1./f2;
Sr=w*l/Uan;
rflow=(2/pi)*Sr.*imag(F);
dflow=(2/pi())*(real(F)+2);


%erster relevanter wert für die endfunktion
x=(SiZuSo*k).*(din+(0.007*dflow)+dout);

f=w/(2*pi);
%plot(f,Xp,f,x)
%ylim([-10 10])

Kneu=k*0.14;
%zweiter relevanter wert für die endfunktionen
c=1./(sin(Kneu).*sin(Kneu));

X=(Xp-x).*(Xp-x);
Rrad=0.007*0.1/(2*pi)*(k.*k);
Rs=(Uan/343)*rflow;

r=SiZuSo*((Rrad+Rs).*(Rrad+Rs));

H= @(w) c(w)+(1./(X(w)+r(w)));
%plot(f,H)
%ylim([-10 20])

F= @(w) H(w)* dblquad(@(x, y) integrnd(x, y, w), 0,1000000 , 0, 1000000)
plot(w, F)


 


würde den fehler gerne verstehen damit mir sowas am abend nie wieder vorkommt! auch mit fplot komm ich nicht weiter...

gruß kris
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das Problem liegt in der Vermischung von Funktionen und Vektoren. Du hattest gesagt, dass H eine Funktion wäre. Das bedeutet, dass man einen Vektor als Eingabeargument angeben kann, und auch wieder einen Vektor herausbekommt. Was du hier hast, ist aber einfach nur ein Vektor. Wie man damit am besten umgeht, müsste ich mir nochmal in Ruhe ansehen.
Schau dir doch inzwischen mal die Doku zu Function Handles an, damit du dafür ein besseres Verständnis entwickelst.
Es muss in deiner Situation jedenfalls
Code:
H= c+(1./(X+r));
heissen. Wie man dann F am besten definiert, weiss ich selbst noch nicht.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 08.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2009, 09:37     Titel:
  Antworten mit Zitat      
hab H wieder als Vektor

bis dahin läuft dann auch wieder alles aber ab der funktion kommen dann wieder fehler...


naja ich les mal ein bischen weiter!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hier ein funktionierendes Beispiel:

Code:
function inte
clear
clf
%definitionen
w=3.1416e+003:1.0681e+004;
k=w/343;
Xp=cot(k*0.144);
Uan=36.7
l=0.007
%weitere faktoren
SiZuSo=(0.1*0.1)/(0.1*0.007)
din=(0.007/2)*log((2*0.1)/(pi()*0.007))
dout=(0.007/(pi()*2))*log((8*0.1)/(exp(1)*0.007))

roh1=((w*l)/2)*((1+1i)/Uan);
roh2=((w*l)/2)*((1-1i)/Uan);
%berechnung von faktoren
J01=besselj(0,roh1);

J11=besselj(1,roh1);

J02=besselj(0,roh2);

J12=besselj(1,roh2);

a1=-roh1.*J02;
b21=(J01-i*J11);
a2=J01-(2*i*roh1).*b21;
a3=roh2.*J01;
b22=(J02-i*J12);
a4=J02-(2*i*roh2).*b22;


f1=a1.*a2+a3.*a4;

c1=roh1.*(i*roh2).*b22;
c2=a2;
c3=roh2.*(i*roh1).*b21;
c4=a4;

f2=c1.*c2-c3.*c4;

F=f1./f2;
Sr=w*l/Uan;
rflow=(2/pi)*Sr.*imag(F);
dflow=(2/pi())*(real(F)+2);


%erster relevanter wert für die endfunktion
x=(SiZuSo*k).*(din+(0.007*dflow)+dout);

f=w/(2*pi);
%plot(f,Xp,f,x)
%ylim([-10 10])

Kneu=k*0.14;
%zweiter relevanter wert für die endfunktionen
c=1./(sin(Kneu).*sin(Kneu));

X=(Xp-x).*(Xp-x);
Rrad=0.007*0.1/(2*pi)*(k.*k);
Rs=(Uan/343)*rflow;

r=SiZuSo*((Rrad+Rs).*(Rrad+Rs));

H= c+(1./(X+r));
%plot(f,H)
%ylim([-10 20])

hilfs = zeros(size(w));
for I = 1:length(w)
    hilfs(I)= dblquad(@(x, y) integrnd(x, y, w(I)), 0,1000000 , 0, 1000000);
end
plot(w, hilfs .* H)

function f = integrnd(x, y, w)
f = exp(-x-y-w/1e2);


Man muss aber einiges an Zeit mitbringen. Vorschläge:
- gröbere Aufteilung von w (jeder 10. Wert sollte für die Darstellung reichen)
- das Rechteck für die Integration verkleinern.

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.