前回の説明を読めば「iPhoneアプリ開発、号外 IBMのSwiftサイト」のサンプルとして書いた、階乗計算のプログラムもわかるんじゃないかと思われ。
1! 2! 3! 4! 5! ・・・
↓ループを使った階乗計算例
http://swift.sandbox.bluemix.net/#/repl/59479547ea3ae2065baec60f
問題はその後の、マクローリン展開を使ったsin値の計算プログラムですな。
http://eleking.net/math/m-trigonometric/mt-trigonometric.html
↓最初、wikiを見ましょうと書こうと思ったけど…
https://ja.wikipedia.org/wiki/三角関数
ムズイわっ!
まあ、そんなわけでsin値です。こいつはマクローリン展開で以下のようなxの累乗と、階乗を使った計算の和で計算できるんですよ。
↓sin値のマクローリン展開(テイラー展開の一種)については、このページがわかりやすいような…
ただ三角関数の微分についてなんかは説明してないので、知らないと読んでで目が点になるかも
http://www.yamamo10.jp/yamamoto/lecture/2006/3E/2nd/html/node2.html
といっても、私もテイラー展開は、なんとなくそうなんだ〜て思うレベルですが、とにかくsin値は上の式で求まるらしい。
けど、実際のとこどうなんだよっと、確かめたいけど、こんな式計算するのめんどくせーよっ、ということでプログラムで実践しますた。それがこの前のプログラム。
↓マクローリン展開を使ったsin値の計算例(上で作った累乗、階乗関数を利用)
http://swift.sandbox.bluemix.net/#/repl/59479a3eea3ae2065baec614
結果、合ってる…
すげーよ、テイラー、あんたすげーよ。
power、factorial関数はそれぞれ、ループを使った累乗計算例、階乗計算例で作った関数をコピペして使ってます。
http://swift.sandbox.bluemix.net/#/repl/594793c6ea3ae2065baec60d
http://swift.sandbox.bluemix.net/#/repl/59479547ea3ae2065baec60f
ちなみにループ使って、0度から90度までのsin値を求めてるんですが、テイラー展開でsinの引数xとして指定する角度の単位は1周を360分割する度数法ではなく、弧度法のラジアンが前提です。
↓ラジアン
https://ja.wikipedia.org/wiki/ラジアン
なので、度数法単位から弧度法単位に変換する関数も作ってます。
// angleで指定される360度単位の角度をラジアン単位に変換
func rad(angle:Double) ->Double {
return 2.0 * 3.14 * (angle / 360.0)
}
if (k % 2) == 1 { // kが奇数の時だけ計算
let factorial_k = factorial(x:k) // k!
let power_x = power(base:x, exponent:k) // xのk乗
result += Double(sign) * power_x / factorial_k
sign *= -1 // 符号反転
}
let factorial_k = factorial(x:k) // k!
let power_x = power(base:x, exponent:k) // xのk乗
result += Double(sign) * power_x / factorial_k
sign *= -1 // 符号反転
let factorial_k = factorial(x:k)
let factorial_k = factorial(x:k)
factorial_k = 0.0
result += Double(sign) * power_x / factorial_k
for k in 1...15 {
import Foundation
https://opensource.apple.com/source/Libm/Libm-315/Source/ARM/sin_freeBSD.c
https://opensource.apple.com/source/Libm/Libm-315/Source/ARM/k_sin_freeBSD.c.auto.html
↓ただし、こっちの方がソースを追いやすい
http://www.aoc.nrao.edu/php/tjuerges/ALMA/RTOS-3.3/api/s__sin_8c.html




























