質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

983閲覧

【python】scipyの特殊関数を用いた方程式を解きたい

tallman0202

総合スコア6

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/10 01:27

編集2020/09/10 01:43

実現したいこと

下式に適当なβを代入してφを求めたいのですがうまくいきません。
イメージ説明
jn(x):球ベッセル関数
β:0~1の任意の数値

参考文献によるとβに対するφの値は下図のようになるそうです。
ご教授いただけますと助かります。
イメージ説明

試したこと

以下コードの通り、optimize.fsolveとoptimize.newtonより計算しようとしたのですが解が出ず止まってしまいます。

python3

1#optimize.fsolveの場合 2import numpy as np 3import scipy as sc 4from scipy import optimize 5from scipy.special import spherical_jn 6import cmath as cm 7 8def j(n, z): 9 return spherical_jn(n, z) 10 11def f(x): 12 return j(0, x[0])*j(2, cm.sqrt(b)*x[0])+j(2, x[0])*j(0, cm.sqrt(b)*x[0]) 13 14b = 1 15x= optimize.fsolve(f, 0)

python3

1#optimize.newtonの場合 2import numpy as np 3import scipy as sc 4from scipy import optimize 5from scipy.special import spherical_jn, spherical_yn 6import cmath as cm 7 8def j(n, z): 9 return spherical_jn(n, z) 10 11def f(x): 12 return j(0, x)*j(2, cm.sqrt(b)*x)+j(2, x)*j(0, cm.sqrt(b)*x) 13 14b = 1 15x = optimize.newton(f, 0)

補足資料

参考文献のURLはこちらです。
http://xrm.phys.northwestern.edu/research/pdf_papers/1996/kuno_physrevb_1996.pdf

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

※optimize.fsolveを使うのは初めてなので、手探りな回答です。
optimize.fsolve(f, 0)をoptimize.fsolve(f, 3.9)に変更:fsolveは開始時の推定値によって結果が大きく異なってしまうようなので、試しに測定値を振ってみて3.9が最も希望の形に違い答えを返しました。
理論の裏付けがないので、いいやり方ではないですね。
推定値を理論的に出せないなら、違うアルゴリズムを使ったほうが良さそうな。

python3

1#optimize.fsolveの場合 2import numpy as np 3import scipy as sc 4from scipy import optimize 5from scipy.special import spherical_jn 6import cmath as cm 7import matplotlib.pyplot as plt 8 9def j(n, z): 10 return spherical_jn(n, z) 11 12def f(x): 13 return j(0, x[0])*j(2, cm.sqrt(b)*x[0])+j(2, x[0])*j(0, cm.sqrt(b)*x[0]) 14 15B = np.linspace(0,1,11) 16X = [] 17for b in B: 18 X.append(optimize.fsolve(f, 3.9)) 19 20fig = plt.figure() 21ax = fig.add_subplot(111, ylim=(2,7)) 22ax.plot(B,X) 23fig.savefig('test.png')

test

投稿2020/09/10 03:01

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tallman0202

2020/09/12 07:26

ご回答いただき有難うございます。 計算がうまくいかない場合はfsolveの開始時の推定値を変更してみるという手があるのですね。 実際にグラフ化して説明いただきすごく助かりました。 理論の裏付けはない点に関してはもう少し勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問