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

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

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

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

Python

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

Q&A

解決済

1回答

1490閲覧

Python NumPy 三角波の生成の仕方が知りたいです

huta_88

総合スコア1

NumPy

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

Python

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

0グッド

0クリップ

投稿2022/10/13 12:07

前提

ここに質問の内容を詳しく書いてください。
イメージ説明
この式を三角波で生成したいです。

実現したいこと

xn=の後が知りたい

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

import numpy as np import math import matplotlib.pyplot as plt t = np.linspace(0,3,400)#0~3秒間の時間を400に分割して配列tを生成 x1 = 8/(1**2*np.pi)*np.sin(2*np.pi*1*t) x3 = 8/(1**2*np.pi)*np.sin(2*np.pi*1*t)- 8/(3**2*np.pi)*np.sin(2*np.pi*1*t) x5 = 8/(1**2*np.pi)*np.sin(2*np.pi*1*t)- 8/(3**2*np.pi)*np.sin(2*np.pi*3*t)+ 8/(5**2*np.pi)*np.sin(2*np.pi*5*t) xn=0 #n個のsin波を重ね合わせる前にリセット n=100 #重ね合わせるn個の回数を指定 c=1 for i in range(1,n,2): #1~nまで(2つ飛ばし)のsin波の重ね合わせを行う xn=     #ここの部分の一行が知りたい。 plt.title("TRIANGLE WAVE") plt.plot(t, x1, color=(1.0,0.0,0.0), linewidth=1.0, label="n=1") plt.plot(t, x3, color=(0.0,1.0,0.0), linewidth=1.0, label="n=3") plt.plot(t, x5, color=(0.0,0.0,1.0), linewidth=1.0, label="n=5") plt.plot(t, xn, color=(1.0,0.0,1.0), linewidth=1.0, label="n=100") plt.legend() plt.xlabel('t') plt.ylabel('x(t)') plt.show()

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

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

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

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

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

guest

回答1

0

ベストアンサー

for内のxnは+=で加算していく必要があります。
加算項は式が書いてある画像の2番めのものを素直に実装すれば大丈夫です。
また、xnを0ではなく0 * tで初期化しておく必要があります。

以下実装例です。

python

1import numpy as np 2import matplotlib.pyplot as plt 3 4 5t = np.linspace(0, 3, 400) # 0~3秒間の時間を400に分割して配列tを生成 6 7 8x1 = 8 / (1 ** 2 * np.pi) * np.sin(2 * np.pi * 1 * t) 9x3 = 8 / (1 ** 2 * np.pi) * np.sin(2 * np.pi * 1 * t) - 8 / (3 ** 2 * np.pi) * np.sin( 10 2 * np.pi * 1 * t 11) 12x5 = ( 13 8 / (1 ** 2 * np.pi) * np.sin(2 * np.pi * 1 * t) 14 - 8 / (3 ** 2 * np.pi) * np.sin(2 * np.pi * 3 * t) 15 + 8 / (5 ** 2 * np.pi) * np.sin(2 * np.pi * 5 * t) 16) 17xn = 0 * t # n個のsin波を重ね合わせる前にリセット 18n = 100 # 重ね合わせるn個の回数を指定 19for i in range(1, n, 2): # 1~nまで(2つ飛ばし)のsin波の重ね合わせを行う 20 xn += 8 / (i ** 2 * np.pi) * np.sin(i * np.pi / 2) * np.sin(2 * np.pi * i * t) 21 22 23plt.title("TRIANGLE WAVE") 24plt.plot(t, x1, color=(1.0, 0.0, 0.0), linewidth=1.0, label="n=1") 25plt.plot(t, x3, color=(0.0, 1.0, 0.0), linewidth=1.0, label="n=3") 26plt.plot(t, x5, color=(0.0, 0.0, 1.0), linewidth=1.0, label="n=5") 27plt.plot(t, xn, color=(1.0, 0.0, 1.0), linewidth=1.0, label="n=100") 28plt.legend() 29plt.xlabel("t") 30plt.ylabel("x(t)") 31plt.show() 32

イメージ説明

投稿2022/10/13 12:40

T_F

総合スコア74

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

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

huta_88

2022/10/14 01:04

+=で加算させてあげればいいのですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問