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

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

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

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

Q&A

1回答

515閲覧

python フーリエ級数の計算

python_111

総合スコア1

Python

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

0グッド

0クリップ

投稿2023/03/27 05:00

実現したいこと

フーリエ級数を計算したいです
Ak=2/NΣ[m=0]N-1 (Xmcos(2pikm/N))
k=0,1,・・・, N/2-1, N/2

Bk=2/NΣ[m=0]N-1 (Xmsin(2pikm/N))
k=1,・・・,N/2-1

Xm=A0/2+Σ[m=0] (N-1)/2 (Akcos(2pikm/N)+Bksin(2pikm/N))

前提

CSVファイルを読み込んで,Pythonでフーリエ級数展開のプログラムを作っています。
初心者なりに,ファイルの読み込みは出来たのですが,フーリエ級数の計算が出来ていません。
ご教授して頂けると幸いです。

該当のソースコード

Python

1df = pd.read_csv("1.csv") 2fun = df.iloc[:, 0] 3 4R=[] 5AK=0 6A=0 7N1=len(fun) 8N1_2=int((N1-1)/2) 9print(N1_2) 10m=0 11k=0 12 13for m in range(N1-1): 14 for k in range(N1_2): 15 if k < N1_2: 16 Ak=(2/N1)*fun[m]*np.cos(2*np.pi*k*m/N1) 17 A=Ak+A 18 k=k+1 19 elif k == N1_2: 20 R.append(A) 21 m=m+1 22 k=0 23 A=0 24 print(A) 25df=pd.DataFrame(R) 26df.to_csv("result_A.csv",sep=',',encoding='utf-8')

試したこと

if文等でプログラムを書き換えてもうまくいかないため,ご教授して頂けると幸いです

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

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

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

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

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

python_111

2023/03/27 08:29

回答ありがとうございます この場合だと,リストに入れるのは,整数にしなければいけないのでしょうか
guest

回答1

0

フーリエ級数の計算を行うプログラムについて、コードを確認し、修正したものを以下に示します。二重のforループとif文の使用方法が問題でした。また、AkとBkを計算する部分を追加しました。

python

1import pandas as pd 2import numpy as np 3 4df = pd.read_csv("1.csv") 5fun = df.iloc[:, 0] 6 7N = len(fun) 8N_half = N // 2 9 10A = np.zeros(N_half + 1) 11B = np.zeros(N_half) 12 13for k in range(N_half + 1): 14 for m in range(N): 15 if k == 0: 16 A[k] += (2 / N) * fun[m] 17 else: 18 A[k] += (2 / N) * fun[m] * np.cos(2 * np.pi * k * m / N) 19 B[k] += (2 / N) * fun[m] * np.sin(2 * np.pi * k * m / N) 20 21Xm = [] 22for m in range(N): 23 xm = A[0] / 2 24 for k in range(1, N_half + 1): 25 xm += A[k] * np.cos(2 * np.pi * k * m / N) + B[k] * np.sin(2 * np.pi * k * m / N) 26 Xm.append(xm) 27 28df_result = pd.DataFrame(Xm) 29df_result.to_csv("result_A.csv", sep=',', encoding='utf-8') 30

投稿2023/03/27 08:45

matsubokkuri

総合スコア744

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

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

python_111

2023/04/04 01:27

何度も申し訳ございません フーリエ級数展開の性質上、funとXmが一致するはずなのですが、一致しません。 ご教授願います
matsubokkuri

2023/04/04 01:57

11行目を `B = np.zeros(N_half + 1)` にしたらどうでしょう?
python_111

2023/04/04 01:59

ご返信ありがとう御座います 既に試したのですが、うまく行きません
python_111

2023/04/04 02:54

funとXmは、交互に符号を変えながら一定の差があります お手数をおかけしますが、よろしくお願いします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問