2016-09-11 7 views
-1

制限値20の後に正弦波の振幅を拡大するために、以下のコードを使用しています。ここでは、下の図を参照してください。単一プロットウィンドウの図に記載されている出力が必要です(サブプロット経由ではありません)。私は、周波数スケーリングではなく、振幅スケーリングだけを必要とします。正弦波のスケーリングをある値まで制限する方法

import matplotlib.pyplot as plt 
import numpy as np 

Limit=20 

x=np.linspace(-20,20,400) 
y=np.sin(x) 
plt.plot(x,y) 

y[(y<=Limit)] = y*0.5 
plt.plot(x,y) 

plt.grid() 
plt.show() 

enter image description here

+2

示すように、あなたはプロットをしたい場合は、お使いのxの値は0から40までではないでしょうか?また、ある_y_値の範囲内ではなく、特定の_x_値の前にすべてをスケーリングしたいので、あなたの条件が 'y [x <= Limit]'であるべきではないでしょうか? – Praveen

+0

説明が図と一致しません。 xとyの両方の制限が間違っています。また、スケーリングだけの場合は、ラインが20時にすぐに降下するのはなぜですか?スケーリングはそれをしません。 –

+0

限界値を10に変更してチェックすることはできますが、振幅のスケーリングを制限することはできません。 – HEMS

答えて

1

あなたはこのを探しています:

import matplotlib.pyplot as plt 
import numpy as np 

x_limit = 20 

x = np.linspace(0,40,400) 
y = np.sin(x) 
y[x <= x_limit] *= 0.5 
plt.plot(x,y) 

plt.grid() 
plt.show() 

私は、yではなくxに制限を適用したかったと思います。

enter image description here

+0

:出力は上の図に記載されていません – HEMS

+0

@HEMS:うわー。数字の範囲が間違っていた – Eric

+0

:絶対にyes.Thisはx軸のx_limitを動的にシフトしている間でも振幅スケーリングの要件を満たしています。 – HEMS

0

次のようにそれは比較的簡単に行うことができます。

生成
import matplotlib.pyplot as plt 
import numpy as np 

Limit=20 

x=np.linspace(-20,20,4000) 
y=np.sin(x) 
plt.plot(x[x<0],y[x<0], lw=2, color='k') 

y[(y<=Limit)] = y*0.5 
plt.plot(x[x>0],y[x>0], lw=2, color='k') 

plt.grid() 
plt.show() 

Output from the example code

+0

制限がゼロのときに2つの波の間がスムーズに遷移しています。これは良いことです。x軸[-10または+10]のゼロのいずれかの側に限界のダイナミックなシフトがある場合、正弦波に不連続性がありますうまくいきません。 – HEMS

関連する問題