Heim > Artikel > Backend-Entwicklung > Python implementiert verschiedene Optimierungsalgorithmen
def asdf(x): rres=8*x**3-2*x**2-7*x+3 return rres i=2 left=0 right=1 while i>0 : i = i-1 ans = 0.1 mid1 = (left + right + ans) / 2 mid2 = (left + right - ans) / 2 a=asdf(mid1) c=asdf(mid2) if a > c : right = mid1 else : left = mid2 b=(left+right) / 2 print("左极限=%s,右极限=%s,极小值x=%s"%(left,right,b))
左极限=0.45,右极限=0.775,极小值x=0.6125
Reappointment:Dies ist der erste Code, den ich implementiert habe. Nach dem Erlernen des Algorithmus ist im Grunde das logische Gerüst vorhanden und das Einzige, was geklärt werden muss, ist die entsprechende Python-Sprache. Also fing ich an, nach „wie man eine Funktion definiert“ (siehe Mofans Youku für Details), dem Format von „Schleifenkörper“ und „if-Bedingungsanweisung“ (https://blog.csdn.net/qq_39407518/article/details/) zu suchen. 79822498) „Mathematische Symbole“ (Einzelheiten finden Sie in Mofans Youku) und die Verwendung von print
1.def ist die Mittelfingerdefinition von Python. Sie wird im Allgemeinen zum Definieren von Funktionen verwendet, wenn zum Aufbau eines Netzwerks erforderlich ist. Es kann zur Definition des Netzwerks verwendet werden. Beachtenswert ist, dassreturn in einer neuen Zeile nach der Funktion hinzugefügt werden muss. Ich weiß nicht warum, aber wenn es keine Addition gibt, ist die Funktionsformel wie eine Vase, genau wie ein Ergebnis, das nicht ausgegeben werden kann.
2. Das Verwirrendste ist die Logik. Die Logik war zunächst nicht klar, oder es gab eine Auslassung im Code, was dazu führte, dass ich links und rechts in den Schleifenkörper einfügte. Das Ergebnis ist vorhersehbar. Aufgrund dieses Fehlers wusste ich jedoch, wie man Debug in Pycharm verwendet. Es war ganz einfach und Baidu hat es sofort erfunden.
Frage: 1 . Warum müssen wir return hinzufügen?
return bedeutet, einen beliebigen Variablenwert in dieser Definition als Ergebnis auszugeben. Im Allgemeinen wird der relationale Ausdruck der Ausgabefunktion so benannt, dass beim Aufruf dieser Funktion der der Variablen entsprechende Funktionswert angezeigt werden kann. Andernfalls wird er nur ohne Ergebnisse ausgeführt und hat keine Auswirkungen.
Oder anstatt float vor mid1 einzufügen, setze einfach einen Punkt nach der Eingabemenge. Ich möchte mich wirklich über das Drucken beschweren, und manchmal kann ich es nicht Setzen Sie es zusammen! ! ! ! Fibonacci-Methodeimport numpy as np def qwer(x): third = np.exp(x) - 5*x return third left = 1 right = 2 mid1 =float(left+right) / 2 mid2 = (left+mid1) / 2 mid3 = (mid1+right) /2 a = qwer(mid1) b = qwer(mid2) c = qwer(mid3) i = 5 while i > 0: i=i-1 if a > b: if c > b : #b right = mid1 mid1 = mid2 a=b mid2 = (left + mid1) / 2 mid3 = (mid1 + right) / 2 b = qwer(mid2) c = qwer(mid3) else:#b>c #c left = mid1 mid1 = mid3 a = c mid2 = (left + mid1) / 2 mid3 = (mid1 + right) / 2 b = qwer(mid2) c = qwer(mid3) else:#b>a if a > c: #C left = mid1 mid1 = mid3 a = c mid2 = (left + mid1) / 2 mid3 = (mid1 + right) / 2 b = qwer(mid2) c = qwer(mid3) else:#b>a&c>a # a left = mid2 right = mid3 mid2 = (left + mid1) / 2 mid3 = (mid1 + right) / 2 b = qwer(mid2) c = qwer(mid3) print("最小值=%s"%mid1) print("函数值=%s"%a)最小值=1.609375 函数值=-3.047189552275773Über Datenvariablen in Python. Die Ergebnisse des ersten Durchlaufs waren offensichtlich falsch, daher habe ich das Debuggen verwendet. Es stellte sich heraus, dass mid1 immer 1 statt 1,5 war, also begannen wir, die Datenvariablen zu verstehen. Zuerst vermutete ich, dass alle Variablen in Python standardmäßig vom Typ Integer sind, aber aufgrund der Ergebnisse der Dichotomie wurde mir klar, dass diese Vermutung falsch war, sodass keine Notwendigkeit bestand, das Variablenformat der gesamten Datei zu ändern. Also habe ich vor der Formel „mid1“ einen Gleitkommawert eingefügt und das Ergebnis wurde als 1,5 angezeigt. Aber wenn ich die gesamte Formel mit () umgebe und float voranstelle, ist das Ergebnis immer noch 1. Ich verstehe nicht ganz warum. Ich weiß jedoch, dass das Datenformat von Python auf der Grundlage der Eingabemenge bestimmt wird. Das heißt, wenn Ihre Eingabemenge eine Ganzzahl ist, muss die direkt damit verbundene Berechnungsausgabe ein Ganzzahltyp sein, und es ist eine Ganzzahl Typ, der keinen Carry verwendet. Bevor ich die beiden Methoden +float/+.0 verwendet habe, waren mid1~3 alle ganze Zahlen.
left = 1.0 right = 2.0 mid1 =(left+right) / 2
def fibonacci(n): i=0 a = 0 b = 1 for i in range(n): i=i+1 c = a+b a = b b = c return c def bn(x): ert = x**2 - 6*x + 2 return ert z = 2 p = 0 left = 0.00000 right = 10.00000 L1 = right - left while z < 100: m = fibonacci(z) l = L1/m k = 1.000/m if k < 0.03: print("n=%s,Fn=%s"%(z,m)) L2 = l*fibonacci(z-1) t = left + L2 r = right -L2 while p < 3: p = p + 1 l3 = t - r e= bn(t) o = bn(r) if e>o : right = t t = r r = left + l3 else:#o>e left = r r = t t = right - l3 break else: z = z + 1 okk=(left+right)/2 okky=bn(okk) print(left) print(right) print("极小值x=",okk) print("极小值y=",okky)Fragen Sie mich nicht, was ich beherrsche, sondern fragen Sie mich, wie sehr ich die Präzisionsdarstellung von Python liebe, nachdem ich diesen Code geschrieben habe :-) Ich habe beschlossen, dass ich die beibehalten werde, wenn ich in Zukunft mathematische Formeln codiere Eingabemenge klein Nach dem mathematischen Punkt füge ich eine Menge 0
Fibonacci-Funktionsdefinition hinzu. Jedes Mal nach dem Debuggen zittern meine Hände O(∩_∩)O~
def gold(x): gg= x**2 - 6*x + 9 return gg left = 1 right = 7 ans = 0.4 a = left + 0.618 * (right - left) b = left + 0.382*(right - left) gga = gold(a) ggb = gold(b) i = 0 while i < 7: print("i=%s" % i) print("left=%s,right=%s" % (left, right)) print("x左=%s,x右=%s" % (a, b)) print("y左=%s,y右=%s" % (ggb, gga)) c = right - left if c > 0.4: i = i + 1 if gga > ggb: right = a a = b b = left + 0.382*(right - left) gga = ggb ggb = gold(b) else:#gga<ggb left = b b = a a = left + 0.618 * (right - left) ggb = gga gga = gold(a) else: break
Ich weiß nicht, wann ich Ich habe eine Zwangsstörung, solange sie vorhanden ist. Wenn unter dem Code „~“ steht, muss ich sie beseitigen. Lache und weine. Dieses ist sehr einfach. Die ersten vier sind bis auf Fibonacci alle einfach. Indirekte Methode – quadratische Interpolationsmethode
def yy(x): y=x**4-4*x**3-6*x**2-16*x+4 return y def xing(xm1,xm2,xm3,fm1,fm2,fm3): yxxx=0.5000*((xm2**2-xm3**2)*fm1+(xm3**2-xm1**2)*fm2+(xm1**2-xm2**2)*fm3)/((xm2-xm3)*fm1+(xm3-xm1)*fm2+(xm1-xm2)*fm3) return yxxx x1 = -1.0000 f1 = yy(x1) x3 = 6 f3 = yy(x3) x2 = 0.50000*(x1+x3) f2 = yy(x2) xp = xing(x1,x2,x3,f1,f2,f3) fp = yy(xp) a = abs(xp-x2) while abs(xp-x2) > 0.05000: a = abs(xp - x2) if xp > x2: if fp > f2: x3=xp f3=fp xp = xing(x1, x2, x3, f1, f2, f3) fp = yy(xp) print("ans=%s" % a) print("left=%s,right=%s" % (x1, x3)) print("x*=%s,fp*=%s" % (xp, fp)) print("x2=%s,f2=%s" % (x2, f2)) print("******************") else:#f2>fp x1 = x2 f1 = f2 x2 = xp f2 = fp xp = xing(x1, x2, x3, f1, f2, f3) fp = yy(xp) print("ans=%s" % a) print("left=%s,right=%s" % (x1, x3)) print("x*=%s,fp*=%s" % (xp, fp)) print("x2=%s,f2=%s" % (x2, f2)) print("******************") else:#xp<x2 if fp > f2: x1 = xp f1 = fp xp = xing(x1, x2, x3, f1, f2, f3) fp = yy(xp) print("ans=%s" % a) print("left=%s,right=%s" % (x1, x3)) print("x*=%s,fp*=%s" % (xp, fp)) print("x2=%s,f2=%s" % (x2, f2)) print("******************") else: x3 = x2 f3 = f2 x2 = xp f2 = fp xp = xing(x1, x2, x3, f1, f2, f3) fp = yy(xp) print("ans=%s" % a) print("left=%s,right=%s" % (x1, x3)) print("x*=%s,fp*=%s" % (xp, fp)) print("x2=%s,f2=%s" % (x2, f2)) print("******************")
def fd(x): y = 4*x**3-12*x**2-12*x-16 return y def fdd(x): ys = 12*x**2-24*x-12 return ys i = 1 x0 = 3.00000 ans = 0.001 while i < 7: fd0 = fd(x0) fdd0 = fdd(x0) if abs(fd0) > ans: x1 = x0 - (fd0/fdd0) x0 = x1 print("次数:%s,所得的值x:%s"%(i,x1)) i = i + 1 else:#fd0<0.001 print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$") print("Bingo!顺利通关!祝您开学愉快!") print("Boss X=%s"%x0) break
Dies ist der erste Satz von Python-Codes, den ich selbst implementiert habe, um mathematische Formeln mithilfe der Python-Sprache zusammenzustellen. Als ich anfing, wusste ich ungefähr, was sich in der Sprache widerspiegeln sollte, aber es war nicht klar. Deshalb habe ich im Internet ein paar Dichotomien gefunden. Sie sind alle unterschiedlich, aber der Rahmen ist ähnlich. Wenn wir unsere Formel verwenden wollen, müssen wir jedoch viel ändern. Dann begann ich, unser Problem zu analysieren, und stellte fest, dass es im Allgemeinen zwei Teile erfordert, einen Teil der Funktionsdefinition und einen Teil des Schleifenkörpers. Aber ich weiß nicht, wie man Funktionen definiert, wie man mathematische Formeln schreibt, wie man Variablen erstellt, was bedeutet, dass ich nicht weiß, wie man einige kleine Dinge macht, also habe ich mich entschieden, direkt zu Baidu zu gehen. Weil ich weiß, dass ich ein guter Leser bin und die Hauptaussagen besser durch Lesen erfassen kann, als wenn ich sie aus einem Video extrahiere. Finden Sie gezielt Wissenspunkte und gewinnen Sie einen besseren Überblick.
Also fing ich an, das erste zu schreiben – Dichotomie. Ich habe festgestellt, dass ich viele Fehler gemacht habe und viele davon sehr grundlegend waren. Aber ich habe mich immer noch nicht für das Video entschieden, sondern habe diese Fragen direkt auf Baidu gesucht, weil Sie den Punkt nach dem Video möglicherweise nicht gefunden haben. Natürlich handelt es sich hierbei um einen Schritt-für-Schritt-Prozess, bei dem es nicht nur darum geht, das Programm einzurichten und es Stück für Stück zu ändern.
Mit dem Erfolg der ersten beiden habe ich festgestellt, dass ich Vertrauen in diese Codes gewonnen habe und ihre Tarnungen zu durchschauen und das Wesentliche zu erfassen schien. Darüber hinaus wurde mir auch klar, dass sich meine Lernfähigkeit seit August stark verbessert zu haben scheint und ich über effektivere Lernmethoden verfüge. Es hat in allen Aspekten ein gewisses Erwachen stattgefunden. Bis auf den ersten, bei dem ich ein paar fehlerhafte Codes fand, wurden die anderen alle nach meiner eigenen Logik geschrieben. Nachdem die Logik klar war, würde ich einfach gehen, wenn ich nicht wüsste, wie man einen bestimmten Teil der Sprache übersetzt Tatsächlich sind diese Routinen alle gleich oder die Routinen zum Transformieren mathematischer Formeln sind gleich.
Mir wurde auch klar, dass Assembler tatsächlich die schwierigste Sprache ist, weil viele von ihnen selbst definiert und bearbeitet werden müssen. Sie müssen sich viele Anweisungen merken und können nicht flexibel sein. Aber für andere müssen Sie nur einige entsprechende aufschreiben. Python ist wirklich einfach. Darüber hinaus schien es mir, als hätte ich heute die Tür zu einer neuen Welt geöffnet, in die ich mich in dieses Ding voller Spiritualität, voller strenger Schönheit und in die unbekannten Veränderungen verliebt habe mit Code. Es ist möglicherweise nicht auf Python beschränkt, diese Sprachen sind voller Herausforderungen. Ich denke, wenn man Zweifel hat, muss man seiner Intuition vertrauen, zumindest habe ich festgestellt, dass sie sehr genau ist
Das obige ist der detaillierte Inhalt vonPython implementiert verschiedene Optimierungsalgorithmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!