三角関数の近似

     三角関数の近似について考えてみた。
     通常であればマクローリン展開で近似すれば良いのだけど、マクローリン展開の式は覚えてもすぐに忘れてしまう。そんなときにテキトーに近似してみたらどうかなと考えてみた。
     角度の表記について、普段はrad(radian)を使うのだけど、今回は見やすさを考慮して°(degree)を使った。

    マクローリン展開


    正弦関数のマクローリン展開

     MathJaxを利用すると数式をHTMLで記述することができるのだけど、問題が2点ある。はてなでちゃんと表示できるか不明であることと、僕自身がLaTeXを扱えないという問題。前者は試してみればわかるし、そもそもTableで囲ってしまえば普通に表記できることは分かっているので、主に後者の問題である。HTMLとかエクセルを勉強した時みたいにちょこっとずつコマンドを覚えていけばいいかなと思ったりするので、今後気が向いたら少し試してみようと思う。
     取り敢えず今回は従来通り画像を貼り付けることにした。
     三角関数は角度が0°、30°、45°、60°90°の値を覚えているのでその各値の間を均等に分割して近似値としようと考えた。すると、例えば0~30°の間でsin(x)を求めようとすると、

    このように表記できる。名前がないと不便なので、線形近似とでも読んでおく。
     こうして90°まで計算してみた。ついでに誤差も出してみた。

    角度(degree) 角度(rad) sin 近似値 誤差 誤差(%)
    0 0 0 0 0 0
    1 0.0175 0.0175 0.0167 0.0008 4.5022
    2 0.0349 0.0349 0.0333 0.0016 4.4876
    3 0.0524 0.0523 0.0500 0.0023 4.4634
    4 0.0698 0.0698 0.0667 0.0031 4.4294
    5 0.0873 0.0872 0.0833 0.0038 4.3857
    6 0.1047 0.1045 0.1000 0.0045 4.3323
    7 0.1222 0.1219 0.1167 0.0052 4.2691
    8 0.1396 0.1392 0.1333 0.0058 4.1960
    9 0.1571 0.1564 0.1500 0.0064 4.1132
    10 0.1745 0.1736 0.1667 0.0070 4.0205
    11 0.1920 0.1908 0.1833 0.0075 3.9179
    12 0.2094 0.2079 0.2000 0.0079 3.8053
    13 0.2269 0.2250 0.2167 0.0083 3.6828
    14 0.2443 0.2419 0.2333 0.0086 3.5501
    15 0.2618 0.2588 0.2500 0.0088 3.4074
    16 0.2793 0.2756 0.2667 0.0090 3.2545
    17 0.2967 0.2924 0.2833 0.0090 3.0914
    18 0.3142 0.3090 0.3000 0.0090 2.9180
    19 0.3316 0.3256 0.3167 0.0089 2.7341
    20 0.3491 0.3420 0.3333 0.0087 2.5399
    21 0.3665 0.3584 0.3500 0.0084 2.3350
    22 0.3840 0.3746 0.3667 0.0079 2.1195
    23 0.4014 0.3907 0.3833 0.0074 1.8933
    24 0.4189 0.4067 0.4000 0.0067 1.6563
    25 0.4363 0.4226 0.4167 0.0060 1.4083
    26 0.4538 0.4384 0.4333 0.0050 1.1492
    27 0.4712 0.4540 0.4500 0.0040 0.8790
    28 0.4887 0.4695 0.4667 0.0028 0.5975
    29 0.5061 0.4848 0.4833 0.0015 0.3045
    30 0.5236 0.5000 0.5000 0.0000 0.0000
    31 0.5411 0.5150 0.5138 0.0012 0.2390
    32 0.5585 0.5299 0.5276 0.0023 0.4350
    33 0.5760 0.5446 0.5414 0.0032 0.5908
    34 0.5934 0.5592 0.5552 0.0040 0.7090
    35 0.6109 0.5736 0.5690 0.0045 0.7917
    36 0.6283 0.5878 0.5828 0.0049 0.8409
    37 0.6458 0.6018 0.5966 0.0052 0.8583
    38 0.6632 0.6157 0.6105 0.0052 0.8454
    39 0.6807 0.6293 0.6243 0.0051 0.8035
    40 0.6981 0.6428 0.6381 0.0047 0.7337
    41 0.7156 0.6561 0.6519 0.0042 0.6372
    42 0.7330 0.6691 0.6657 0.0034 0.5149
    43 0.7505 0.6820 0.6795 0.0025 0.3674
    44 0.7679 0.6947 0.6933 0.0014 0.1956
    45 0.7854 0.7071 0.7071 0.0000 0.0000
    46 0.8029 0.7193 0.7177 0.0016 0.2278
    47 0.8203 0.7314 0.7283 0.0031 0.4181
    48 0.8378 0.7431 0.7389 0.0043 0.5725
    49 0.8552 0.7547 0.7495 0.0052 0.6923
    50 0.8727 0.7660 0.7601 0.0060 0.7786
    51 0.8901 0.7771 0.7707 0.0065 0.8328
    52 0.9076 0.7880 0.7813 0.0067 0.8556
    53 0.9250 0.7986 0.7919 0.0068 0.8480
    54 0.9425 0.8090 0.8025 0.0066 0.8107
    55 0.9599 0.8192 0.8131 0.0061 0.7446
    56 0.9774 0.8290 0.8236 0.0054 0.6502
    57 0.9948 0.8387 0.8342 0.0044 0.5281
    58 1.0123 0.8480 0.8448 0.0032 0.3787
    59 1.0297 0.8572 0.8554 0.0017 0.2026
    60 1.0472 0.8660 0.8660 0.0000 0.0000
    61 1.0647 0.8746 0.8705 0.0041 0.4720
    62 1.0821 0.8829 0.8750 0.0080 0.9050
    63 1.0996 0.8910 0.8794 0.0116 1.3001
    64 1.1170 0.8988 0.8839 0.0149 1.6584
    65 1.1345 0.9063 0.8884 0.0180 1.9809
    66 1.1519 0.9135 0.8928 0.0207 2.2686
    67 1.1694 0.9205 0.8973 0.0232 2.5224
    68 1.1868 0.9272 0.9018 0.0254 2.7429
    69 1.2043 0.9336 0.9062 0.0274 2.9309
    70 1.2217 0.9397 0.9107 0.0290 3.0871
    71 1.2392 0.9455 0.9151 0.0304 3.2119
    72 1.2566 0.9511 0.9196 0.0314 3.3059
    73 1.2741 0.9563 0.9241 0.0322 3.3696
    74 1.2915 0.9613 0.9285 0.0327 3.4033
    75 1.3090 0.9659 0.9330 0.0329 3.4074
    76 1.3265 0.9703 0.9375 0.0328 3.3822
    77 1.3439 0.9744 0.9419 0.0324 3.3279
    78 1.3614 0.9781 0.9464 0.0317 3.2446
    79 1.3788 0.9816 0.9509 0.0308 3.1327
    80 1.3963 0.9848 0.9553 0.0295 2.9921
    81 1.4137 0.9877 0.9598 0.0279 2.8228
    82 1.4312 0.9903 0.9643 0.0260 2.6250
    83 1.4486 0.9925 0.9687 0.0238 2.3986
    84 1.4661 0.9945 0.9732 0.0213 2.1434
    85 1.4835 0.9962 0.9777 0.0185 1.8595
    86 1.5010 0.9976 0.9821 0.0154 1.5465
    87 1.5184 0.9986 0.9866 0.0120 1.2043
    88 1.5359 0.9994 0.9911 0.0083 0.8328
    89 1.5533 0.9998 0.9955 0.0043 0.4314
    90 1.5708 1.0000 1.0000 0.0000 0.0000


     グラフを見て分かる通り、60~90°の部分で誤差が大きくなる。とは言っても最大で0.0329、割合にして3.4%なので実用上はそう問題ないかなと思う。
     ついでに誤差を比較するためにマクローリン展開も計算してみた。

    角度(degree) 角度(rad) 1 誤差 誤差(%) 3 誤差 誤差(%) 5 誤差 誤差(%)
    0 0 0 0 0 0 0 0 0 0 0
    1 0.0175 0.0175 0.0000 0.0051 0.0175 0.0000 0.0000 0.0175 0.0000 0.0000
    2 0.0349 0.0349 0.0000 0.0203 0.0349 0.0000 0.0000 0.0349 0.0000 0.0000
    3 0.0524 0.0524 0.0000 0.0457 0.0523 0.0000 0.0000 0.0523 0.0000 0.0000
    4 0.0698 0.0698 0.0001 0.0813 0.0698 0.0000 0.0000 0.0698 0.0000 0.0000
    5 0.0873 0.0873 0.0001 0.1270 0.0872 0.0000 0.0000 0.0872 0.0000 0.0000
    6 0.1047 0.1047 0.0002 0.1830 0.1045 0.0000 0.0001 0.1045 0.0000 0.0000
    7 0.1222 0.1222 0.0003 0.2492 0.1219 0.0000 0.0002 0.1219 0.0000 0.0000
    8 0.1396 0.1396 0.0005 0.3257 0.1392 0.0000 0.0003 0.1392 0.0000 0.0000
    9 0.1571 0.1571 0.0006 0.4124 0.1564 0.0000 0.0005 0.1564 0.0000 0.0000
    10 0.1745 0.1745 0.0009 0.5095 0.1736 0.0000 0.0008 0.1736 0.0000 0.0000
    11 0.1920 0.1920 0.0012 0.6170 0.1908 0.0000 0.0011 0.1908 0.0000 0.0000
    12 0.2094 0.2094 0.0015 0.7348 0.2079 0.0000 0.0016 0.2079 0.0000 0.0000
    13 0.2269 0.2269 0.0019 0.8632 0.2249 0.0000 0.0022 0.2250 0.0000 0.0000
    14 0.2443 0.2443 0.0024 1.0021 0.2419 0.0000 0.0030 0.2419 0.0000 0.0000
    15 0.2618 0.2618 0.0030 1.1515 0.2588 0.0000 0.0040 0.2588 0.0000 0.0000
    16 0.2793 0.2793 0.0036 1.3116 0.2756 0.0000 0.0051 0.2756 0.0000 0.0000
    17 0.2967 0.2967 0.0043 1.4825 0.2924 0.0000 0.0065 0.2924 0.0000 0.0000
    18 0.3142 0.3142 0.0051 1.6641 0.3090 0.0000 0.0082 0.3090 0.0000 0.0000
    19 0.3316 0.3316 0.0060 1.8566 0.3255 0.0000 0.0102 0.3256 0.0000 0.0000
    20 0.3491 0.3491 0.0070 2.0600 0.3420 0.0000 0.0126 0.3420 0.0000 0.0000
    21 0.3665 0.3665 0.0082 2.2745 0.3583 0.0001 0.0153 0.3584 0.0000 0.0000
    22 0.3840 0.3840 0.0094 2.5002 0.3745 0.0001 0.0185 0.3746 0.0000 0.0001
    23 0.4014 0.4014 0.0107 2.7371 0.3906 0.0001 0.0221 0.3907 0.0000 0.0001
    24 0.4189 0.4189 0.0121 2.9853 0.4066 0.0001 0.0263 0.4067 0.0000 0.0001
    25 0.4363 0.4363 0.0137 3.2450 0.4225 0.0001 0.0310 0.4226 0.0000 0.0001
    26 0.4538 0.4538 0.0154 3.5163 0.4382 0.0002 0.0364 0.4384 0.0000 0.0002
    27 0.4712 0.4712 0.0172 3.7993 0.4538 0.0002 0.0424 0.4540 0.0000 0.0002
    28 0.4887 0.4887 0.0192 4.0941 0.4692 0.0002 0.0492 0.4695 0.0000 0.0003
    29 0.5061 0.5061 0.0213 4.4009 0.4845 0.0003 0.0568 0.4848 0.0000 0.0003
    30 0.5236 0.5236 0.0236 4.7198 0.4997 0.0003 0.0652 0.5000 0.0000 0.0004
    31 0.5411 0.5411 0.0260 5.0509 0.5147 0.0004 0.0745 0.5150 0.0000 0.0005
    32 0.5585 0.5585 0.0286 5.3944 0.5295 0.0004 0.0848 0.5299 0.0000 0.0006
    33 0.5760 0.5760 0.0313 5.7505 0.5441 0.0005 0.0962 0.5446 0.0000 0.0008
    34 0.5934 0.5934 0.0342 6.1194 0.5586 0.0006 0.1087 0.5592 0.0000 0.0009
    35 0.6109 0.6109 0.0373 6.5011 0.5729 0.0007 0.1225 0.5736 0.0000 0.0011
    36 0.6283 0.6283 0.0405 6.8959 0.5870 0.0008 0.1375 0.5878 0.0000 0.0013
    37 0.6458 0.6458 0.0440 7.3040 0.6009 0.0009 0.1540 0.6018 0.0000 0.0015
    38 0.6632 0.6632 0.0476 7.7256 0.6146 0.0011 0.1719 0.6157 0.0000 0.0018
    39 0.6807 0.6807 0.0514 8.1609 0.6281 0.0012 0.1914 0.6293 0.0000 0.0021
    40 0.6981 0.6981 0.0553 8.6100 0.6414 0.0014 0.2125 0.6428 0.0000 0.0025
    41 0.7156 0.7156 0.0595 9.0733 0.6545 0.0015 0.2354 0.6561 0.0000 0.0029
    42 0.7330 0.7330 0.0639 9.5509 0.6674 0.0017 0.2603 0.6692 0.0000 0.0033
    43 0.7505 0.7505 0.0685 10.0430 0.6800 0.0020 0.2870 0.6820 0.0000 0.0039
    44 0.7679 0.7679 0.0733 10.5500 0.6925 0.0022 0.3159 0.6947 0.0000 0.0045
    45 0.7854 0.7854 0.0783 11.0721 0.7047 0.0025 0.3471 0.7071 0.0000 0.0051
    46 0.8029 0.8029 0.0835 11.6095 0.7166 0.0027 0.3805 0.7194 0.0000 0.0059
    47 0.8203 0.8203 0.0890 12.1625 0.7283 0.0030 0.4165 0.7314 0.0000 0.0067
    48 0.8378 0.8378 0.0946 12.7315 0.7398 0.0034 0.4551 0.7432 0.0001 0.0077
    49 0.8552 0.8552 0.1005 13.3166 0.7510 0.0037 0.4964 0.7548 0.0001 0.0087
    50 0.8727 0.8727 0.1066 13.9183 0.7619 0.0041 0.5407 0.7661 0.0001 0.0099
    51 0.8901 0.8901 0.1130 14.5368 0.7726 0.0046 0.5880 0.7772 0.0001 0.0112
    52 0.9076 0.9076 0.1196 15.1724 0.7830 0.0050 0.6385 0.7881 0.0001 0.0126
    53 0.9250 0.9250 0.1264 15.8256 0.7931 0.0055 0.6925 0.7987 0.0001 0.0142
    54 0.9425 0.9425 0.1335 16.4967 0.8029 0.0061 0.7500 0.8091 0.0001 0.0160
    55 0.9599 0.9599 0.1408 17.1859 0.8125 0.0066 0.8112 0.8193 0.0001 0.0180
    56 0.9774 0.9774 0.1483 17.8939 0.8218 0.0073 0.8764 0.8292 0.0002 0.0201
    57 0.9948 0.9948 0.1562 18.6208 0.8307 0.0079 0.9457 0.8389 0.0002 0.0225
    58 1.0123 1.0123 0.1642 19.3672 0.8394 0.0086 1.0194 0.8483 0.0002 0.0251
    59 1.0297 1.0297 0.1726 20.1334 0.8478 0.0094 1.0976 0.8574 0.0002 0.0280
    60 1.0472 1.0472 0.1812 20.9200 0.8558 0.0102 1.1806 0.8663 0.0003 0.0312
    61 1.0647 1.0647 0.1900 21.7273 0.8635 0.0111 1.2686 0.8749 0.0003 0.0346
    62 1.0821 1.0821 0.1992 22.5559 0.8709 0.0120 1.3619 0.8833 0.0003 0.0384
    63 1.0996 1.0996 0.2086 23.4062 0.8780 0.0130 1.4607 0.8914 0.0004 0.0426
    64 1.1170 1.1170 0.2182 24.2788 0.8847 0.0141 1.5652 0.8992 0.0004 0.0471
    65 1.1345 1.1345 0.2282 25.1743 0.8911 0.0152 1.6758 0.9068 0.0005 0.0520
    66 1.1519 1.1519 0.2384 26.0930 0.8972 0.0164 1.7927 0.9141 0.0005 0.0574
    67 1.1694 1.1694 0.2489 27.0358 0.9029 0.0176 1.9163 0.9211 0.0006 0.0632
    68 1.1868 1.1868 0.2596 28.0031 0.9082 0.0190 2.0467 0.9278 0.0006 0.0696
    69 1.2043 1.2043 0.2707 28.9955 0.9132 0.0204 2.1845 0.9343 0.0007 0.0765
    70 1.2217 1.2217 0.2820 30.0138 0.9178 0.0219 2.3298 0.9405 0.0008 0.0840
    71 1.2392 1.2392 0.2937 31.0586 0.9220 0.0235 2.4831 0.9464 0.0009 0.0922
    72 1.2566 1.2566 0.3056 32.1306 0.9259 0.0252 2.6448 0.9520 0.0010 0.1010
    73 1.2741 1.2741 0.3178 33.2306 0.9294 0.0269 2.8151 0.9574 0.0011 0.1106
    74 1.2915 1.2915 0.3303 34.3592 0.9325 0.0288 2.9946 0.9624 0.0012 0.1209
    75 1.3090 1.3090 0.3431 35.5173 0.9352 0.0308 3.1835 0.9672 0.0013 0.1321
    76 1.3265 1.3265 0.3562 36.7058 0.9375 0.0328 3.3825 0.9717 0.0014 0.1442
    77 1.3439 1.3439 0.3695 37.9254 0.9394 0.0350 3.5919 0.9759 0.0015 0.1572
    78 1.3614 1.3614 0.3832 39.1770 0.9409 0.0373 3.8123 0.9798 0.0017 0.1713
    79 1.3788 1.3788 0.3972 40.4617 0.9419 0.0397 4.0440 0.9835 0.0018 0.1865
    80 1.3963 1.3963 0.4115 41.7803 0.9426 0.0422 4.2877 0.9868 0.0020 0.2029
    81 1.4137 1.4137 0.4260 43.1339 0.9428 0.0449 4.5439 0.9899 0.0022 0.2205
    82 1.4312 1.4312 0.4409 44.5235 0.9426 0.0477 4.8132 0.9926 0.0024 0.2395
    83 1.4486 1.4486 0.4561 45.9502 0.9420 0.0506 5.0961 0.9951 0.0026 0.2600
    84 1.4661 1.4661 0.4716 47.4152 0.9409 0.0536 5.3934 0.9973 0.0028 0.2819
    85 1.4835 1.4835 0.4873 48.9197 0.9394 0.0568 5.7056 0.9992 0.0030 0.3056
    86 1.5010 1.5010 0.5034 50.4648 0.9374 0.0602 6.0335 1.0009 0.0033 0.3309
    87 1.5184 1.5184 0.5198 52.0520 0.9349 0.0637 6.3777 1.0022 0.0036 0.3582
    88 1.5359 1.5359 0.5365 53.6826 0.9320 0.0674 6.7392 1.0033 0.0039 0.3874
    89 1.5533 1.5533 0.5535 55.3580 0.9287 0.0712 7.1186 1.0040 0.0042 0.4188
    90 1.5708 1.5708 0.5708 57.0796 0.9248 0.0752 7.5168 1.0045 0.0045 0.4525



     展開は5次まで求めたけど、偶数次はsin(0)が係数としてかかり増加量が0となるので意味がない。結局1,3,5次だけを求めた。5次で殆ど誤差はなくなり、7,9次はおもしろみがないのでここでは5次までを載せた。
     マクローリン展開は0付近が最も精度が良く、0から離れるほど精度が悪くなっていく近似式なので、90°に近付くほど指数関数的に誤差が大きくなっていく。
     誤差を比較すると、今回求めた近似では3次のマクローリン展開と同程度の精度があることが分かる。全く使えないほどに悪い精度ということはないと思う。
     なお、表中でsin(x)の正しい値としているが、計算機でsin(x)を求めるときはマクローリン展開を使っているらしい[1]。かりにエクセルのsin関数がマクローリン展開を使うものだったとすると、マクローリン展開の精度を調べるために、マクローリン展開によって得られた値を使っているという間抜けな事態だということになる。

    参考文献
    [1]石村 園子, すぐわかる微分積分

    関連エントリー
     20200524 円を縦に3等分する