Verfasst am: 27.05.2014, 10:56
Titel: Lösen einer Kosinuskurve
Hallo,
ich würde gerne folgendes vereinfachen:
Gegeben sind 3 Punkte, die auf dem Graphen liegen sollen.
Eine Annäherung an die tatsächliche Funktion soll durch eine Kosinuskurve erfolgen: y=a* cos(bx+c) +d
Die Variablen a,b,c und d sind nun zu lösen.
Kann das Matlab automatisiert erledigen? Wenn ja, wie?
da wird es keine 100%ig "richtige" Lösung für geben. Das hat zwei Gründe, zum einen hast du 3 Gleichungen und 4 Variablen, zum anderen gibt es bei Kosinus den Alias-Effekt. Daher wird es keine eindeutige Lösung geben. Probieren kann man's trotzdem mit nlinfit:
Code:
model = @(b,x)(b(1)*cos(b(2)*x+b(3))+b(4));
x = [1,2,3]; y = rand(1,3); xi = linspace(0,4,100);
b1 = nlinfit(x,y,model, zeros(1,4));
b2 = nlinfit(x,y,model,[0,2,0,0]);
b3 = nlinfit(x,y,model,[0,5,0,0]);
figure plot(x,y,'bo','markerfacecolor','blue'),hold on
plot(xi,model(b1,xi),'r-') plot(xi,model(b2,xi),'g-') plot(xi,model(b3,xi),'k-')
Dank des Alias Effekts (sichtbar durch verschiedene Startfrequenzen bei der Optimierung) siehst du, dass es beliebig viele Kosinusfunktionen gibt, die durch die gegebenen Werte laufen....
Wenn deine 3 gegebenen Punkte "besondere" Punkte wären, beispielsweise Maximum, nächstes Minium und Nulldurchgang, könnte man wohl noch was analytisch machen.
da wird es keine 100%ig "richtige" Lösung für geben. Das hat zwei Gründe, zum einen hast du 3 Gleichungen und 4 Variablen, zum anderen gibt es bei Kosinus den Alias-Effekt. Daher wird es keine eindeutige Lösung geben. Probieren kann man's trotzdem mit nlinfit:
Code:
model = @(b,x)(b(1)*cos(b(2)*x+b(3))+b(4));
x = [1,2,3]; y = rand(1,3); xi = linspace(0,4,100);
b1 = nlinfit(x,y,model, zeros(1,4));
b2 = nlinfit(x,y,model,[0,2,0,0]);
b3 = nlinfit(x,y,model,[0,5,0,0]);
figure plot(x,y,'bo','markerfacecolor','blue'),hold on
plot(xi,model(b1,xi),'r-') plot(xi,model(b2,xi),'g-') plot(xi,model(b3,xi),'k-')
Dank des Alias Effekts (sichtbar durch verschiedene Startfrequenzen bei der Optimierung) siehst du, dass es beliebig viele Kosinusfunktionen gibt, die durch die gegebenen Werte laufen....
Wenn deine 3 gegebenen Punkte "besondere" Punkte wären, beispielsweise Maximum, nächstes Minium und Nulldurchgang, könnte man wohl noch was analytisch machen.
Viele Grüße,
Nras.
Hallo,
vielen Dank erstmal.
Dieser Kurvenabschnitt, gegeben durch die drei Punkte, ist alles, was geplottet werden soll. Dadurch wird den Rand eines Fasses simuliert.
In der vorläufigen Version sind folgende Werte gegeben:
P=(-h,r2);
Q=(0,r1);
R=(h,r2);
Im Moment darf gefordert werden: r1 > r2. Aber r2>r1 soll später zulässig sein. Man darf wohl Q als Hochpunkt annehmen. (Im ersten Fall..ansonsten ist es vermutlich ein Tiefpunkt)
Also gibt es hier analytische Möglichkeiten.
Das Problem, dass dieses Gleichungssystem unterbestimmt ist, war mir auch bereits aufgefallen.
Also ist von -h bis h genau eine halbe Periode? Das heißt 4h ist die gesamte Periode?
Habe gerade leider keine Zeit, aber aus den Angaben müsstest du alles kriegen können:
Dein a kriegst du aus abs(r2-r1)
Dein b kriegst du aus obigem.
c = 0 (da bei -h und h derselbe Wert auftritt)
d = r1
Also ist von -h bis h genau eine halbe Periode? Das heißt 4h ist die gesamte Periode?
h ist die halbe Fasshöhe. (Das Fass lässt sich auf der Seite liegend vorstellen)
[quote="Nras"]Habe gerade leider keine Zeit, aber aus den Angaben müsstest du alles kriegen können:
Nras hat Folgendes geschrieben:
Dein a kriegst du aus abs(r2-r1)
Dein b kriegst du aus obigem.
c = 0 (da bei -h und h derselbe Wert auftritt)
d = r1
Als Denkanstoß.
Viele Grüße,
Nras.
Ah super, danke. Ich muss jetzt nur noch heraus finden, wie du auf diese Werte gekommen bist. Habe den Cosinus bislang nur analytisch, nie praktisch betrachtet.
was ist, wenn man den Kosinus annähern möchte, aber das Intervall nicht kennt?
Das heißt x geht nicht wie in dem Beispiel von -2 bis 2, sondern die Grenzen für x sollen in der Optimierung auch berücksichtig werden.
Vielen Dank für eure Hilfe!
Grüße
Peter
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.