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

warum kommt beim integrieren plötzlich Komplexe Zahl dazu?

 

Artjom
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2018, 03:47     Titel: warum kommt beim integrieren plötzlich Komplexe Zahl dazu?
  Antworten mit Zitat      
Hey gomatlab Community,
ich hab ein kleines Problem und finde alleine nicht raus woran es liegen mag. Wäre dankbar wenn mir einer von euch helfen könnte.
Mein Ziel ist es in einem kleinen Programm, eine Funktion aufzubauen deren Werte ich dann in Vektoren abspeichere um sie später zu ploten. So sieht meine Code aus:
Code:

x=0.01
r=2.7

syms zd2(z);
zd2(z)=((10*z - 131)*(2*sqrt(540*z-100*z^2) - 65))/100;
s2=int(zd2,z);
z2=0:x:r;
S2=s2(z2)+S1(end);          %S1(end) ist eine beliebige Konstante (z.b. 80)
 

Die zd2 Funktion integriere ich und nenne sie in s2 um, dabei tauchen aber in der integrierten Funktion plötzlich Komplexe Zahlen auf. Könnte mir jemand erklären woran das genau liegt?
Verstehe ich die Funktion int() nicht richtig?
Den mit online Integralrechner kommt eine Stammfunktion raus die Matlab auch so wie gewollt beandelt. Also gibt keine Komplexe Zahlen aus.
So wie Matlab die Funktion integriert kommt plötzlich ~-49i dazu, die am weiter arbeiten hindern.

Davor habe ich folgende Funktion für zd2 gehabt: (alt)
Code:

zd2(z)=((1-sin(acos((-r+z)/r)))*r*2+tw)*(13.1-x);
 


Dazu hätte ich auch eine Frage. Die ''alte'' Funktion konnte Matlab gar nicht mit int() integrieren und hat nur eine Datei rausgegeben wo int() und in den Klammern die Funktion stand. Also nicht integriert sondern als sowas wie Text rausgegeben?
Kann den Fehler grade leider nicht reproduzieren.

Wäre dankbar für eure Hilfe.

Mfg Artjom
Private Nachricht senden Benutzer-Profile anzeigen


cyrez
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 81
Anmeldedatum: 15.09.10
Wohnort: Bayern
Version: 2020b
     Beitrag Verfasst am: 18.03.2018, 21:23     Titel:
  Antworten mit Zitat      
Hallo Artjom,

ich habe eben versucht dein Problem zu rekonstruieren. Die Funktion s2, also das Integral von zd2 wird nicht geschlossen durch den Befehl
Code:

gelöst. Das ist immer dann der Fall, wenn es keine (analytische) Stammfunktion gibt.

Kannst du deine komplexe Lösung posten?

Das Integral einer rellen Funktion muss reell sein. Ich kann mir nur vorstellen, dass MATLAB die Variable z als komplexe Variable interpretiert (z=x+jy) und du deshalb eine komplexwertige Lösung erhälst.


ZUSATZ:

Probiere mal diesen Code hier

Code:

close all
clear all
clc

s=0.01;    %Schrittweite
r=2.7;     %obere Grenze

syms f x   %Symbolische Einführung

f=((10*x - 131)*(2*sqrt(540*x-100*x^2) - 65))/100;

F=int(f,x,0,r); %Stammfunktion von f(x)in den Grenzen 0 bis r
pretty(F)   %Schönere Darstellung im Command Window


Gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
Artjom
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2018, 17:16     Titel:
  Antworten mit Zitat      
Hey cyrez,
danke für die schnelle Antwort. Wieso genau denkst du aber, dass Matlab diese Funktion nicht als analytisch betrachtet? Also habe es eben auch mit anderen Variablen probiert trz kommt beim integrieren eine Komplexe Zahl dazu.

Code:

syms f(x)
f(x)=((10*x - 131)*(2*sqrt(540*x-100*x^2) - 65))/100;
F=int(f,x);
vpa(F(2.7))  % gibt das notwendige Ergebniss mit einem Imaginären Anteil an
 


Die Code von dir gibt die Funktion als Symbolic Variable an. Kann ich den damit dann weiter arbeiten?
Also wenn ich die als symfun
Code:

definiere dann kann ich die mit einem Vektor füllen und die Ergebnisse als Vektor bekommen. Bräuchte halt die ganzen Ergebnisse über die Abzisse von 0 bis r in den Abständen x.
Deswegen wollte ich die Funktion unbestimmt integrieren, damit ich aus der Stammfunktion die Werte dann einzelnd abgreifen kann.

MfG Artjom
Private Nachricht senden Benutzer-Profile anzeigen
 
Artjom
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2018, 18:44     Titel:
  Antworten mit Zitat      
Bin grade durch ausprobieren auf das Problem von gestern gestossen was ich nicht geschafft habe nochmal zu reproduzieren.
Folgende Code habe ich eingegeben:
Code:

syms zd2(z);
zd2(z)=((1-sin(acos((-r+z)/r)))*r*2+tw)*((h/2)-tf-z);   %gleiche Funktion wie davor gepostet zd2(z) nur kompliziert ausgedrückt
s2(z)=real(int(zd2,z));

s2(z) =int(real(((27*(1 - ((10*z)/27 - 1)^2)^(1/2))/5 - 13/2)*(z - 131/10)), z)
 


Wieso wird hier von Matlab gar nicht integriert sondern die Funktion so übernommen wie ich sie eingegeben habe?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

das Problem der komplexen Zahlen konnte ich in der aktuellen Version nicht reproduzieren. Der Grund dürfte aber sein, dass exp, sin und cos über die Eulersche Formel zueinander in Beziehung stehen.
https://de.wikipedia.org/wiki/Eulersche_Formel

Wenn dich nur die numerischen Werte interessieren, sollte das helfen:
Code:


Zur Frage, warum scheinbar nicht integriert wird: sobald Ausdrücke etwas komplexer werden, existiert oft keine analytische Stammfunktion. Dann kann MATLAB natürlich auch keine finden.
In diesen Fällen hilft nur numerisches Integrieren, z.B. über integral .

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 16.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2018, 15:24     Titel:
  Antworten mit Zitat      
Hey Harald,
danke für deine Antwort. Habe gestern festgestellt dass die Stammfunktion von der genanten Funktion zd2(z) nur in einem kleinen Bereich verläuft. Wenns den Bereich überschreitet dann bekommt man Komplexe Zahlen als Ergebniss.

Aber zu dem Command integral(). Mit numerischem Integral bekomme ich ja nur ein Ergebniss, bräuchte aber von der Stammfunktion mehrere Ergebnisse von 0 bis r in den Abständen x. Gibt es da irgendeine möglichkeit?
Mir würde jetzt einfallen mit integral die einzelnen Ergebnisse durch eine while schleife zu bekommen und in einem Vektor abzuspeichern. Ist aber ein ziemlicher Umweg oder?

Hmm wollte grade ne Code mit while schleife machen um die Werte von der Stammfunktion in einem Vektor abzuspeichern aber irgendwie klappt das nicht.

MfG Artjom
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

mir fällt auf Anhieb auch nichts besseres als eine Schleife ein.

Mit dem vorherigen Vorschlag über double wäre das Problem aber doch ohnehin gelöst?

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.