« 溶けた? 焼けた? | トップページ | レターパックプラスに「航空輸送禁止」のシール »

2020年1月14日 (火)

メモ:awk(gawk)で「arcsin」

※エクセルでの文章はキライ!
エクセルで図と文を混ぜて書いて「ハイ、これが仕様書」っと渡させるとちょいとイライラします。
そんなときは「こちらの環境が悪いのか見にくいのでpdfにして送り直してちょ」と返答するようにしています。
まぁ↑は置いておいて・・・

数式処理の確認も、エクセルを使うと簡単にグラフ化できたりと便利なのは間違いないんですが、私の場合、「あまりしたくない感」が勝ってしまいます。
そんな場合、何を使うかというと「awk(gawk)」。

テキストエディターでスクリプトを書いて、コマンドプロンプトで実行。
リダイレクトで結果をテキストファイルに。
グラフ化したいなら、その結果をエクセルに食わせるという具合。

先日のこと、逆三角関数arcsin、arccosを使った処理の検証をしようとしたところ、・・・awk(gawk)には「asin()、acos()」関数は実装されていなかった。・・・あれま。

三角関数sin、cos、atan2、それにsqrtは実装されてますんで、これらを使ってどうにかしなくちゃなりません。
三角関数の変換式を検索しながら、awk(gawk)に関連付けて探すと、発見!
これ↓。
function asin(x) { return atan2(x, sqrt(1-x*x)) }
function acos(x) { return atan2(sqrt(1-x*x), x) }

asin()とacos()が得られました。
簡単にテスト。

BEGIN{
 PAI = atan2(0, -1)  # パイは数字指定じゃなくatan2で
 for(i=-1;i<+1;i+=0.1){ #-1~+1を0.1ピッチで
  printf("%+4.1f %+7.2f %+7.2f\n",
    i, asin(i)*180/PAI, acos(i)*180/PAI);
 }
}
function asin(x) { return atan2(x, sqrt(1-x*x)) }
function acos(x) { return atan2(sqrt(1-x*x), x) }

で、その結果
-1.0 -90.00 +180.00
-0.9 -64.16 +154.16
-0.8 -53.13 +143.13
-0.7 -44.43 +134.43
-0.6 -36.87 +126.87
-0.5 -30.00 +120.00
-0.4 -23.58 +113.58
-0.3 -17.46 +107.46
-0.2 -11.54 +101.54
-0.1 -5.74 +95.74
-0.0 -0.00 +90.00
+0.1 +5.74 +84.26
+0.2 +11.54 +78.46
+0.3 +17.46 +72.54
+0.4 +23.58 +66.42
+0.5 +30.00 +60.00
+0.6 +36.87 +53.13
+0.7 +44.43 +45.57
+0.8 +53.13 +36.87
+0.9 +64.16 +25.84
+1.0 +90.00 +0.00

 

|

« 溶けた? 焼けた? | トップページ | レターパックプラスに「航空輸送禁止」のシール »

電子工作」カテゴリの記事

AWK(GAWK)」カテゴリの記事

コメント

こんにちは。
いつも楽しく読ませていただいています。
gawkはテキスト処理に優れているって紹介されることが多いですけど、計算も得意なんですよね。
個人的には、思いついたらすぐに書き始められる「気安さ」が一番のアピールポイントだと思います。
これからもgawkネタ楽しみにしています。

投稿: mfi | 2020年1月25日 (土) 20時02分

つい・・・行末に「;」を書きたくなるわけでして。

GAWK、ほんとに便利。

投稿: 居酒屋ガレージ店主(JH3DBO) | 2020年1月27日 (月) 11時09分

コメントを書く



(ウェブ上には掲載しません)




« 溶けた? 焼けた? | トップページ | レターパックプラスに「航空輸送禁止」のシール »