Die beide bestehende Antworten erklären, warum man nicht einen exakten Schnitt so leicht finden. Aber was Sie wirklich brauchen, ist eine Antwort auf was zu tun ist stattdessen, um präzise Schnittpunkte zu erhalten?
In Ihrem speziellen Fall kennen Sie die analytischen Funktionen, die Sie herausfinden möchten, die Schnittmenge von.Sie können fzero
mit einer (ggf. anonym) Funktion verwenden, um die Null der Funktion durch die Differenz Ihrer beide ursprünglichen Funktionen definiert zu finden:
y1fun = @(x) sin(x)+cos(1+x.^2)-1;
y2fun = @(x) ((1/2).*x)-1;
diff_fun = @(x) y1fun(x)-y2fun(x);
x0 = 1; % starting point for fzero's zero search
x_cross = fzero(diff_fun,x0);
, das Ihnen gibt eine Null der Differenzfunktion wird nun dh ein Schnittpunkt Ihrer Funktionen. Es stellt sich heraus, dass das Auffinden von alle Null einer Funktion ist eine schwierige Aufgabe. Generell müssen Sie fzero
mehrfach mit verschiedenen Startpunkten x0
aufrufen. Wenn Sie vermuten, wie Ihre Funktionen aussehen, ist das überhaupt nicht hoffnungslos.
Was passiert also, wenn Ihre Funktionen unordentlicher sind? Im allgemeinen Fall können Sie eine Interpolations-Funktion verwenden, um den Teil des y1fun
und y2fun
im Beispiel oben zum Beispiel interp1
durch Verwendung zu spielen:
% generate data
xdata = 0:0.001:5;
y1data = sin(xdata)+cos(1+xdata.^2)-1;
y2data = ((1/2).*xdata)-1;
y1fun = @(x) interp1(xdata,y1data,x);
y2fun = @(x) interp1(xdata,y2data,x);
x0 = 1; % starting point for fzero's zero search
x_cross = fzero(@(x)y1fun(x)-y2fun(x),x0);
, die zum ursprünglichen Problem zurückführt. Beachten Sie, dass interp1
standardmäßig eine lineare Interpolation verwendet. Je nachdem, wie Ihre Funktion aussieht und wie Ihre Daten streuen, können Sie andere Optionen auswählen. Beachten Sie auch die Option zur Extrapolation (zu vermeiden).
Also in beiden Fällen erhalten Sie eine Kreuzung für jeden Anruf an fzero
. Wenn Sie die Startpunkte sorgfältig auswählen, sollten Sie alle Nullen so genau wie möglich finden können.
Oh, vergaß hinzuzufügen, dass diese beiden Funktionen drei Schnittpunkte im ausgewählten Intervall haben. –
Ich habe eine Antwort hinzugefügt, um zu zeigen, wie ein numerisches Problem wie dieses behandelt werden sollte. –