我正在尝试为多变量场景实现 Newtons_method。我正在尝试输出多次迭代,但出现索引错误import symenginefrom symengine import varimport numpy as npvars =var("x y")sol=[]def jacob(): f = ['2*x+y**2-8','x**2-y**2+x*y-3'] # Define function J = symengine.zeros(len(f),len(vars)) # Initialise Jacobian matrix # Fill Jacobian matrix with entries for i, fi in enumerate(f): for j, s in enumerate(vars): J[i,j] = symengine.diff(fi, s) sol.append(J[i,j]) a = np.array([sol[0],sol[1],sol[2],sol[3]]) return adef eval1(func,val1,val2): z=[] for b in func: b=str(b) x=val1 y=val2 z.append(eval(b)) return np.array([[z[0],z[1]],[z[2],z[3]]])def newtons_method(f, df, x0, e): q=10 while q > e: q=q-1 x0 = np.absolute(x0 - (np.array([[f(x0[0][0])],[df(x0[1][0])]]))/(eval1(jacob(),x0[0][0],x0[1][0]))) print('Root is at: ', x0) print('f(x) at root is: ', f(x0))def f(x): return 2*x+y**2-8def df(x): return x**2-y**2+x*y-3x0s = np.array([[1],[1]])for x0 in x0s: newtons_method(f, df, x0, 1)我收到错误:标量变量的索引无效。 我在 newtons_method 函数下将值设置为 x0 的地方,对出了什么问题有什么想法吗?
1 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
当调用 newtons_method 函数时,[[1],[1]] 即 [1] 的元素作为参数 x0 被传递。在函数内部,x0[0][0] 已被使用,它为标量变量错误提供了无效索引。
如果您想同时使用这两个元素,您应该将 x0s 作为参数传递。
x0s = np.array([[1],[1]]) newtons_method(f, df, x0s, 1)
添加回答
举报
0/150
提交
取消