python-3.x - 我想使用 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行上。我应该怎么办?
解决方案
推荐阅读
- java - 尝试将 Gradle 应用程序部署到 Heroku 时,如何解决与 JMX 相关的 BindException?
- django - 通过下一个和上一个按钮循环使用随机浮点值?
- reactjs - “IntrinsicAttributes”类型上不存在属性“ref”
- javascript - Javascript过滤嵌套数组以排除不包含多个元素之一的对象
- installation - 在 Centos 上安装 Eucalyptus?
- build.gradle - 无法在 KMP 应用程序中找到 Kodein-db-0.8.1-beta-samplesources.jar
- scala - scala 中函数式编程的性能
- java - Android onKeyUp() 在某些模拟器上无法正确调用
- javascript - 反应中的静态是什么意思(做)
- python - 使用 sklearn 执行网格搜索以减少交叉验证数据集的有效方法