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

Nullstellen bestimmten

 

remix92
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2018, 17:51     Titel: Nullstellen bestimmten
  Antworten mit Zitat      
Hallo,

Ich habe Eine Funktion, von deren Ableitung ich alle NST bestimmen möchte.
Die Funktion sieht folgendermaßen aus:

f(x) = a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2) +......

Die Ableitung und Nullstellen berechne ich folgendermaßen:

Code:


Ableitung1= diff(f);

  NST = solve( Ableitung1,'x')
  NST_neu = double(NST)

 


Mir wird leider nur die zweite NST berechnet..
Hab leider im Internet, auch keine Lösung gefunden...

Vllt könnt ihr mir ja helfen Smile
Wäre für jeden Tipp dankbar Smile


Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

wie sind a1, b1, c1, a2, b2, c2 definiert?
Wie wird f definiert?
Wofür steht das ......?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2018, 14:15     Titel:
  Antworten mit Zitat      
Hallo,
die Parameter werden als double Variable definiert und die funktion f definiere ich als eine symbolische Funktion

Code:

       a1 =       61.63  
       b1 =       33.68  
       c1 =       11.68  
       .....
syms  x
f(x) =   a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2) +  a3*exp(-((x-b3)/c3)^2) +..... +

  Ableitung1= diff(f);
  NST = solve( Ableitung1,'x')
  NST_neu = double(NST)

 


So sieht der vereinfachte Code aus Smile

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

Forum-Meister


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

Zitat:
So sieht der vereinfachte Code aus

Das habe ich vermutet. Ich würde aber gerne das Problem genauso reproduzieren, und dazu wäre der genaue Code - also auch die Werte der anderen Parameter - hilfreich.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 11.07.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2018, 16:29     Titel:
  Antworten mit Zitat      
Hallo,

der komplette Code sieht so aus:

Code:

       a1 =       61.63  
       b1 =       33.68  
       c1 =       11.68  
       a2 =       64.64  
       b2 =       48.25
       c2 =       16.94  
       a3 =       76.98  
       b3 =       123.4  
       c3 =       24.29  
       a4 =       70.26  
       b4 =       156.5  
       c4 =       22.72
       a5 =       62.68  
       b5 =         183  
       c5 =       18.23  
     
syms x
 f (x)=     a1*exp(-((x-b1)/c1)^2) + a2*exp(-((x-b2)/c2)^2) +  a3*exp(-((x-b3)/c3)^2) + a4*exp(-((x-b4)/c4)^2) + a5*exp(-((x-b5)/c5)^2)



     
Ableitung1= diff(f);


  NST = solve( Ableitung1,'x')
  NST_neu = double(NST)

 


Bei dieser Funktion, wird mir bei "x= 79.7210" eine Nullstelle angegeben.
das wäre die zweite nullstelle.
Aber bei ca x=37.8, müsste die erste Nullstelle sein, die nicht angezeigt wird....

Wie bekomme ich es hin, dass mir alle Nullstellen angezeigt werden?

Und falls du das als plot haben willst:
Code:


 hold on
 grid on
 fplot(@(x) f(x), [0 150])
 fplot(@(x) Ableitung1(x), [0 150])
line(xlim,[0,0],'Color','k');

 


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

Forum-Meister


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

wenn ich das in R2018a laufen lasse, bekomme ich erst mal einen Fehler wegen nicht unterstützter Syntax von solve. Mit
NST = solve( Ableitung1)

bekomme ich die Warnung
Zitat:
Warning: Unable to solve symbolically. Returning a numeric solution using vpasolve.

Damit ist klar, dass nur eine Nullstelle gefunden werden kann.

Die Alternative wäre, dass du direkt eine numerische Suche von verschiedenen Startpunkten ausgehend machst. Statt Nullstellen einer Ableitung zu suchen, kannst du das natürlich auch gleich als Optimierungsproblem angehen, z.B. mit fminunc oder fmincon.

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 - 2025 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.