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

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

新規登録して質問してみよう
ただいま回答率
87.20%
パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

関数

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

Python

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

解決済

積分関数を含む式を使って2つのパラメータでフィッティング

voigt
voigt

総合スコア1

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

関数

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

Python

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

3回答

0評価

0クリップ

1878閲覧

投稿2021/01/02 08:58

編集2021/01/02 13:07

前提・実現したいこと

pythonで積分関数(フォークト関数)を使ってフィッティングしようとしています。
単純な関数ではフィッティングができたのですが、積分を組み込むとうまくいきません。
フォークト関数では、zについて積分をします。
パラメータは2つでparam1とparam2です。

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-10-baa10670dc7d> in <module> 21 22 p0 = 0.5, 0.5 ---> 23 popt, pcov = curve_fit(func, array_x, array_y, p0) ~\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in curve_fit(f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs) 750 # Remove full_output from kwargs, otherwise we're passing it in twice. 751 return_full = kwargs.pop('full_output', False) --> 752 res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs) 753 popt, pcov, infodict, errmsg, ier = res 754 cost = np.sum(infodict['fvec'] ** 2) ~\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in leastsq(func, x0, args, Dfun, full_output, col_deriv, ftol, xtol, gtol, maxfev, epsfcn, factor, diag) 381 if not isinstance(args, tuple): 382 args = (args,) --> 383 shape, dtype = _check_func('leastsq', 'func', func, x0, args, n) 384 m = shape[0] 385 ~\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in _check_func(checker, argname, thefunc, x0, args, numinputs, output_shape) 24 def _check_func(checker, argname, thefunc, x0, args, numinputs, 25 output_shape=None): ---> 26 res = atleast_1d(thefunc(*((x0[:numinputs],) + args))) 27 if (output_shape is not None) and (shape(res) != output_shape): 28 if (output_shape[0] != 1): ~\Anaconda3\lib\site-packages\scipy\optimize\minpack.py in func_wrapped(params) 456 if transform is None: 457 def func_wrapped(params): --> 458 return func(xdata, *params) - ydata 459 elif transform.ndim == 1: 460 def func_wrapped(params): <ipython-input-10-baa10670dc7d> in func(x, param1, param2) 17 def voigt(z): 18 return param1 * 0.8256 / np.pi**(3/2) / param2 / widthL * np.exp((-1) * (2 * z / param2)**2 * np.log(2)) / (1 + (2 * (x - z) / widthL)**2) ---> 19 integration = integrate.quad(voigt, -np.inf, np.inf)[0] 20 return integration 21 ~\Anaconda3\lib\site-packages\scipy\integrate\quadpack.py in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst) 339 if weight is None: 340 retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit, --> 341 points) 342 else: 343 retval = _quad_weight(func, a, b, args, full_output, epsabs, epsrel, ~\Anaconda3\lib\site-packages\scipy\integrate\quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points) 448 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit) 449 else: --> 450 return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit) 451 else: 452 if infbounds != 0: TypeError: only size-1 arrays can be converted to Python scalars

該当のソースコード

python

import numpy as np from scipy import integrate from scipy.optimize import curve_fit import math import pandas as pd Eins = 2.01 * 10**8 Lorentzbroad = Eins / 2 / math.pi widthL = Lorentzbroad / 10**9 # フィッティング用データの宣言 df = pd.read_csv('book1.csv') array_x=np.array(df['t']) array_y=np.array(df['y']) def func(x, param1, param2): def voigt(z): return param1 * 0.8256 / np.pi**(3/2) / param2 / widthL * np.exp((-1) * (2 * z / param2)**2 * np.log(2)) / (1 + (2 * (x - z) / widthL)**2) integration = integrate.quad(voigt, -np.inf, np.inf)[0] return integration p0 = 0.5, 0.5 popt, pcov = curve_fit(func, array_x, array_y, p0)

試したこと

補足情報(FW/ツールのバージョンなど)

python3 Anaconda3

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

meg_

2021/01/02 11:08

・コードは「コードの挿入」で記入しましょう。 ・エラーメッセージは全文掲載しましょう。
voigt

2021/01/03 03:00

2点修正いたしました。 宜しくお願いいたします。
meg_

2021/01/03 04:09

エラーは「integration = integrate.quad(voigt, -np.inf, np.inf)[0]」で発生していますね。 未定義の変数(x)があるのとbook1.csvのデータが不明の為検証は出来ませんが、curve_fitを使う前の不具合ですね。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

関数

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

Python

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