
###前提・実現したいこと
Python初心者です.
Jupyter(IPython)で数値解析を行いたいと考えております.
###発生している問題・エラーメッセージ
定義した関数(func2)がObject型になっているため, 方程式を解く際にエラーが出てしまっていると考えられる.
-------------------------------------------------------------------------- TypeError Traceback (most recent call last) TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' --------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-452-282e1d84ee87> in <module>() ----> 1 answer = optimize.fsolve(func2, 3) 2 3 print("Cr2 = ", answer) C:\Users\anaconda\lib\site-packages\scipy\optimize\minpack.py in fsolve(func, x0, args, fprime, full_output, col_deriv, xtol, maxfev, band, epsfcn, factor, diag) 144 'diag': diag} 145 --> 146 res = _root_hybr(func, x0, args, jac=fprime, **options) 147 if full_output: 148 x = res['x'] C:\Users\anaconda\lib\site-packages\scipy\optimize\minpack.py in _root_hybr(func, x0, args, jac, col_deriv, xtol, maxfev, band, eps, factor, diag, **unknown_options) 222 maxfev = 200 * (n + 1) 223 retval = _minpack._hybrd(func, x0, args, 1, xtol, maxfev, --> 224 ml, mu, epsfcn, factor, diag) 225 else: 226 _check_func('fsolve', 'fprime', Dfun, x0, args, n, (n, n)) error: Result from function call is not a proper array of floats. ###該当のソースコード
Python
import numpy as np import matplotlib.pyplot as plt from IPython.display import clear_output from scipy import (optimize, exp) from scipy import * %matplotlib inline from sympy import * init_printing() var("Tt2") def func1(Tt2): return Tt1*(((((ρ1*Cz1*A1*R)/(C2*A2))*(Tt2-(C2**2)/(2*Cp)))+((ρ1*Cz1*A1*C2)/(2*A2)))**((γ-1)/(γ*ec)))-(pt1**((γ-1)/(γ*ec)))*Tt2 #func1は, 与えられたC2からTt2を返す. func1(Tt2) Tt2 = np. linspace(100, 500, 1000) plt. plot(Tt2, func1(Tt2)) plt. show() ans_Tt2 = optimize.fsolve(func1, 300) #ここでfunc1は機能し, 値を返してくれる. Tt2 = ans_Tt2[0] print("Tt2 = ", Tt2) T2 = Tt2 - (C2**2)/(2*Cp) var("Cr2") #Cr2を一度変数になおす. def func2(Cr2): return Tt2-((U2^2+Cr2^2)/(2*Cp))-(T1)-(γ-1)*ε*(T1)*(ΠM^2)*(1-(Cr2/U2)*tan(βideal))*(1-(1/2)*(1+((γ-1)/2)*(M1^2))*ε*(1-(Cr2/U2)*tan(βideal))) #累乗を表すのは"*×2"ですが, ここでは"^"で表しています. Cr2以外の文字については値が実数で与えられています. func2(Cr2) #数式のチェック. Cr2 = np. linspace(-30, 100, 100) plt. plot(Cr2, func2(Cr2)) plt. show() #どんなグラフになるかを確認. グラフが生成されるのは確認済. answer = optimize.fsolve(func2, 3) print("Cr2 = ", answer) #Cr2を求める. ここでエラーが発生.
###試したこと
同じ形式でfunc1というものを作っていますが, これは正常に起動しているのを確認しました.
そこでfunc1, 2について異なる点を洗ってみたところ, func1は"float64"で表されるが, func2は"Object"で表されている事でした.
これはprint("func1", func1(Tt2).dtype)で調べました.
ほかにも, 型の変換を試みようとしましたが, 参考書でも見つからず困っている状況です.
###補足情報(言語/FW/ツール等のバージョンなど)
Jupyter Python3 notebook



回答1件
あなたの回答
tips
プレビュー