【问题标题】:Python fsolve ValueErrorPython fsolve ValueError
【发布时间】:2015-05-03 21:55:56
【问题描述】:

为什么下面的代码会返回 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.

【问题讨论】:

  • 函数本身没有任何问题,我就是不明白为什么fsolve不起作用。
  • 函数中的参数p和初始猜测必须是单个数组,而不是两个数组的元组
  • 当我在我的盒子上尝试时,您发布的代码并没有因该错误而失败(尽管它确实失败了!)。能否指定 python 版本、numpy 和 scipy 版本以及完整的错误堆栈跟踪?
  • 我认为您可能遇到与this question 相同的问题 - 即您认为您正在传递两个列表的元组 (@987654325 @) 到您的功能,但它们正在“在幕后”被解包

标签: python scipy


【解决方案1】:

此处的基本问题是您的函数f不满足fsolve上工作所需的标准。这些标准描述于987654321 @ - 尽管可以说是不是很清楚。

您需要注意的特定事物是:

  1. 将用于将要解决的函数的输入必须是n维向量(在文档中称为 ndArray em>),使得您想要的@ 987654326的值是解决方案到987654327 @。
  2. @ 987654328的输出必须与x 987654329 f。

目前,您的功能需要2个成员1x3-arrays 987654332 @(p)和固定的标量偏移量(在a)中。它返回3个成员tuple类型(@ 987654336,@ 987654337,1x3 array)

可以看到,既不满足条件1也没有2。

很难准确地建议你如何解决这个问题而不完全确定您正在尝试解决的等式。似乎您正在尝试解决一些特定的等式f 987654340 @和y 987654342 @和y0 = (1,1,1)和a = 9作为固定值。你 可能 em> 通过传递x和y concatenated(例如在@ 987654347和函数使用x=p[:3]和y = p[3:]但是,您必须类似地修改函数以同样地将x和y输出到6维向量。这取决于您解决的确切函数,我无法从现有的输出中工作f(即,基于点产品,外产物和总基元组)。

note 在向量中传递的参数(例如,在案例中的a a将被视为固定值,并且不会随着优化或返回的一部分而变化作为任何解决方案的一部分。


注意那些喜欢完整故事的人... h1>

As the docs say:

fsolve是minpack的混合和hybrj算法周围的包装器。

如果我们查看MINPACK hybrd documentation,输入和输出向量的条件更明确说明。请参阅下面的相关位(我为清晰度剪掉了一些东西 - 用...表示 - 并添加了评论,以表明输入和输出必须是相同的形状 - 用

1目的。

Hybrd的目的是找到n的系统的零 通过修改鲍威尔的N变量中的线性函数 混合方法。用户必须提供一个计算的子程序 函数。然后通过a计算雅各雅加人 病变差异近似。

2子程序和类型语句。

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

...

FCN是计算的用户提供的子程序的名称 功能。必须在外部声明中声明FCN 在用户调用程序中,应该如下写入。

 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是一个正整数输入变量设置为数量 功能和变量。

X是长度n的数组。在输入x上必须包含初始 估计溶液载体。在输出x上包含 溶液载体的最终估计。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    相关资源
    最近更新 更多