gpt4 book ai didi

Python fsolve 值错误

转载 作者:行者123 更新时间:2023-12-01 04:48:52 24 4
gpt4 key购买 nike

为什么下面的代码会返回 ValueError?

from scipy.optimize import fsolve
import numpy as np

def f(p,a=0):
x,y = p
return (np.dot(x,y)-a,np.outer(x,y)-np.ones((3,3)),x+y-np.array([1,2,3]))

x,y = fsolve(f,(np.ones(3),np.ones(3)),9)


ValueError: setting an array element with a sequence.

最佳答案

这里的基本问题是你的函数 f不满足 fsolve 所需的条件上类。这些标准描述为 in the documentation - 虽然可以说不是很清楚。

您需要注意的具体事项是:

  1. 要求解的函数的输入必须是 n 维向量(在文档中称为 ndarray),使得 x 的值你想要的是f(x, *args) = 0的解决方案.
  2. f 的输出形状必须与 x 相同输入f

目前,您的函数需要 2 个成员 tuple1x3-arrays (在 p 中)和固定标量偏移(在 a 中)。它返回 3 个成员 tuple类型( scalar3x3 array1x3 array )

如您所见,条件 1 和 2 都不满足。

在不确定您要求解的方程的情况下,很难准确地向您提供解决此问题的建议。看来您正在尝试求解某个特定的方程 f(x,y,a) = 0对于 xyx0 = (1,1,1)y0 = (1,1,1)a = 9作为固定值。您也许可以通过传入 x 来做到这一点和y连接(例如传入 p0 = (1,1,1,1,1,1) 并在函数中使用 x=p[:3]y = p[3:] 但随后您必须修改函数以将 x 和 y 连接成类似的 6 维向量。这取决于您正在求解的确切函数对于,我无法从现有的 f 的输出中计算出这个结果(即基于点积、外积和基于总和的元组)。

请注意,您未在向量中传递的参数(例如您的情况下的 a )将被视为固定值,并且不会作为优化的一部分而变化或返回作为任何解决方案的一部分。

<小时/>

对于那些喜欢完整故事的人请注意...

As the docs say:

fsolve is a wrapper around MINPACK’s hybrd and hybrj algorithms.

如果我们看一下MINPACK hybrd documentation ,输入和输出向量的条件更加清楚地说明。请参阅下面的相关部分(为了清楚起见,我删除了一些内容 - 用 ... 表示 - 并添加了注释以表明输入和输出必须具有相同的形状 - 用 <-- 表示)

1 Purpose.

The purpose of HYBRD is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. The user must provide a subroutine which calcu- lates the functions. The Jacobian is then calculated by a for- ward-difference approximation.

2 Subroutine and type statements.

   SUBROUTINE HYBRD(FCN,N,X, ...

...

FCN is the name of the user-supplied subroutine which calculates the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows.

 SUBROUTINE FCN(N,X,FVEC,IFLAG)
INTEGER N,IFLAG
DOUBLE PRECISION X(N),FVEC(N) <-- input X is an array length N, so is output FVEC
----------
CALCULATE THE FUNCTIONS AT X AND
RETURN THIS VECTOR IN FVEC.
----------
RETURN
END

N is a positive integer input variable set to the number of functions and variables.

X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector.

关于Python fsolve 值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28828578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com