質問編集履歴

1

最適化したい関数が間違っていました。

2017/06/02 08:07

投稿

SATSUKI.
SATSUKI.

スコア21

test CHANGED
@@ -1 +1 @@
1
- scipyで複素数を扱おうとすると虚数部が廃棄され
1
+ scipyで最適化したい関数に複素数が含まれていると適切に最適化されない
test CHANGED
@@ -1,3 +1,5 @@
1
+ **[不備があったため再投稿]**
2
+
1
3
  python、数学共に初心者です。
2
4
 
3
5
 
@@ -8,15 +10,15 @@
8
10
 
9
11
  パラメーターはx[0],x[1],x[2]の三つです。
10
12
 
11
- 最適化したい関数に複素数が含まれていると以下のようなwarningが出て虚数部が破棄されてしいます。
13
+ 最適化したい関数に複素数が含まれていると以下のようなwarningが出ます。
12
14
 
13
- おそらくscipy側処理の途中破棄されるんだと思うのですが...
15
+ **最適化したい関数は計算すると除算と二乗によりjが消えるので、最適化された関数にもパラメーターにも虚数部が含まれないはずです。**
14
16
 
15
17
  虚数が含まれていない場合、問題がないことは確認済みです。
16
18
 
17
- 最適化されたパラメーターの虚数部も表示したいのですが、どうすればいいでしょうか?
19
+ 最適化されたパラメーターは適切な値にならないのですが、どうすればいいでしょうか?
18
20
 
19
- よろしくお願いします。
21
+ また初歩的な間違いかもしれませんが、よろしくお願いします。
20
22
 
21
23
 
22
24
 
@@ -34,7 +36,7 @@
34
36
 
35
37
  def f(x): #最適化したい関数
36
38
 
37
- return (x[0]-3.8j)**2+(x[1]-5j)**2+(x[2]-23j)**2
39
+ return ((3+4j)-(3*x[0]+4j))**2+((3+4j)-(3+x[1]*1j))**2+((x[2]+0j)-(23+0j))**2
38
40
 
39
41
 
40
42
 
@@ -64,19 +66,19 @@
64
66
 
65
67
  Optimization terminated successfully.
66
68
 
67
- Current function value: -568.440000
69
+ Current function value: -67457804844318816.000000
68
70
 
69
71
  Iterations: 3
70
72
 
71
- Function evaluations: 25
73
+ Function evaluations: 85
72
74
 
73
- Gradient evaluations: 5
75
+ Gradient evaluations: 17
74
76
 
75
- x[0]=1.06314602515e-06
77
+ x[0]=1.0
76
78
 
77
- x[1]=1.06314602515e-06
79
+ x[1]=-473759632.1
78
80
 
79
- x[2]=1.11913584022e-07
81
+ x[2]=396220148.629
80
82
 
81
83
  ```
82
84