@serkull (sar kull)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Pythonで関数の極値を求めるプログラムを作成したい

Q&A

Closed

解決したいこと

関数の極値を求めるプログラムの作成途中、極値のX座標が虚数になるときは、作動しないようにしたかったのですが、上手く作動しません。また、[d1]をプリントしようとしたところ、一つしかプリントされませんでした。解決方法を教えて下さい。

発生している問題・エラー

in
129 print("この関数においては極値のx座標の一部が複素数となるため、判定できかねます。")
130 else:
--> 131 if k1 > 0:
132 print("x=",d1,"のとき極大値",y1)
133 elif k1 < 0:

/usr/local/lib/python3.8/dist-packages/sympy/core/relational.py in bool(self)
393
394 def bool(self):
--> 395 raise TypeError("cannot determine truth value of Relational")
396
397 def _eval_as_set(self):

TypeError: cannot determine truth value of Relational




または、問題・エラーが起きている画像をここにドラッグアンドドロップ

### 該当するソースコード
```python
import random
import math 
import sympy as sym
from sympy.plotting import plot
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import sympy
import numpy as npy
!pip install japanize-matplotlib
import japanize_matplotlib
from scipy import signal

num0 = random.randint(1,10)
num1 = random.randint(-10,10)
num2 = random.randint(-10,10)
num3 = random.randint(-10,10)
num4 = random.randint(-10,10)

x,y = sym.symbols("x y")
y = int(num0) * x ** 4 +int(num1) * x ** 3 + int(num2) * x ** 2 + int(num3) * x  + int(num4)
y_d = sym.Derivative(y).doit()
y__d = sym.Derivative(y_d).doit()
d1 = sympy.solve(y_d , x)
D = -4 * int(num0) * int(num2) **3 -27 * int(num0) ** 2 * int(num3) ** 2 + int(num1) ** 2 *int(num2) ** 2 + 18  * int(num0) * int(num1) * int(num2) * int(num3) * int(num4) -4 * int(num1) ** 3 * int(num3)
if D <= 0:
    print("3つの極値なし")
else:
  for d1 in d1:
    y1 = y.subs(x,d1)
    k1 = y__d.subs(x,d1)
    if type(d1) is complex:
      print("この関数においては極値のx座標の一部が複素数となるため、判定できかねます。")
    else: 
      if k1 > 0:
        print("x=",d1,"のとき極大値",y1)
      elif k1 < 0:
        print("x=",d1,"のとき極小値",y1

自分で試したこと

三次関数で近いプログラムを作り、k>0以外のプログラムは恐らく作動することを確認しました。

0 likes

2Answer

numpy 1.24では、

import numpy as np

を実行するところで、下記のエラーになりました。

How to solve AttributeError: module 'numpy' has no attribute 'bool'?

参考)How to solve AttributeError: module 'numpy' has no attribute 'bool'?
https://stackoverflow.com/questions/74893742/how-to-solve-attributeerror-module-numpy-has-no-attribute-bool

使用しているモジュールのバージョンの組み合わせによっては、
他にもエラーが出るかと思います。

ためしに、1.23.1 にダウングレードして実行したところ、
私の環境では、、

$ pip uninstall numpy
$ pip install numpy==1.23.1
...
...
$ python <上記のプログラムのファイル名>
3つの極値なし

となりましたが、何かヒントになりますかね??

0Like

あと、、

if D <= 0:
    print("3つの極値なし")
else:
  for d1 in d1: <--- 同じ変数になっている
      (後略)

は、for d2 in d1: など、別の変数に格納させなければならないのでは??

0Like

Your answer might help someone💌