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

Globales Maximum einer interpolierten 3D-Funktion

 

FPC
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 27.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 12:31     Titel: Globales Maximum einer interpolierten 3D-Funktion
  Antworten mit Zitat      
Wie kann ich das globale Maximum einer 3D-Figur herausfinden? Ich komme da gerade nicht weiter.

Der Befehl

Code:
plot( fitresult, [xData, yData], zData )


gibt die als Anhang gespeicherte Figur.

fitresult liefert als Ergebnis:

Linear model Poly34:
fitresult(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3
+ p21*x^2*y + p12*x*y^2 + p03*y^3 + p31*x^3*y + p22*x^2*y^2
+ p13*x*y^3 + p04*y^4
where x is normalized by mean 2.644 and std 1.669
and where y is normalized by mean 5 and std 3.137
Coefficients (with 95% confidence bounds):
p00 = 7.093 (7, 7.186)
p10 = 0.24 (0.1266, 0.3535)
p01 = 0.1052 (-0.001389, 0.2117)
p20 = -0.2085 (-0.2749, -0.1421)
p11 = 0.007179 (-0.1341, 0.1484)
p02 = -0.1768 (-0.3678, 0.01434)
p30 = 0.005598 (-0.05125, 0.06244)
p21 = -0.058 (-0.1035, -0.01253)
p12 = -0.04414 (-0.0849, -0.003375)
p03 = -0.1091 (-0.1558, -0.06239)
p31 = 0.03735 (-0.0189, 0.09361)
p22 = -0.007977 (-0.05242, 0.03646)
p13 = 0.01228 (-0.03471, 0.05928)
p04 = 0.1059 (0.03821, 0.1737)


x_Data =

3.7500
5.0000
2.5000
3.7500
1.8750
3.1250
2.5000
3.1250
2.5000



yData =

2
2
4
4
5
5
6
7
8


zData =

7.1492
6.9945
7.1970
7.1881
7.0165
7.1788
7.1247
7.1231
7.0797



Nun muss es doch möglich sein aus diesem Plot das globale, absolute Maximum zurückzugeben, welches sich in etwa bei x=3,1 und y=3,9 befinden muss. Vielleicht kann mir ja jemand auf die Sprünge helfen. Danke im Voraus!

untitled.fig
 Beschreibung:

Download
 Dateiname:  untitled.fig
 Dateigröße:  25.66 KB
 Heruntergeladen:  399 mal
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.12.2015, 13:48     Titel:
  Antworten mit Zitat      
was hast du denn versucht? wenn du was aus dem plot haben willst kannst du ja mit dem cursor arbeiten. sonst halt fminsearch. oder analytisch das maximum ausrechnen. du hast ja die gleichung.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
FPC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 27.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 14:58     Titel:
  Antworten mit Zitat      
Hatte es hiermit probiert:

Code:
g=coeffvalues(fitresult)
p00=g(1);
p10=g(2);
p01=g(3);
p20=g(4);
p11=g(5);
p02=g(6);
p30=g(7);
p21=g(8);
p12=g(9);
p03=g(10);
p31=g(11);
p22=g(12);
p13=g(13);
p04=g(14);

syms x y; %Variablen definieren

f(x,y)=p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3  + p21*x^2*y + p12*x*y^2 + p03*y^3 + p31*x^3*y + p22*x^2*y^2 + p13*x*y^3 + p04*y^4;

f(x,y)=vpa(f,4);

display('Minimum')
banana = @(x)p00 + p10*x(1) + p01*x(2) + p20*x(1)^2 + p11*x(1)*(2) + p02*x(2)^2 + p30*x(1)^3 + p21*x(1)^2*x(2) + p12*x(1)*x(2)^2 + p03*x(2)^3+ p31*x(1)^3*x(2) + p22*x(1)^2*x(2)^2 + p13*x(1)*x(2)^3 + p04*x(2)^4;
[x,fval] = fminsearch(banana,[-1.2, 1])

display('Maximum')
banana= @(x)(p00 + p10*x(1) + p01*x(2) + p20*x(1)^2 + p11*x(1)*(2) + p02*x(2)^2 + p30*x(1)^3 + p21*x(1)^2*x(2) + p12*x(1)*x(2)^2 + p03*x(2)^3)+ p31*x(1)^3*x(2) + p22*x(1)^2*x(2)^2 + p13*x(1)*x(2)^3 + p04*x(2)^4*(-1);

[x,fval] = fminsearch(banana,[-1.2, 1])
 



da kommen aber extrem hohe Max- und Min-Stellen heraus:

Minimum

Exiting: Maximum number of function evaluations has been exceeded
- increase MaxFunEvals option.
Current function value: -1357352952669423700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000


x =

1.0e+44 *

-1.2279 0.1905


fval =

-1.3574e+174

Maximum

Exiting: Maximum number of function evaluations has been exceeded
- increase MaxFunEvals option.
Current function value: -1385240451092616100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000


x =

1.0e+44 *

-1.2279 0.1905


fval =

-1.3852e+174


Warum sind diese Werte so hoch? Hat das irgendetwas damit zu tun, dass die Funktion über keine gut definierten Extremstellen verfügt, sondern eher über Sattelpunkte? Hätte gehofft ein genaues Ergebnis für x und y zu bekommen. Mit dem Cursor ist mir das zu ungenau.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 09.12.2015, 15:04     Titel:
  Antworten mit Zitat      
Soweit ich das sehen, hast du einen Fehler in deiner Funktion "banana"
p11*x(1)*(2) soll sicherlich p11*x(1)*p(2) heißen.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
FPC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 27.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 15:08     Titel:
  Antworten mit Zitat      
ohja, danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
FPC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 27.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 16:11     Titel:
  Antworten mit Zitat      
Ich hätte nochmal einen vollkommen anderen Lösungsansatz: Ich könnte mir den Maximalwert ja vielleicht auch durch die Kontur in der Grafik etwas eingrenzen lassen und mir diesen Wert dann anzeigen lassen, um das ganze zu automatisieren. Ist zwar nicht ganz genau, aber könnte eventuell gelingen!?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.12.2015, 16:44     Titel:
  Antworten mit Zitat      
also erstmal musst du die standartabweichung und den mittelwert mit einbezihen.
Zitat:
where x is normalized by mean 2.644 and std 1.669
and where y is normalized by mean 5 and std 3.137

steht da ja nicht ohne grund Smile
und dann würde ich ruig mal fminsearch ausprobieren.
ich komm da auf [3.5980,5.6705] was recht plausibel aussiht.
p.s. es ist immer sinnvoll die beispiel so zu posten das der leser nur copy paste machen muss und nicht alles per hand selber umschreiben muss.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
FPC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 27.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2015, 19:22     Titel:
  Antworten mit Zitat      
Hm, habe ich nicht ganz gecheckt, wie ich das mit einbeziehen soll. Bin leider noch kein Matlabkenner Very Happy Mit den Befehlen hapert es noch. Sorry
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 09.12.2015, 19:45     Titel:
  Antworten mit Zitat      
bei sowas ist dann google recht hilfreich
(x-mean)/std muss dann verwendet werden anstatt einfach nur x
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
FPC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 27.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2015, 14:36     Titel:
  Antworten mit Zitat      
So, nochmal die ganze Programmierung:


Code:

[xData, yData, zData] = prepareSurfaceData( x_gesamt, y_gesamt, Gesamt_Pkte_lin_ges )

ft='poly34';

% Fit model to data.
[fitresult, gof] = fit( [xData, yData], zData, ft, 'Normalize', 'on' );

% Create a figure for the plots.
figure(11);

% Plot fit with data.
subplot( 2, 2, 2 );
h = plot( fitresult, [xData, yData], zData );
legend( h, 'Gesamtpunkte linear gewichtet', 'z vs. x, y', 'Location', 'NorthEast' );
% Label axes
xlabel x
ylabel y
zlabel z
grid on

% Plot residuals.
subplot( 2, 2, 4 );
h = plot( fitresult, [xData, yData], zData, 'Style', 'Residual' );
legend( h, 'Gesamtpunkte linear gewichtet - residuals', 'Location', 'NorthEast' );
% Label axes
xlabel x
ylabel y
zlabel z
grid on

% Make contour plot.
subplot( 1, 2, 1 );
h = plot( fitresult, [xData, yData], zData, 'Style', 'Contour' );

legend( h, 'Gesamtpunkte linear gewichtet', 'z vs. x, y', 'Location', 'NorthEast' );
% Label axes
xlabel x
ylabel y
grid on



g=coeffvalues(fitresult)
p00=g(1);
p10=g(2);
p01=g(3);
p20=g(4);
p11=g(5);
p02=g(6);
p30=g(7);
p21=g(8);
p12=g(9);
p03=g(10);
p31=g(11);
p22=g(12);
p13=g(13);
p04=g(14);

syms x y; %Variablen definieren


f(x,y)=p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p30*x^3  + p21*x^2*y + p12*x*y^2 + p03*y^3 + p31*x^3*y + p22*x^2*y^2 + p13*x*y^3 + p04*y^4;

f(x,y)=vpa(f,4);


display('Minimum')
banana = @(x)p00 + p10*x(1) + p01*x(2) + p20*x(1)^2 + p11*x(1)*x(2) + p02*x(2)^2 + p30*x(1)^3 + p21*x(1)^2*x(2) + p12*x(1)*x(2)^2 + p03*x(2)^3+ p31*x(1)^3*x(2) + p22*x(1)^2*x(2)^2 + p13*x(1)*x(2)^3 + p04*x(2)^4;
[x,fval] = fminsearch(banana,[-1.2, 1])


display('Maximum')
banana= @(x)(p00 + p10*x(1) + p01*x(2) + p20*x(1)^2 + p11*x(1)*x(2) + p02*x(2)^2 + p30*x(1)^3 + p21*x(1)^2*x(2) + p12*x(1)*x(2)^2 + p03*x(2)^3)+ p31*x(1)^3*x(2) + p22*x(1)^2*x(2)^2 + p13*x(1)*x(2)^3 + p04*x(2)^4*(-1);

[x,fval] = fminsearch(banana,[-1.2, 1])

 

Die Anregung mit der banafunktion habe ich aus dem Internet. x(1) ist ja x und x(2) steht hier als y. Anschließend werden mir die globalen Extremstellen berechnet, soweit ist klar.
Jetzt weiß ich nicht wie ich die Formel 'x-mean(x)/std(x)' bzw. y-mean(y)/std(y) einbauen soll. Soll das Ergebnis von x(1) und x(2) dann normiert werden. Ich wüsste gerne den logischen Hintergrund. Sonst kann mir vielleicht jemand einen Internetverweis geben oder einen Literaturverweis? Ich komme mit der Funktion fminsearch nicht weiter, da kommen immer noch hohe Werte heraus (1,27*10^44). Das Internetbeispiel bringt mich auch nicht weiter.

untitled.fig
 Beschreibung:

Download
 Dateiname:  untitled.fig
 Dateigröße:  106.34 KB
 Heruntergeladen:  355 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
FPC
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 27.01.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2015, 15:17     Titel:
  Antworten mit Zitat      
Dass ich die Vektoren x und y mit dem mittelwert und der std normalisieren kann weiß ich. Fminsearch ist doch auch nur für lokale Extremwerte oder auch für globale?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 10.12.2015, 15:30     Titel:
  Antworten mit Zitat      
nur das analytische verfahren kann globale maxima finden . bei allen nummerischen werden ja werte ausgerechnet. und da man nicht alle ausrechnen kann weil es unendlich viele giebt sind es immer nur lokale maxima.du hast aber selber gesagt
Zitat:
welches sich in etwa bei x=3,1 und y=3,9 befinden muss.

damit ist doch fminsearch für dein vorhaben ausreichend.
_________________

richtig Fragen
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.