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

Kombination geschachtelter anonymer Funktionen

 

mstp91
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2020, 18:06     Titel: Kombination geschachtelter anonymer Funktionen
  Antworten mit Zitat      
Hallo zusammen,

wie lassen sich am schönsten anonyme Funktionen aufsplitten, sodass ich nur eine kurze "Hauptformel" am Ende habe?
Mit meinem Ansatz klappt es noch nicht ganz.

Code:

N = 202;
n = 0:N;
t = linspace(0.001,0.800,201);
x0 = [0.35,0.5];

glied0 =  @(x) (sqrt(2*x(2)) * (1-x(2)/12+11*x(2)^2/1440));
glied1 =  @(x) (n(2:end)*pi + 2*x(2)./(n(2:end)*pi) -x(2)^2./(n(2:end)*pi).^3 ...
                 + (16./(n(2:end)*pi).^5 - 2./(3*(n(2:end)*pi).^3))*x(2)^3 ...
                 - (80./(n(2:end)*pi).^7 - 16./(3*(n(2:end)*pi).^5))*x(2)^4);
             
glieder_ges = @(x) (glied0(x) + glied1(x));                                      
matrix = @(x) (2*(-1).^n .* glieder_ges(x).^2 ./ (glieder_ges(x).^2 + 2*x(2) + x(2)^2))

fun  = @(x) ( exp( -t'/x(1)*(glieder_ges(x)).^2 ) * matrix(x))'

plot(t,fun(x0))
 


Liebe Grüße
mstp91

Zuletzt bearbeitet von mstp91 am 25.03.2020, 18:40, insgesamt einmal bearbeitet
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: 25.03.2020, 18:18     Titel:
  Antworten mit Zitat      
Hallo,

was genau klappt nicht?

MATLAB zeigt an (roter Balken, rot unterringelt), dass in glied1 etwas fehlt, zwischen dem - und dem *

Statt anonyme Function Handles zu schachteln würde ich die Funktion in eine Datei packen und gut. Anonyme Function Handles würde ich in erster Linie für Einzeiler verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mstp91
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2020, 18:37     Titel:
  Antworten mit Zitat      
Hi Harald,

war nur ein Formatierungsfehler, bedingt durchs rüberkopieren. Hab die überflüssigen Leerzeichen rausgelöscht.

U.a. scheint meine Matrixdimension nicht mehr zu passen.
Womöglich weil ich "glied0 u. glied1" in der Formel addiere und nicht einfach als "glied = [glied0, glied1]" wie in einer gewöhnlichen Funktion hineinschreibe(n) (kann).

Ich dachte an anonyme Funktionen, da ich - sobald ich Startwerte plotten kann - einen Fit dranhänge.

Du meinst also eine m.file erstellen, die ich dann in einem Skript aufrufen und weiterverarbeiten kann?

Gruß
mstp91
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: 25.03.2020, 18:51     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
U.a. scheint meine Matrixdimension nicht mehr zu passen.

Dann hilft der Debugger. Das ist bei geschachtelten anonymen Handles schwierig, bei "normalen" Funktionen einfach.

Zitat:
Ich dachte an anonyme Funktionen, da ich - sobald ich Startwerte plotten kann - einen Fit dranhänge.

Ich verstehe die Logik nicht. Du kannst mit diesen anonymen Funktionen nicht mehr machen als mit einer "normalen" Funktion auch. Bestenfalls kann man mal ein anonymes Handle auf eine normale Funktion brauchen, um die Schnittstelle zu ändern:
fun = @(x) myfun(x, weitere Argumente)

Zitat:
Du meinst also eine m.file erstellen, die ich dann in einem Skript aufrufen und weiterverarbeiten kann?

Ja.
Code:
function y = myfun(x, weitere Argumente)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mstp91
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2020, 12:12     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe jetzt eine m.file erstellt und kann aus meinem Hauptskript darauf zugreifen.
Ebenfalls habe ich die Fitsyntax aus der Dokumentation übernommen und plotte jetzt meine Startwerte problemlos.

Der Solver iteriert aber nicht. Stattdessen findet er gemäß der Nachricht ein lokales Minimum:
Code:
         message: 'Initial point is a local minimum.↵↵Optimization completed because the size of the gradient at the initial point ↵is less than the selected value of the optimality tolerance.↵↵Stopping criteria details:↵↵Optimization completed: The final point is the initial point.↵The first-order optimality measure, 0.000000e+00, is less than↵options.OptimalityTolerance = 1.000000e-16.↵↵Optimization Metric                                       Options↵relative first-order optimality =   0.00e+00  OptimalityTolerance =   1e-16 (selected)'
 


Ich habe schon versucht meine Startwerte geringfügig und auch markant zu verändern, wie es in der Doku empfohlen wird.
Dieses Problem ist mein Hauptproblem, weshalb die Fits nicht klappen.

Gruß
mstp91
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: 26.03.2020, 12:15     Titel:
  Antworten mit Zitat      
Hallo,

da ich keine Ahnung habe, was du gerade genau versuchst, kann ich dir auch nicht helfen.
Bitte entweder in einem Thread bleiben oder das dem richtigen Thread zuordnen. Dieser hatte ja bisher nichts mit Optimierung zu tun.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mstp91
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2020, 12:21     Titel:
  Antworten mit Zitat      
Hallo,

das blieb wohl in der Hitze des Gefechts von mir unerwähnt, entschuldigung dafür!
Ich ordne es dem richtigen Thread zu.

Gruß
mspt91
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: 26.03.2020, 12:22     Titel:
  Antworten mit Zitat      
Hallo,

das gute ist ja: du scheinst das Problem gelöst zu haben?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
mstp91
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2020, 12:33     Titel:
  Antworten mit Zitat      
Hi,

ja das stimmt Smile
Es gibt den separierten Ausdrücken und der Hauptfunktion keine Probleme mehr.

Danke nochmal!

Gruß
mstp91
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.