[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/07/27(Thu) 16:18
投稿者名:月子
Eメール:
URL :
タイトル:
超越関数
超越関数の使い方が全く分からずに困っております。

ヘルプでアークコサインを調べたら下記の関数を使用するように記述
してますが、これをどう扱うのでしょうか?

Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)


自分なりに試したのが下のコードですが、これを実行すると
【コンパイルエラー:配列がありません】となります。


Dim Arccos As Double
Dim X As Double

X = 0.7071        

Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Label1.Caption = Arccos




VBはその都度マニュアルを読んで作成しているド素人で、
数学にも疎い私です。後教授の程お願いいたします。

投稿時間:2006/07/27(Thu) 17:03
投稿者名:yu
Eメール:
URL :
タイトル:
Re: 超越関数

> Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)

Arccos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)

このようにすれば良いと思います

投稿時間:2006/07/28(Fri) 08:57
投稿者名:月子
Eメール:
URL :
タイトル:
Re^2: 超越関数
  
> Arccos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)

これですとアークコサインの数値にならないんです・・・・

投稿時間:2006/07/28(Fri) 09:14
投稿者名:
Eメール:
URL :
タイトル:
Re^3: 超越関数
>  
> > Arccos = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
>
> これですとアークコサインの数値にならないんです・・・・
なりますよ。
ただ、三角関数の引数はラジアンで、
さらにcos()はどの様な入力でも-1〜1までしかとらないので逆写像であるarccosが様々な値を取る
というだけです。
(全写/単写をしらべてみてください)

Private Sub Form_Load()
    Dim cosaine As Double
    cosaine = Cos(2)
    Debug.Print cosaine, Arccos(cosaine)
End Sub

Function Arccos(ByVal x As Double)
    Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
End Function

投稿時間:2006/07/28(Fri) 11:21
投稿者名:月子
Eメール:
URL :
タイトル:
Re^4: 超越関数
ご回答ありがとう御座います。

もさんが記述してくれた内容をそのまま
x=○○ とXに代入して色々数値を変えて実行してみたのですが、
xをどんな値にしても返って来る数値は0.785398・・・・・となってしまいます。

Private Sub Form_Load() を空白にしてただ単に
 
Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1) の関数を実行した場合も
全く同じ状態です。

私が根本的に理解していないのかもしれません^^;


私が作成したいプログラムは単純に三角形の辺や角度を計算するものなのですが、
現在角度を求める式で、このアークコサイン関数を使用したいのです。


例えば、三角比で  底辺:高さ:斜辺  1:1:√2   (この場合内角の角度は90・45・45)
                    θ=rccos(底辺/斜辺)

上記を踏まえて、

x=1/Sqr(2)
Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)

返り値は 45 となると思っているのですが、この考え自体間違いなのでしょうか?

投稿時間:2006/07/28(Fri) 11:53
投稿者名:
Eメール:
URL :
タイトル:
Re^5: 超越関数
> ご回答ありがとう御座います。
>
> もさんが記述してくれた内容をそのまま
> x=○○ とXに代入して色々数値を変えて実行してみたのですが、
> xをどんな値にしても返って来る数値は0.785398・・・・・となってしまいます。
>
> Private Sub Form_Load() を空白にしてただ単に
>  
> Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1) の関数を実行した場合も
> 全く同じ状態です。
>
> 私が根本的に理解していないのかもしれません^^;
コーディングの方法や、プログラムコードの読み方までは提示できませんので、
どのようにすれば私の書いたArccosという関数を"使えるか"ということは自力で調べて
みてください。
例)
debug.? arccos(cos(1)),1

> 私が作成したいプログラムは単純に三角形の辺や角度を計算するものなのですが、
> 現在角度を求める式で、このアークコサイン関数を使用したいのです。
>
>
> 例えば、三角比で  底辺:高さ:斜辺  1:1:√2   (この場合内角の角度は90・45・45

>                     θ=rccos(底辺/斜辺)
>
> 上記を踏まえて、
>
> x=1/Sqr(2)
> Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
>
> 返り値は 45 となると思っているのですが、この考え自体間違いなのでしょうか?
間違っています。
VBの三角関数はすべてラジアン度(弧度法)です、度数法ではありません。
度数表記にしたいのならば、独自で関数を用意する必要があります(単純ですが)
この場合は、
dim PI as double
PI=(atn(1)*4)
debug.? cos(45*PI/180),arccos(cos(45*PI/180))*180/PI
となりましょうか。

投稿時間:2006/07/28(Fri) 11:53
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: 超越関数
> xをどんな値にしても返って来る数値は0.785398・・・・・となってしまいます。
> 返り値は 45 となると思っているのですが、この考え自体間違いなのでしょうか?

つまり、こういう事ですよね。

http://www.google.co.jp/search?q=45%E5%BA%A6%3D%3F%E3%83%A9%E3%82%B8%E3%82%A2%E3%83%B3

投稿時間:2006/07/28(Fri) 14:16
投稿者名:月子
Eメール:
URL :
タイトル:
Re^6: 超越関数
やっとお二方のおっしゃってる事が理解できました。

Arccos = (Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)) * 180 / 3.14159265358979

で求める数値になりました。


どうもありがとう御座いました。

投稿時間:2006/07/28(Fri) 10:16
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
ヘルプを鵜呑みにしないように
> 配列がありません
ヘルプでは左辺が括弧付きで書かれていますが、それをそのまま記述すると、
配列として扱われてしまいます。今回の場合は左辺の括弧は不要ですね。

まぁ、アークコサインに関しては、yuさん/もさんが回答されているので、別の視点からの蛇足を。


> 超越関数の使い方が全く分からずに困っております。
実は、日本語ヘルプにある超越関数は、あまり鵜呑みにしない方が良かったりします。
いくつかの間違いがありますので、計算式を検証しないと、後で泣きを見るかも…。

たとえば、アークセカント は公式中に『Sgn((X) - 1)』なんて式が書かれていて、
どう見ても正しい結果にはならないですよね。(^^;

おまけに、英語版と日本語版で公式が異なっていたりもして、何がなんだか。

[日] http://www.microsoft.com/japan/developer/library/vbenlr98/vagrpderivedmath.htm
[米] http://msdn.microsoft.com/library/en-us/vbenlr98/html/vagrpderivedmath.asp

# よく見ると上記英語版の Arcsec, Arccosec も変な公式になっていますが、これは、
# 英語原文では、一部のマイナス記号が ChrW(&H2D) "Hyphen-Minus" ではなく、
# ChrW(&H2212) "Minus Sign" で書かれていたため、非Unicode化の際に壊れてしまい、
# マイナス記号が消えてしまった…というのが原因らしいです。