XLPack 7.0
Python API リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ hybrd1()

def hybrd1 ( ,
,
,
fvec  ,
xtol  = 1.0e-10 
)

非線形連立方程式 (ハイブリッド法) (ヤコビ行列計算不要) (シンプルドライバ)

目的
hybrd1はn本のn変数非線形方程式よりなる連立方程式
fi(x1, x2, ..., xn) = 0 (i = 1 〜 n)
の解をパウエルのハイブリッド法により求める.

関数値を計算するユーザールーチンが必要である. ヤコビ行列はルーチン内で前進差分により計算されるため, ユーザーがヤコビ行列を求める必要はない.

hybrd1は標準的な使用のためのシンプルドライバで, デフォルトパラメータを用いてhybrdを呼び出す.
戻り値
info (int)
= 0: 正常終了 (連続した反復間の相対誤差がxtol以下になった)
= -1: 入力パラメータ f の誤り
= -2: 入力パラメータ n の誤り (n < 1)
= -3: 入力パラメータ x の誤り
= -4: 入力パラメータ fvec の誤り
= -5: 入力パラメータ xtol の誤り (xtol < 0)
= 1: iflag = 1または2によるfcnの呼び出し回数が上限(200*(n + 1))に達した
= 2: xtolが小さすぎる. 解xを改善することができなくなった
= 3: 直近5回のヤコビ行列の評価において解が改善されなかった
= 4: 直近10回の反復において解が改善されなかった
引数
[in]f関数fi(x)の値を求めるユーザーサブルーチンで, 次のように定義すること. _CODE def f(n, x, fvec, iflag): if iflag == 1 or iflag == 2: fvec[0] = 関数値 f1(x[0], x[1], ..., x[n-1]) fvec[1] = 関数値 f2(x[0], x[1], ..., x[n-1]) ... fvec[n-1] = 関数値 fn(x[0], x[1], ..., x[n-1]) _ENDCODE iflag = 1あるいは2のときに関数値fi(x)を計算してfvecに設定する.
[in]n未知数および方程式の数. (n > 0)
[in,out]xNumpy ndarray (1次元配列, float, 長さn)
[in] 初期近似解.
[out] 求められた解ベクトル.
[out]fvecNumpy ndarray (1次元配列, float, 長さn)
求められた解ベクトルxにおける関数値.
[in]xtol(省略可)
目標精度. 続く2回の反復間の相対誤差がxtolより小さくなったら終了する. (xtol >= 0) (省略時 = 1.0e-10)
出典
netlib/minpack
使用例
次の非線形連立方程式を解く.
x1^2 - x2 - 1 = 0
(x1 - 2)^2 + (x2 - 0.5)^2 - 1 = 0
初期値は, (x1, x2) = (0, 0) とする.
def f(n, x, fvec, iflag):
if iflag == 1 or iflag == 2:
fvec[0] = x[0]**2 - x[1] - 1
fvec[1] = (x[0] - 2)**2 + (x[1] - 0.5)**2 - 1
def TestHybrd1():
n = 2
x = np.array([0.0, 0.0])
fvec = np.empty(n)
info = hybrd1(f, n, x, fvec)
print(x)
print(fvec)
print(info)
def hybrd1(f, n, x, fvec, xtol=1.0e-10)
非線形連立方程式 (ハイブリッド法) (ヤコビ行列計算不要) (シンプルドライバ)
実行結果
>>> TestHybrd1()
[1.06734609 0.13922767]
[-1.11022302e-16 0.00000000e+00]
0