7

次の非線形方程式のルート検索を実行したいのですが、Python で実行しましたが、うまくいきません。私のコードは以下です

from pylab import *
import scipy
import scipy.optimize

def z1(x,y):
    temp=1+1j+x+2*y;
    return temp

def z2(x,y):
    temp=-1j-2*x+sqrt(3)*y;
    return temp

def func(x):
    temp=[z1(x[0],x[1])-1.0/(1-1.0/(z2(x[0],x[1]))),1-2.0/(z2(x[0],x[1])-4.0/z1(x[0],x[1]))]
    return temp

result=scipy.optimize.fsolve(func,[1+1j,1+1j])

print result

実行すると、エラーが表示されます:

---> 30 結果=scipy.optimize.fsolve(func,[1+1j,1+1j])

C:\Python27\lib\site-packages\scipy\optimize\minpack.py in fsolve(func, x0, args, fprime, full_output, col_deriv, xtol, maxfev, band, epsfcn, factor, diag)

123             maxfev = 200*(n + 1)

124         retval = _minpack._hybrd(func, x0, args, full_output, xtol,

--> 125 maxfev, ml, mu, epsfcn, factor, diag)

126     else:

127         _check_func('fsolve', 'fprime', Dfun, x0, args, n, (n,n))
4

2 に答える 2

6

fsolveは、R^n -> R から関数のゼロを検出します。同様の関数rootは、R^n -> R^m から関数のゼロを検出します。

C^2 -> C^2 から関数のゼロを見つけようとしているようですが、私が知る限り、scipy.optimize は直接サポートしていませんが、R^4 から関数を記述してみてください。 -> R^4 を使用してroot. たとえば、次のようなものです。

def func_as_reals(x):
    r1, c1, r2, c2 = x
    a, b = func([complex(r1, c1), complex(r2, c2)])
    return [a.real, a.imag, b.real, b.imag]

動作するはずですが、複素数へのラップとアンラップを繰り返すのではなく、実数で直接実行する方が大幅に高速になる場合があります。

于 2013-03-05T00:28:09.530 に答える