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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

1158閲覧

複数の引数による計算

runrun5

総合スコア21

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/05/24 01:40

x=-4,-3,...,3,4の9点で最小二乗法を用いてフィッティングを行うプログラムを組みました。
xの刻み幅を1だけでなく0.1,0.01の場合もまとめて計算して、それぞれグラフを作成したいのですが、関数を使ってやるやり方がいまいち分かりませんのでご回答いただけると幸いです。
また、得られた関数の係数を表示する方法も教えていただけたら幸いです。

python

1import numpy as np 2import matplotlib.pyplot as plt 3 4a, b, c =1,2,2 5def f(x): 6 return a*x**2+ b*x+c 7 8x = np.arange(-4,5) 9y = f(x) 10noise = np.random.normal(loc=0,scale=3,size=len(x)) 11 12n=3 13X = np.zeros((len(x),n)) 14X[:,0] = 1 15X[:,1] = x 16X[:,2] = x**2 17(param,residuals,rank,s) = np.linalg.lstsq(X,y+noise) 18 19plt.title("least square") 20plt.xlabel("x") 21plt.ylabel("y") 22plt.scatter(x,y+noise,color="blue") 23plt.plot(x,param[0]*X[:,0]+param[1]*X[:,1]+param[2]*X[:,2],color="red")

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

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

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

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

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

stdio

2019/05/24 02:23 編集

配列で返すか辞書で返すかすれば? どこが分からないのかもう少し具体的に教えてくれると助かります。
runrun5

2019/05/24 02:25

説明不足で申し訳ないです 今はxの刻み幅が1になっているのですが、刻み幅を0.1,0.01の場合も同じプログラムでまとめて計算して、それぞれを別のグラフで表示させて、フィッテングしたグラフの係数を表示させたいといった感じです
guest

回答1

0

ベストアンサー

単純に for step in [1,0.1,0.01]: にてループして3回同じ処理をすると良いのではないでしょうか

Python

1import numpy as np 2import matplotlib.pyplot as plt 3 4def f(x, param=(1,2,2)): 5 return param[0]*x**2 + param[1]*x + param[2] 6 7fig, ax = plt.subplots(1,3,figsize=(10,3)) 8for i, step in enumerate([1,0.1,0.01]): 9 x = np.arange(-4, 5, step) 10 y = f(x) 11 noise = np.random.normal(loc=0,scale=3,size=len(x)) 12 13 n=3 14 A = np.zeros((len(x),n)) 15 A[:,0] = x**2 16 A[:,1] = x 17 A[:,2] = 1 18 param,residuals,rank,s = np.linalg.lstsq(A,y+noise) 19 20 21 ax[i].set_title("least square (STEP={})".format(step)) 22 ax[i].set_xlabel("x") 23 ax[i].set_ylabel("y") 24 ax[i].scatter(x,y+noise,color="blue") 25 tx = np.linspace(-4,5,1000) 26 ax[i].plot(tx, f(tx, param), color='red') 27plt.savefig('out.png') 28plt.show()

イメージ説明

投稿2019/05/24 02:56

magichan

総合スコア15898

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

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

takasima20

2019/05/24 08:54

#横から失礼します。 php の foreach ループと並びが逆なんですねえ。 ループ内で使う変数が前にきてるのは 参照しやすくていいかも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問