Hallo,
ich habe das Problem, dass ich zwei Funktionen habe deren Schnittpunkt ich berechnen möchte, aber nicht weiß wie. Das besondere an diesen Funktionen ist, dass diese zusammengesetzt sind (aus einer Geradengleichung und einer Kreisgleichung)
Hier beide Funktionen, die ich in einem m.file gespeichert habe:
Code:
function[z_0] = z_0_function(x, delta0, re, f, ap, x_m, x_p0)
Alle Eingangsvariablen bis auf x sind parametrisiert und konstant. x ist meine Laufkoordinate. Ich Suche wie gesagt das x, an dem sich beide Funktionen schneiden. Befehle wie "fzero" oder "solve" habe ich bereits probiert funktionieren aber nicht (oder ich habe sie falsch angewand). Weiß einer Rat?! Danke im Voraus!
Hallo Harald,
danke für die schnelle Antwort! Ja ich möchte x gerne als skalaren Wert haben. Wenn ich deinen Code verwende bekomme ich folgenden Fehler:
Code:
>> % Definition sämtlicher Parameter
f = @(x) z_0_function(x, delta0, re, f, ap, x_m, x_p0) - z_1_function(x, delta1, re, ap, x_m, x_p1)
xbest = fzero(f, 0)
f = @(x)z_0_function(x,delta0,re,f,ap,x_m,x_p0) - z_1_function(x,delta1,re,ap,x_m,x_p1)
Error using fzero(line289) FZERO cannot continue because user supplied function_handle ==>
@(x)z_0_function(x,delta0,re,f,ap,x_m,x_p0)-z_1_function(x,delta1,re,ap,x_m,x_p1)
failed with the error below.
Hallo Harald,
tatsächlich war der Ordner nicht aktiv. Dummer Fehler meinerseits, sorry.
Dennoch erhalte ich weiter eine Fehlermedlung:
Code:
>> f = @(x) z_0_function(x, delta0, re, f, ap, x_m, x_p0) - z_1_function(x, delta1, re, ap, x_m, x_p1)
xbest = fzero(f, 0)
f = @(x)z_0_function(x,delta0,re,f,ap,x_m,x_p0)-z_1_function(x,delta1,re,ap,x_m,x_p1)
Error using fzero(line289) FZERO cannot continue because user supplied function_handle ==>
@(x)z_0_function(x,delta0,re,f,ap,x_m,x_p0)-z_1_function(x,delta1,re,ap,x_m,x_p1)
failed with the error below.
stelle bitte mal die anderen Parameter (delta0, re etc.) zur Verfügung.
Hast du mal getestet, ob sich die Funktionen z_0_function und z_1_function für sich genommen fehlerfrei ausführen lassen? Der Fehlermeldung zufolge scheint das nämlich nicht der Fall zu sein.
Grüße,
Harald
FlowD
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.03.2014, 14:49
Titel:
also einen Fehler habe ich gefunden:
das function handle bezeichnest du als "f". "f" ist aber schon vergeben und ist ein Eingangsparameter. Dennoch gibt es wieder ein Fehler. Im Folgenden mal alle Parameter und Formeln im Detail (Ich habe für die Parameter direkt skalare Werte eingesetzt soweit möglich):
Code:
%Eingangsparameter
re = 0.4;
eps = 55*pi()/180;
ap = 1;
f = 0.1;
lamda1 = 10*pi()/180;
lamda2 = 10*pi()/180;
z_m=f;
x_m=ap-re;
delta0=eps/2+lamda1;
delta1=eps/2+lamda2;
delta2=-eps/2+lamda2;
x_p0=0.843504571603488;
x_p1=0.843504571603488;
x_p2=0.720282319801709;
deine Funktion gibt für x > ap keine Werte, sondern [] zurück.
Was hast du denn da geplottet? Die Funktionen können es nicht sein, weil diese für x > ap ja von dir nicht definiert werden.
Grüße,
Harald
FlowD
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 10.04.2014, 16:56
Titel:
x ist nur veränderlich zwischen 0 und ap. Den Fall das x>ap ist gibt es nicht (mit den Funktionen simuliere ich die 2-dimensionale geometrische Durchdringung einer Werkzeugschneide durch einen Körper). Innerhalb dieses Bereiches schneiden sich die Funktionen aber. Und den Schnittpunkt brauche ich.
Du könntest es z.B. alternativ mit fminbnd versuchen, und abs(f1-f2) auf dem zulässigen Intervall minimieren.
Alternativ die Funktionen so definieren, dass sie außerhalb des Intervalls auch etwas zurückgeben, z.B. einen sehr hohen oder sehr niedrigen Wert.
Grüße,
Harald
Einstellungen und Berechtigungen
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
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.