首页 > 解决方案 > 我想使用 Python 的 Steepest Descent 找到 x 解决方案。但是当我运行它时,它说 def 语法无效。我应该解决什么问题?

问题描述

我正在创建最速下降法的脚本来求解 2 个方程(该方程位于 Richard L. Burden 和 J. Douglas Faires 的《数值分析》一书的第 659 页)。我有 2 个脚本,但它们都完全相同。区别只是我要解决的方程的定义。当我尝试运行脚本来解决 1b 上的问题时,问题就来了。

这些是练习

这是我的脚本

    from numpy import *
def f1(x1,x2):
    return 3*x1**2-x2**2
def f2(x1,x2):
    return 3*x1*x2**2-x1**3
def g(x1,x2):
    return x1**6+(-6*x2**2+9)*x1**4+(9*x2**4-6*x2**2)*x1**2+x2**4
def dgx1(x1,x2):
    return 6*x1*(x1**4+(-4*x2**2+6)*x1**2+3*x2**4-2*x2**2
def dgx2(x1,x2):
    return (-12)*(x1**4)*x2+(36*x2**3-(12*x2))*x1**2+(4*x2**3)
x01=0
x02=0
TOL=0.05
n=100
k=1
while (k<=100):
    g1=g(x01,x02)
    z=[dgx1(x01,x02),dgx2(x01,x02)]
    z0=sqrt(z[0]**2+z[1]**2)
    if z0==0:
        print('gradien nol')
        print(x01,x02,g1)
        break
    z=z/z0
    a1=0
    a3=1
    g3=g(x01-a3*z[0],x02-a3*z[1])
    while g3>=g1:
        a3=a3/2
        g3=g(x01-a3*z[0],x02-a3*z[1])
        if a3<TOL/2:
            print('unsolve')
            print(x01,x02,g1)
            break
    a2=a3/2
    g2=g(x01-a2*z[0],x02-a2*z[1])
    h1=(g2-g1)/a2
    h2=(g3-g2)/(a3-a2)
    h3=(h2-h1)/a3
    a0=1/2*(a2-h1/h3)
    g0=g(x01-a0*z[0],x02-a0*z[1])
    Ag= min(g0,g3)
    a=a0
    g_1=g0
    if g_1!=Ag:
        a=a3
        g_1=g(x01-a3*z[0],x02-a3*z[1])
    x01=x01-a*z[0]
    x02=x02-a*z[1]
    if abs(g_1-g1)<TOL:
        print(x01,x02,g_1)
        break
    k=k+1
print(x01,x02)

当我运行它时,它说'INVALID SYNTAX'并且在'def'上有红色标记,它在dgx2行上。我应该怎么办?

标签: python-3.x

解决方案


推荐阅读