スタック・オーバーフロー Asked by asak on November 7, 2021
Pythonに慣れておらず、エラー内容と解決方法がわからない。
これは呼び出したkvが積分に対応していないということですか?
ソースコード
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.special
from scipy.special import kv
from sympy import *
from scipy.integrate import quad
z = Symbol('z')
v = 5/3
y = quad(f(v,z), (z,x, np.inf))
F = x*y
plot((F),(x,0,10),title='test',xlabel='x',ylabel='F')
エラーメッセージ
TypeError Traceback (most recent call last)
<ipython-input-9-8f89c7044d48> in <module>
9 z = Symbol('z')
10 v = 5/3
---> 11 y = quad(f(v,z), (z,x, np.inf))
12 F = x*y
13 plot((F),(x,0,10),title='test',xlabel='x',ylabel='F')
TypeError: ufunc 'kv' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
sympy と scipy ライブラリを区別してください。sympy は記号計算のためのライブラリであり、scipy ライブラリは数値計算のためのライブラリです。それぞれでは内部で用いられるアルゴリズムが違います。基本的に素のままでは共存はできないと思ってください。
今回のプログラムはおそらく Jypter Notebook 系のソフトウェア上で実行されており、質問文にあるプログラムも不完全なものになっています。特に、関数 f
が定義されていません。しかし実行結果を見るに f
の評価には成功しているようです。おそらく別のセルで定義されたか、一度定義されたものを削除した後リセットしていないのでしょう。
エラー ufunc 'kv' not supported for the input types
はおそらくこの関数 f
の定義に関係して生じています。f
の定義の中で関数 kv
をお使いではないですか? import 文を見るにおそらくこの kv
は scipy.special.kv
なのでしょう。具体的な数値が引数に渡されることが期待されている関数に sympy の記号計算に使われるデータを渡しているため、「対応していない型の値が引数に渡されたよ」というエラーが出ているように見えます。
積分の記号計算をなさりたいのでしたら、まずは sympy の積分に関するドキュメントを読むのは如何でしょうか: https://docs.sympy.org/latest/modules/integrals/integrals.html。また f
の内容によっては sympy.lambdify
などの関数が役に立つかもしれません: https://docs.sympy.org/latest/modules/numeric-computation.html。
そうではなくて積分の数値計算をなさりたいのでしたら scipy ライブラリの積分に関するドキュメントに載っている実装例が助けになるかもしれません: https://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html。
Answered by nekketsuuu on November 7, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP