2016-04-11 11 views
0

I i1 den n gider formülChebyshev düğümleri Haskell'e

x_i = 0.5*((b+a) + (b-a)*cos((2*i-1)*pi)/(2*n)) tarafından verilen a ve b arasında n Chebyshev düğümleri, hesaplamak için Haskell kullanmak istiyorum.

şimdiye kadar kosinüs biraz üzerinde duruldu ve ortaya attı adres:

map (b-a)/(2*n)*cos (map (*pi) (map (-1) (map (*2) [1..n]))) 

Ancak bu gibi geliyor bana çok dolambaçlı ve bu dili öğrenmek için ilk motivasyon sunmalarıdır olduğu göz önüne alındığında sıkıcı Matematiksel olarak arkadaşça ol.

Benim yaklaşımım temel olarak yanlıştır ve kodumu çok daha akıllı ve daha net hale getirmenin yolları olabilir mi? matlab içinde

böyle sadece iki satır ile yeterli olacaktır:

k = (1:n)'; 
x = 0.5*((b+a) + (b-a)*cos(((2*k-1)*pi)./(2*n))); 

Teşekkür!

cevap

4

Her zamanki

cheb a b n k = 0.5*(b+a) + 0.5*(b-a)*cos((2*k-1)*pi/(2*n)) 

gibi terimleri tanımlamak ve, değerlendirme sadece özetliyor olan n terimlerinin bir listesini verecektir

chebfun a b n = map (cheb a b n) [1..n] 

bu şekilde işlevini tanımlayabilirsiniz.

1

Liste kavramasını kullanın.

[ 0.5*((b+a) + (b-a)*cos((2*i-1)*pi/(2*n))) | i <- [1..n] ] 

(Ben senin parenthesization bir hata düzeltildi.)

İlgili konular