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

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

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

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

Q&A

解決済

1回答

805閲覧

python ユークリッド距離を使って、近似誤差をグラフに出力する

tiroha

総合スコア109

Python

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

0グッド

0クリップ

投稿2020/11/13 01:09

編集2020/11/16 09:22

前回と似たような質問ですいません。
元の関数とフ―リエ級数展開した式の近似誤差をグラフに出力したいです。
数式の間違いがあり、それを正したところ、また間違ったグラフが出力されるようになってしまいました。
以前、回答をして下さった方のプログラムを少し変更しました。
def func_f(t)のところは特に間違いはないと思います。
間違いがあるとすると、def func_g(t,k)の部分と思います。フ―リエ級数展開した式は確認して確実にあっています。(return (-1)(1.0-np.power(-1,k))(np.sin(knp.pit)/(k*np.pi)))
for文のインデントなど色々試しましたが、どれもうまくいきません。
~追記~
func_g(t,k)のところを少し変えました。
グラフの形は理想に近付きましたが、まだ少し違います。

python

1# -*- coding: utf-8 -*- 2import numpy as np 3import matplotlib.pyplot as plt 4 5# 変換元関数 6def func_f(t): 7 def func_f_element(t): 8 if -np.pi <= t < 0: 9 return 1 # func_f(t) = t 10 if 0 <= t < np.pi: 11 return 0 12 f = np.vectorize(func_f_element) 13 return f(t) 14 15# 変換先関数 K項まで展開 16def func_g(t, k): 17 return (-1)*(1.0-np.power(-1,k))*(np.sin(k*np.pi*t)/(k*np.pi)) 18 s = (1.0/2.0) 19 for k in range(1,K): 20 s = s + func_g(t,k+1) 21 return s 22 23 24def diff(K): 25 dt = 0.01 26 start = -1.0*np.pi 27 end = 1.0*np.pi 28 t = np.arange(start, end, dt) 29 return np.linalg.norm(func_f(t)-func_g(t, K), ord=2) 30 31# maxK = np.arange(-np.pi, np.pi, 0.01).size 32maxK = 100 33K = np.arange(1,maxK, 1) 34r = [] 35for k in range(1,maxK): 36 r.append( diff(k) ) 37 38fig=plt.figure(0) 39plt.plot (K, r, linewidth=1.0, color="r",linestyle="solid",label="$ f(t)=1 or 0 $") 40plt.xlabel("$K$-th approximation", fontsize=14, color="black") 41plt.ylabel("error", fontsize=14) 42plt.grid() 43plt.legend() 44plt.show() 45fig.savefig('fig323.pdf') 46 47

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

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

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

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

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

guest

回答1

0

自己解決

インデントに気を付ける

投稿2021/08/29 09:09

tiroha

総合スコア109

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問