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

Funktion mit 3 Variablen optimieren

 

datmoe

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2012, 19:47     Titel: Funktion mit 3 Variablen optimieren
  Antworten mit Zitat      
Hallo zusammen, ich stehe bei meiner Bachelorthesis vor folgendem Problem:
Ich habe eine Gleichung mit eigentlich 4 Variablen, eine davon ist aber der Winkel den ich vorgebe.
Die anderen 3 können frei variiert werden. Ziel ist es nun diese 3 Variablen so zu wählen, dass der geringste positive und negative Wert erreicht wird.

Hoffe ihr könnt mein Problem so schon verstehen und es gibt eine Funktion dafür.

Vielen Dank.


Harald
Forum-Meister

Forum-Meister


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

es gibt sogar zwei komplette Toolboxen dafür: die Optimization Toolbox und die Global Optimization Toolbox. Und wenn du die nicht hast, kannst du fminsearch verwenden.

Für mehr Hilfestellung müsstest du das Problem genauer beschreiben.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2012, 11:21     Titel:
  Antworten mit Zitat      
Code:

//Variablen
clear
a=100
D=80
H=65
Jp=0.004
J0=0
l=120
mk=0.5
mp=0.9
mu=0
mw=0
mz=0
n=5000
p=0
winkel=(0:1:360)
x=0.5
phikpp=0
rzk=0.0325
rzw=0.0325
z=0   //Verschiebung Winkel Ausgleichwelle

//Berechnete Werte

a=a/1000
n=n/60
Ak=%pi/4*(D/1000)^2
phik=winkel*%pi/180
phikp=2*%pi*n
l1=H/1000/2
l2=l/1000
beta_=asin(l1./l2.*sin(phik))
betap=l1./l2.*phikp.*cos(phik)./cos(beta_)
p=p*10^5
xkp=-l1.*phikp.*sin(phik)-l2.*betap.*sin(beta_)
r=H/2000

//Zwischenwerte

B1=(l1.*cos(phik))./(l2.*cos(beta_))
B2=(betap^2).*tan(beta_)-l1./l2.*(phikp^2).*sin(phik)./cos(beta_)
K1=-l1.*sin(phik)-l2.*B1.*sin(beta_)
K2=-l1.*(phikp^2).*cos(phik)-l2*(betap^2).*cos(beta_)-l2.*B2.*sin(beta_)
P1=-l1.*sin(phik)-l2./2.*B1.*sin(beta_)
P2=-l1.*(phikp^2).*cos(phik)-(l2./2).*(betap^2).*cos(beta_)-(l2./2).*B2.*sin(beta_)
Y1=(l1./2).*cos(phik)
Y2=(-l1./2).*(phikp^2).*sin(phik)
D1=Jp./l2.*B1+(mp./2).*(P1.*sin(beta_)+Y1.*cos(beta_))
D2=(Jp./l2).*B2+(mp./2).*(P2.*sin(beta_)+Y2.*cos(beta_))
E1=mk.*K1+mp.*P1+mu.*sign(xkp).*mp.*Y1
E2=mk.*K2+mp.*P2+mu.*sign(xkp).*mp.*Y2+p.*Ak
G1=(E1-mu.*sign(xkp).*D1./cos(beta_))./(1-mu.*sign(xkp).*tan(beta_))
G2=(E2-mu.*sign(xkp).*D2./cos(beta_))./(1-mu.*sign(xkp).*tan(beta_))
H1=G1.*tan(beta_)-D1./cos(beta_)
H2=G2.*tan(beta_)-D2./cos(beta_)
deltaJ=-l1.*G1.*sin(phik)-l1.*H1.*cos(phik)

//Ergebnisse
MK=l1.*G2.*sin(phik)+l1.*H2.*cos(phik)
MC=(J0+deltaJ)*phikpp-MK
Fux1=G1.*phikpp+G2
Fuy1=H1.*phikpp+H2
F=sqrt(Fux1^2+Fuy1^2)


Fos1=-l1.*(phikp^2).*cos(phik).*mk
Fos2=(l2.*(betap^2).*cos(beta_)+l2.*B2.*sin(beta_)).*-mk
Fos=Fos1+Fos2

//Kurbelwelle Zusatzmasse

Fzk=mzk.*rzk.*phikp^2
Fzkx1=cos(phik).*Fzk
Fzky1=sin(phik).*Fzk

//
Fx1=Fux1+Fzkx1
Fy1=Fuy1-Fzky1


//Berechnete Werte 2

Ak=%pi/4*(D/1000)^2
phik=(winkel+480)*%pi/180
phikp=2*%pi*n
l1=H/1000/2
l2=l/1000
beta_=asin(l1./l2.*sin(phik))
betap=l1./l2.*phikp.*cos(phik)./cos(beta_)
p=p*10^5
xkp=-l1.*phikp.*sin(phik)-l2.*betap.*sin(beta_)
r=H/2000

//Zwischenwerte

B1=(l1.*cos(phik))./(l2.*cos(beta_))
B2=(betap^2).*tan(beta_)-l1./l2.*(phikp^2).*sin(phik)./cos(beta_)
K1=-l1.*sin(phik)-l2.*B1.*sin(beta_)
K2=-l1.*(phikp^2).*cos(phik)-l2*(betap^2).*cos(beta_)-l2.*B2.*sin(beta_)
P1=-l1.*sin(phik)-l2./2.*B1.*sin(beta_)
P2=-l1.*(phikp^2).*cos(phik)-(l2./2).*(betap^2).*cos(beta_)-(l2./2).*B2.*sin(beta_)
Y1=(l1./2).*cos(phik)
Y2=(-l1./2).*(phikp^2).*sin(phik)
D1=Jp./l2.*B1+(mp./2).*(P1.*sin(beta_)+Y1.*cos(beta_))
D2=(Jp./l2).*B2+(mp./2).*(P2.*sin(beta_)+Y2.*cos(beta_))
E1=mk.*K1+mp.*P1+mu.*sign(xkp).*mp.*Y1
E2=mk.*K2+mp.*P2+mu.*sign(xkp).*mp.*Y2+p.*Ak
G1=(E1-mu.*sign(xkp).*D1./cos(beta_))./(1-mu.*sign(xkp).*tan(beta_))
G2=(E2-mu.*sign(xkp).*D2./cos(beta_))./(1-mu.*sign(xkp).*tan(beta_))
H1=G1.*tan(beta_)-D1./cos(beta_)
H2=G2.*tan(beta_)-D2./cos(beta_)
deltaJ=-l1.*G1.*sin(phik)-l1.*H1.*cos(phik)

//Kurbelwelle Zusatzmasse

Fzk=mzk.*rzk.*phikp^2
Fzkx2=cos(phik).*Fzk
Fzky2=sin(phik).*Fzk

//Ergebnisse
MK=l1.*G2.*sin(phik)+l1.*H2.*cos(phik)
MC=(J0+deltaJ)*phikpp-MK
Fux2=G1.*phikpp+G2
Fuy2=H1.*phikpp+H2
F=sqrt(Fux2^2+Fuy2^2)

Fos1=-l1.*(phikp^2).*cos(phik).*mk
Fos2=(l2.*(betap^2).*cos(beta_)+l2.*B2.*sin(beta_)).*-mk
Fos=Fos1+Fos2

Fx2=Fux2+Fzkx2
Fy2=Fuy2-Fzky2

//Berechnete Werte 3

Ak=%pi/4*(D/1000)^2
phik=(winkel+240)*%pi/180
phikp=2*%pi*n
l1=H/1000/2
l2=l/1000
beta_=asin(l1./l2.*sin(phik))
betap=l1./l2.*phikp.*cos(phik)./cos(beta_)
p=p*10^5
xkp=-l1.*phikp.*sin(phik)-l2.*betap.*sin(beta_)
r=H/2000

//Zwischenwerte

B1=(l1.*cos(phik))./(l2.*cos(beta_))
B2=(betap^2).*tan(beta_)-l1./l2.*(phikp^2).*sin(phik)./cos(beta_)
K1=-l1.*sin(phik)-l2.*B1.*sin(beta_)
K2=-l1.*(phikp^2).*cos(phik)-l2*(betap^2).*cos(beta_)-l2.*B2.*sin(beta_)
P1=-l1.*sin(phik)-l2./2.*B1.*sin(beta_)
P2=-l1.*(phikp^2).*cos(phik)-(l2./2).*(betap^2).*cos(beta_)-(l2./2).*B2.*sin(beta_)
Y1=(l1./2).*cos(phik)
Y2=(-l1./2).*(phikp^2).*sin(phik)
D1=Jp./l2.*B1+(mp./2).*(P1.*sin(beta_)+Y1.*cos(beta_))
D2=(Jp./l2).*B2+(mp./2).*(P2.*sin(beta_)+Y2.*cos(beta_))
E1=mk.*K1+mp.*P1+mu.*sign(xkp).*mp.*Y1
E2=mk.*K2+mp.*P2+mu.*sign(xkp).*mp.*Y2+p.*Ak
G1=(E1-mu.*sign(xkp).*D1./cos(beta_))./(1-mu.*sign(xkp).*tan(beta_))
G2=(E2-mu.*sign(xkp).*D2./cos(beta_))./(1-mu.*sign(xkp).*tan(beta_))
H1=G1.*tan(beta_)-D1./cos(beta_)
H2=G2.*tan(beta_)-D2./cos(beta_)
deltaJ=-l1.*G1.*sin(phik)-l1.*H1.*cos(phik)

//Kurbelwelle Zusatzmasse

Fzk=mzk.*rzk.*phikp^2
Fzkx3=cos(phik).*Fzk
Fzky3=sin(phik).*Fzk


//Ergebnisse
MK=l1.*G2.*sin(phik)+l1.*H2.*cos(phik)
MC=(J0+deltaJ)*phikpp-MK
Fux3=G1.*phikpp+G2
Fuy3=H1.*phikpp+H2
F=sqrt(Fux3^2+Fuy3^2)


Fos1=-l1.*(phikp^2).*cos(phik).*mk
Fos2=(l2.*(betap^2).*cos(beta_)+l2.*B2.*sin(beta_)).*-mk
Fos=Fos1+Fos2

Fx3=Fux3+Fzkx3
Fy3=Fuy3-Fzky3

index=1
for z=0:1:360
   
    //Ausgleichswellen
   
phik=winkel*%pi/180
z=z*%pi/180
Fzw1=mzw.*rzw.*phikp^2
Fzwx1=cos(phik+z).*Fzw1
Fzwy1=sin(phik+z).*Fzw1

Fzw2=mzw.*rzw.*phikp^2
Fzwx2=cos(phik+%pi+z).*Fzw2
Fzwy2=sin(phik+%pi+z).*Fzw2
Fzwx=Fzwx1+Fzwx2
Fzwy=Fzwy1+Fzwy2
    Mx=(-Fx1+Fzwx1)*a+(-Fx3-Fzwx2)*a
    My=(Fy1-Fzwy1)*a+(-Fy3+Fzwy2)*a

berxmin=min(Mx)
berxmax=max(Mx)
berymin=min(My)
berymax=max(My)
be=sqrt(berymin^2+berymax^2)
    bert(index)=be
    bexy(index)=sqrt(berymin^2+berymax^2)+sqrt(berxmin^2+berxmax^2)
    index=index+1
end


be=sqrt(berxmin^2+berxmax^2)
    bert(index)=be
    index=index+1

zxy=find(min(bexy)==bexy)

    //Ausgleichswellen

z=zxy
z=z*%pi/180
Fzw1=mzw.*rzw.*phikp^2
Fzwx1=cos(phik+z).*Fzw1
Fzwy1=sin(phik+z).*Fzw1

Fzw2=mzw.*rzw.*phikp^2
Fzwx2=cos(phik+%pi+z).*Fzw2
Fzwy2=sin(phik+%pi+z).*Fzw2
Fzwx=Fzwx1+Fzwx2
Fzwy=Fzwy1+Fzwy2

Fx=Fx1+Fx2+Fx3
Fy=Fy1+Fy2+Fy3


Mx=(-Fx1+Fzwx1)*a+(-Fx3-Fzwx2)*a
My=(Fy1-Fzwy1)*a+(-Fy3+Fzwy2)*a


So sieht man Code aktuell aus, was eben noch fehlt ist die Berechnung von mzk,mzw und dem winkel z.
Die Gleichungen Mx und My sollen dabei minimal werden. Ahso, benutze scilab, deshalb wollte ich fminsearch verwenden.

Hilft das euch?

Gruß Mo
 
Harald
Forum-Meister

Forum-Meister


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

ich kann mit dieser Aneinanderreihung an angelegten Variablen leider nicht das geringste anfangen.

Zudem kenne ich Scilab nicht und kann daher dazu keinen Rat geben.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2012, 15:36     Titel:
  Antworten mit Zitat      
So, ich habe das ganze mal etwas "vereinfacht".

Code:

Fx=((((mk.*(-l1.*sin(phik)-l2.*((l1.*cos(phik))./(l2.*cos((asin(l1./l2.*sin(phik)))))).*sin((asin(l1./l2.*sin(phik)))))+mp.*(-l1.*sin(phik)-l2./2.*((l1.*cos(phik))./(l2.*cos((asin(l1./l2.*sin(phik)))))).*sin((asin(l1./l2.*sin(phik)))))+mu.*sign((-l1.*phikp.*sin(phik)-l2.*(l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))).*mp.*((l1./2).*cos(phik)))-mu.*sign((-l1.*phikp.*sin(phik)-l2.*(l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))).*(Jp./l2.*((l1.*cos(phik))./(l2.*cos((asin(l1./l2.*sin(phik))))))+(mp./2).*((-l1.*sin(phik)-l2./2.*((l1.*cos(phik))./(l2.*cos((asin(l1./l2.*sin(phik)))))).*sin((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik))))+((l1./2).*cos(phik)).*cos((asin(l1./l2.*sin(phik))))))./cos((asin(l1./l2.*sin(phik)))))./(1-mu.*sign((-l1.*phikp.*sin(phik)-l2.*(l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))).*tan((asin(l1./l2.*sin(phik)))))).*phikpp+((mk.*(-l1.*(phikp^2).*cos(phik)-l2*((l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik)))))^2).*cos((asin(l1./l2.*sin(phik))))-l2.*(((l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik)))))^2).*tan((asin(l1./l2.*sin(phik))))-l1./l2.*(phikp^2).*sin(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))+mp.*(-l1.*(phikp^2).*cos(phik)-(l2./2).*((l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik)))))^2).*cos((asin(l1./l2.*sin(phik))))-(l2./2).*(((l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik)))))^2).*tan((asin(l1./l2.*sin(phik))))-l1./l2.*(phikp^2).*sin(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))+mu.*sign((-l1.*phikp.*sin(phik)-l2.*(l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))).*mp.*((-l1./2).*(phikp^2).*sin(phik))+p.*Ak)-mu.*sign((-l1.*phikp.*sin(phik)-l2.*(l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))).*((Jp./l2).*(((l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik)))))^2).*tan((asin(l1./l2.*sin(phik))))-l1./l2.*(phikp^2).*sin(phik)./cos((asin(l1./l2.*sin(phik)))))+(mp./2).*((-l1.*(phikp^2).*cos(phik)-(l2./2).*((l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik)))))^2).*cos((asin(l1./l2.*sin(phik))))-(l2./2).*(((l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik)))))^2).*tan((asin(l1./l2.*sin(phik))))-l1./l2.*(phikp^2).*sin(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik))))+((-l1./2).*(phikp^2).*sin(phik)).*cos((asin(l1./l2.*sin(phik))))))./cos((asin(l1./l2.*sin(phik)))))./(1-mu.*sign((-l1.*phikp.*sin(phik)-l2.*(l1./l2.*phikp.*cos(phik)./cos((asin(l1./l2.*sin(phik))))).*sin((asin(l1./l2.*sin(phik)))))).*tan((asin(l1./l2.*sin(phik)))))+(cos(phik)*x(1)*rzk*phikp^2))+1/2*cos(phik.*2)*x(2).*rzw.*phikp^2


Der Winkel phik soll von 0-360° laufen, x(1) und x(2) sind variabel, später kommt noch ein x(3) dazu. Alle anderen Werte sind bekannt.

Wie kann ich jetzt ein globales Minimum finden?
Versuche mich schon seit Tagen daran....

Danke für eure Hilfe!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.02.2012, 17:05     Titel:
  Antworten mit Zitat      
Hallo,

ich gehe davon aus, dass du Fx minimieren willst.

Nun die Frage: wie spielen x(1) bis x(3) rein? Soweit ich das sehen kann, kommen sie in der Formel nicht vor.

Wenn du SciLab statt MATLAB verwenden willst, solltest du vielleicht einen Beitrag in das SciLab-Forum schreiben - ich zumindest kenne mich damit nicht aus.

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.