• ベストアンサー

arcsin関数が無いPC言語

表題の通りの質問です。 (以下arcsin,arctanはそれぞれsin,tanの逆関数です) ネットで検索しますと、arctanを使って arcsin(x)=arctan(x/√(1-x*x)) とする例をよく見かけますが、 この場合x=±1のときに正しい計算が行われません。 条件分岐で回避する方法もありますが、 もっとスマートに一つの式で計算できないでしょうか? もし条件分岐以外に方法がない場合 x=±1とそれ以外に分ける他の分岐法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ashi_oto
  • ベストアンサー率40% (9/22)
回答No.1

arcsin(x) = 2 * arctan(x / (1 + √(1 - x * x))) とかいかがですか?

sak_sak
質問者

お礼

素晴らしいです。 半角(2倍角)の公式の利用ですね。 ありがとうございました。

sak_sak
質問者

補足

こういうセンス(知識?)はどうしたら身に付くものでしょうか? おすすめの本などありましたら教えてください。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

arctan にはしばしば 2引数のものがあったりする (例: C の atan2) ので, これがあれば終了... なんだけど, 2引数の arctan があって arcsin がない言語ってのも変かも. おまけ: #3 では [x] の中身は必ず正です....

  • y_akkie
  • ベストアンサー率31% (53/169)
回答No.3

#2です。すみません、以下でも実際に計算するときに0割りが発生してしまうので、不具合が生じてしまいます。 arcsin(x) = (1-x^2)*(arctan(x/√1-x*x)+ x^2*(2*arctan(1)-arctan(√(1-x^2)/x) なので、[x]を用いて以下のように定義します。 なお、[x]はxの整数部となります。 arcsin(x) = (1-x^2)*(arctan(x/(√1-x*x + [x^2]))+ x^2*(2*arctan(1)-arctan(√(1-x^2)/(x+[1-x^2])

sak_sak
質問者

補足

[x]は整数部とのことですが、いわゆるガウス記号(int)のことでしょうか? -1<x<0の場合[x]はいくつになりますか? 正か負かで場合分けしないといけませんか? でも整数部分の関数を使うアイデアは良いヒントになりそうです。 ありがとうございました。

  • y_akkie
  • ベストアンサー率31% (53/169)
回答No.2

tan((π/2)-A) = 1/tanAという公式(性質?)を利用すれば、 与式を以下のように変換する事が可能ではないでしょうか。 arcsin(x) = 2*arctan(1)-arctan(√(1-x^2)/x) となります。だが、今度は、x=0の時は計算できないといった不具合が 生じる事になります。 なので、 arcsin(x) = (1-x^2)*(arctan(x/√1-x*x)+ x^2*(2*arctan(1)-arctan(√(1-x^2)/x)とすれば不具合は解消されるのではないでしょうか。

関連するQ&A

  • 逆関数の問題です。

    (1) x>0 とすると arctan 1/x + arctan x = π/2 を示せ。 (2) arccos x = sin 4/5 をみたすxをもとめよ。 という問題なのですが、解けませんでした。 どなたか解答とその導入過程を教えてください。 わたしの考えたことを少し載せます。間違っていたら申し訳ありません。 (1) acrtan 1/x =α, arctan x = βとすると、求めるものは α+β  arctan 1/x =α より tan α = 1/x (-π/2 <α< π/2) arctan x = β より tan β = x (-π/2 <α< π/2) よって tan(α+β)の定義域は -π<α+β<π …(ここからどうするのかがわかりません) (2) この問題も(1)と同様に arccos x = α, arcsin 4/5 = β として cosα、sinβの値は出せますが、どうすればよいのか訳がわかりません。 ※arcsin θ =sin^-1 θ

  • arctanやarcsinが使われている2変数関数の解き方

    arctanやarcsinが含まれる2変数関数 f(x,y)を偏微分する方法に ついて質問です。 一応はといてみたのですが自信がありません、 間違っている箇所があれば、ご指導いただければと思います。 (できれば、計算プロセスも詳しく書いていただけるとありがたいです。) 【問題】 次の2変数関数f(x,y)を偏微分せよ。 すなわち、関数f(x,y)のxおよびy関する変動関数fx(x,y)およびfy(x,y)を求めよ。 (1) arctan(y/x) 合成関数の微分の公式を用いる。 y/xをuとおくと、arctan(y/x)=arctan(u) 微分して arctan(u) = 1/(1+u^2)…(1) y/xを微分して (y/x)'=(y*x^(-1))'=-y*x^(-2)=y/x^2…(2) (1)(2)を合わせて、1/(1+(y/x^2)^2)=1/(1+y^2/x^4) (2) arcsin(y/x) 合成関数の微分の公式を用いる。 y/xをuとおくと、 arcsin(y/x)=arcsin(u) 微分して arcsin(u) = 1/√(1-u^2)…(1) y/xを微分して (y/x)'=(y*x^(-1))'=-y*x^(-2)=y/x^2…(2) (1)(2)を合わせて、1/√(1-(y/x^2)^2)=1/√(1-y^2/x^4) 以上、ご指導のほど、よろしくお願いします。

  • 逆三角関数の計算

    次の計算ができません。 tan(arctan15)= arcsin(cos9π/5)= 上の式では、15が1/√3のような値だとわかるのですが…。

  • 解析学/逆三角関数の証明・問題

    誰かわかる方、下の問題に答えてください!一つでも構いません。 1微分せずに証明 Arctan(x/√1-x^2)=Arcsinx (-1<x<1) Arctan(1/x)=(1)(π/2)-Arctanx (x>0) (2)-(π/2)-Arctanx (x<0) 2次の値を求める Arctan(3/4)+Arctan(1/7) tan(Arcsin(4/5)+Arccos(12/13)) 3多項式または分数式で表す cos(Arcsinx)sin(2Arcsinx) tan(3Arctanx)

  • 三角関数、逆三角関数の算出方法がわかりません

    C++でdouble以上の精度で計算できるクラスを作って、現在数学関数を作成中なのですが三角関数関連のところでつまずいてしまいました sin,cosについてはテイラー展開を使って差分が一定以下になるまで次数をどんどん高くしていくという方法で算出したのですが tanの展開公式が複雑すぎて計算量が多くなり時間がかかりすぎてしまいます。(特にベルヌーイ数の算出) また|x|≧1についてのarctan(x)の算出方法もわかりません。 tanのより簡単な算出方法、|x|≧1でのarctan xの算出方法を教えていただけないでしょうか? また、テイラー展開よりもっと簡単な算出方法があればそれも教えていただけるとありがたいです。 なお、精度の関係上標準関数(tan(x),atan(x)など)は使いません。

  • ∫arcsin(1)-arcsin(-1)dx

    計算をしていたら、∫[0→1]arcsin(1)-arcsin(-1)dx という式になりました。 arcsin(1)=π/2+2nπ、arcsin(-1)=(3/2)π+2mπ(n、mともに整数) から、 arcsin(1)+arcsin(-1)=π/2+2nπ-(3/2)π+2mπ=-π+2kπ(kは整数) よって ∫[0→1]arcsin(1)-arcsin(-1)dx =(-π+2kπ)[x][0→1] =-π+2kπ このような考え方でよろしいのでしょうか?宜しくお願い致します。 

  • 逆三角関数の値

    ちょっと式がややこしいですが、 sin(arccos√3/2)+cos(arctan((-1)/√3))+arcsin((-1)/√2) を計算すると、 sin(π/6)+cos(-π/6)-π/4 となり、 結果が 1/2+(-√3/2)-π/4 だと思ったのですが、 解答は、(√3-1)/2 となっていました。 どこが間違っているのでしょうか。

  • 解析学/逆三角関数の微分

    わかる方、一つでもいいので教えてください! 次の式を微分 1) (1/2)[x√(9-x^2)+9Arcsin(x/3)] 2) Arcsin(x+1)/2 3) Arctan(x/√3) 4) Arctan√(x/3)

  • 三角関数

    1) cos[arccos(x) - arcsin(x)] 2) sin[arctan(X) - arccos(x)] の解き方を教えてください。

  • 関数の問題です。アドバイス等お願いします。

    逆関数の問題についてなのですが、 x>0 とすると arctan 1/x + arctan x = π/2 という問題が解けません。 arctan 1/x =α 、arctan x=β といった具合に文字で置換するやりかたと、公式 tan((π/2)-A)=1/tan(A)を使用する方法があるそうですが、そのやり方がわかりません。 どなたかアドバイス等をよろしくお願いします。