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
제가 처음으로 구현한 코드입니다. 알고리즘을 학습한 후에는 기본적으로 논리적 프레임워크가 있으며, 명확하게 해야 할 유일한 것은 해당 Python 언어입니다. 그래서 "함수를 정의하는 방법"(자세한 내용은 mofan의 Youku 참조), "루프 본문" 및 "if 조건문"의 형식(https://blog.csdn.net/qq_39407518/article/details/)을 찾기 시작했습니다. 79822498) "수학적 기호"(자세한 내용은 mofan의 Youku 참조) 및 print
1.def의 사용은 Python의 가운데 손가락 정의입니다. 일반적으로 네트워크 구축에 딥러닝이 필요한 경우 사용됩니다. 네트워크를 정의하는 데 사용할 수 있습니다. 한 가지 주목할 만한 점은3. 이유는 모르겠지만 제가 본 영상에서 함께 출력된 다중 변수 print 를 제 pycharm에서 사용할 수 없고 결과가 매우 이상합니다. 아마도 iOS가 아니라 Win10을 사용하고 있기 때문일 수도 있습니다. print 여러 변수가 함께 출력되는 경우 print("이름: %s, 이름 2: %s" % (a, b))여야 합니다. 결과 출력은 name: a, Name 2: bQuestion: 1입니다. . 왜 반품을 추가해야 합니까?return을 함수 뒤의 새 줄에 추가해야 한다는 것입니다. 왜인지는 모르겠지만 덧셈이 없으면 함수식은 마치 꽃병처럼 출력할 수 없는 결과처럼 됩니다. 2. 가장 혼란스러운 것은 논리입니다. 처음에는 논리가 명확하지 않거나 코드에 누락이 있어서 루프 본문에 왼쪽과 오른쪽을 넣었습니다. 결과는 예측 가능합니다. 하지만 내가 pycharm에서 디버그를 사용하는 방법을 알게 된 것도 이 오류 때문이었습니다. 매우 간단했고 Baidu는 이를 즉시 생각해 냈습니다.
return은 이 def의 모든 변수 값을 결과로 출력하는 것을 의미합니다. 일반적으로 출력 함수의 관계식은 이 함수를 호출하면 변수에 해당하는 함수 값을 표시할 수 있도록 이름을 지정합니다. 그렇지 않으면 결과 없이만 실행되고 아무런 효과가 없습니다.
그리드 방식 - 3점 균등 분할 방식
import 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
파이썬의 데이터 변수에 대하여. 첫 번째 실행 결과가 명백히 잘못된 것 같아 디버깅을 사용했습니다. mid1은 항상 1.5가 아닌 1이라는 것이 밝혀졌으므로 데이터 변수를 이해하기 시작했습니다. 처음에는 Python의 모든 변수가 기본적으로 정수형인 줄 알았으나 이분법의 결과를 토대로 이 추측이 틀렸음을 깨달았으므로 전체 파일의 변수 형식을 변경할 필요가 없었습니다. 그래서 mid1 수식 앞에 float를 추가했더니 결과가 1.5로 표시되었습니다. 그러나 전체 수식을 ()로 묶고 앞에 float를 추가하면 결과는 여전히 1입니다. 이유를 잘 모르겠습니다. 하지만 파이썬의 데이터 형식은 입력량에 따라 결정되는 것으로 알고 있습니다. 즉, 입력량이 정수라면 그에 직접적으로 관련된 계산 출력도 정수형이어야 하고, 정수형이어야 합니다. 캐리를 사용하지 않는 것입니다. +float/+.0 두 가지 방법을 사용하기 전에는 mid1~3이 모두 정수였습니다.인쇄에 대해 정말 불평하고 싶은데 너무 번거로워서 매번 %s를 얻어야 하고 가끔은 안 되는 경우도 있습니다. 함께 출시됩니다! ! ! ! 피보나치 방법아니면 mid1 앞에 float를 추가하는 대신 입력량 뒤에 점을 찍으면 됩니다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)
fibonacci 함수 정의를 많이 추가하세요. 디버깅할 때마다 손이 떨리네요 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
언제 강박관념이 있는지 모르겠습니다. -강박장애, 코드 아래에 "~"가 있는 한, 이를 제거해야 합니다. 웃고 울다. 이것은 매우 간단합니다. 처음 4개는 피보나치를 제외하면 모두 간단합니다. 간접법 - 2차 보간법
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
이것은 제가 직접 구현한 첫 번째 Python 코드 세트입니다. Python 언어를 사용하여 수학 공식을 조합하는 것입니다. 처음 시작했을 때 언어에 무엇을 반영해야 할지 대략적으로는 알았지만 명확하지 않았습니다. 그래서 인터넷에서 몇 가지 이분법을 발견했습니다. 그것들은 모두 다르지만 프레임워크는 비슷합니다. 그러나 우리의 공식을 사용하려면 많은 것을 바꿔야 합니다. 그런 다음 문제를 분석하기 시작했고 일반적으로 두 부분, 즉 함수 정의 부분과 루프 본문 부분이 필요하다는 것을 발견했습니다. 하지만 저는 함수를 정의하는 방법, 수학 공식을 작성하는 방법, 변수를 만드는 방법을 모릅니다. 즉, 작은 일을 하는 방법을 모른다는 뜻이므로 바로 Baidu를 선택했습니다. 왜냐하면 저는 제가 책을 잘 읽는 사람이고, 동영상에서 요점을 추출하는 것보다 독서에서 주요 요점을 얻는 데 더 능숙하기 때문입니다. 목적에 맞게 지식 포인트를 찾아 더욱 확실하게 파악하세요.
그래서 저는 첫 번째 이분법을 쓰기 시작했습니다. 나는 많은 실수를 저질렀으며 그 중 상당수는 매우 기본적인 것임을 깨달았습니다. 하지만 저는 여전히 영상을 선택하지 않았습니다. 대신에 Baidu에서 직접 이러한 질문을 찾아보았습니다. 영상을 본 후에 요점을 찾지 못했을 수도 있기 때문입니다. 물론 이것은 단지 프로그램을 제자리에 놓고 조금씩 변경하는 것이 아니라 단계별 과정입니다.
처음 두 가지의 성공으로 저는 이러한 코드에 대한 자신감을 얻었고 그들의 위장을 간파하고 본질을 파악하는 것 같았습니다. 게다가 8월부터 학습능력이 많이 좋아진 것 같고, 더 효과적인 학습 방법도 생겼다는 것도 깨달았습니다. 모든 측면에서 어느 정도 각성이 이루어졌습니다. 몇 가지 잘못된 코드를 발견한 첫 번째 코드를 제외하면 나머지는 모두 내 논리에 따라 작성된 것입니다. 논리가 명확해진 후 언어의 특정 부분을 번역하는 방법을 모른다면 그냥 가겠습니다. 실제로 이러한 루틴은 모두 동일하거나 수학 공식을 변환하는 루틴이 동일합니다.
어셈블리가 사실 가장 어려운 언어라는 것도 깨달았습니다. 지금까지 배운 것 중 상당수는 혼자서 정의하고 조작해야 하는 언어가 많기 때문입니다. 하지만 다른 경우에는 해당 항목을 적어두면 됩니다. 파이썬은 정말 간단해요. 게다가 오늘은 새로운 세계의 문을 연 것 같았다. 영성이 넘치고, 엄밀한 아름다움이 가득한, 알 수 없는 변화에 사랑에 빠진 것 같았다. 코드로. Python에만 국한되지 않고 이러한 언어에는 어려움이 가득합니다. 의심스러울 때는 직관을 믿어야 한다고 생각합니다. 적어도 저는 직관이 매우 정확하다고 생각합니다
위 내용은 Python은 다양한 최적화 알고리즘을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!