2017-04-11 5 views
0

私はプログラミングに慣れていないし、私自身のforループを書く方法について少し不明である。これは私が欲しいものですか? アレイを作成する最良の方法

は、私たちは nポイント x0=0,...,xn−1=1に間隔 [0,1]を細分化してみましょう。

x_arrayを u_arrayはこれらの点でuの離散値を含んn点の座標を含む:

は、二つのnumpyの配列を返す関数compute_discrete_u(epsilon, n)を書きます。

u(x)=sin(1x+ϵ) 

ありがとうございます!

+1

ようこそStackOverflowへ。あなたが参照している言語にタグを付けてください。あなたはそのように答えを得る可能性がより高いです –

+1

"2 numpy配列"から私はPythonを推測します:) –

+1

@APとして。より適切なタグでより多くの回答を得ることができます。また、問題を自分で解決するために時間と労力をかけていることを示す詳細を含めると、より良い回答を得られる可能性があります。特に、何を試しましたか?結果は何でしたか?彼らはあなたが期待した結果はどうでしたか? –

答えて

0

まず、forループはまったく必要ありません。 numpyを使用したいので、numpyが構築しているベクトル化された操作を使用できます。

ここでは、文字通り(あなたはあなたの問題を解決する方法と最も可能性が高いではない)を求めている機能です。

# Do NOT use this. 
import numpy as np 

def compute_discrete_u(epsilon, n): 
    x = np.linspace(0, 1, n) 
    return x, np.sin(x + expsilon) 

かなり厄介なAPIです。デザインのポイント・オブ・ビューでは、関数内で2つの責任を混合されています

  1. 数学関数に基づいてuベクトルを計算する特定のxベクトル
  2. を生成します。

複雑さと再利用性の理由から、これを行うべきではありません。後で不均一なxが必要な場合はどうすればよいですか?

だからここにあなたが何をすべきかです:

import numpy as np 

def compute_u(x, epsilon): 
    return np.sin(x + epsilon) 

x = np.linspace(0, 1, num=101) 
u = compute_u(x, epsilon=1e-3) 

機能は単なる数学関数であるので、これは理解するのがより簡単です。さらに、好きなx配列(または単一のfloat)に対してuを計算することもできます。別の場所でcompute_uが必要ない場合は、完全に削除して書き込みすることもできます。u = np.sin(x + epsilon)

+0

これは非常に役に立ちます、ありがとうございます! – Kate

関連する問題