Re: [問題] 三角函數的Indeterminate

看板Mathematica作者 (coke)時間11年前 (2013/03/23 03:43), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《bjiyxo (若自礌)》之銘言: : 在寫mathematica的時候 : 計算到三角函數 : 過程當中無可避免的會遇到tan90這種情況 : 然後所有程式就通通變成Indeterminate了 : 於是我想要克服以下這種情況 : 想要用if tan90==Indeterminate 或者 ComplexInfinity 或者 NaN : 三種方法都無效 : 請問版上的高手 : 此時我應該怎麼做才能修正這個問題呢? : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.113.66.77 : 推 LPH66:個人覺得應該回頭去看程式邏輯哪裡有問題 03/22 02:07 : → LPH66:如果真的不可避免的話 在送角度進 Tan 前檢查 03/22 02:08 : → bjiyxo:可是我是要從值arctan回去...所以要怎麼克服 03/22 12:37 : → bjiyxo:一個無窮大的時候送回arctan檢查變成pi/2 03/22 12:38 : → bjiyxo:我做的東西因為跟斜率有關 當遇到鉛錘線的時候 03/22 12:39 : → bjiyxo:斜率無窮大時會讓我很麻煩 03/22 12:40 如果沒誤會的話, 原Po的問題是: 有一個函數 f(x), f(x)在某些時候會變成無限大, 原Po希望在那些時候得到 ArcTan(f(x))= Pi/2. 也許可以利用三角函數關係 ArcTan(y) = ArcSin(y/Sqrt(1+y^2)), 得到 ArcTan(f(x)) = ArcSin( f(x) / sqrt(1+f(x)^2) ) = ± ArcSin ( f(x)R(x) / sqrt(R(x)^2+ (R(x)f(x))^2) ) = ± ArcSin ( 1 / sqrt(1+ 1/(f(x)^2) ) 這裡R(x)可以取任何使得f(x)R(x)不會變成無限大的函數, 例如取 R(x)=1/f(x) ========= 下面這個例子是我試過有效的, 如果原Po的f(x)很複雜的話可能就無效了. f[x_] = 1/x^2; R[x_] = 1/f[x]; h1[x_] = ArcSin[f[x]*R[x]/Sqrt[R[x]^2 + (f[x]*R[x])^2]]; h2[x_] = ArcSin[1/Sqrt[1 + 1/f[x]^2]]; h1[0] h2[0] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 72.12.197.83 ※ 編輯: fresca 來自: 72.12.197.83 (03/23 03:45)

03/23 10:32, , 1F
謝謝你 我的f(x)也可以這樣修正 感謝你的回答~~
03/23 10:32, 1F

03/29 22:49, , 2F
推,只是每次都要另外定義函數來做計算實在很麻煩 Orz
03/29 22:49, 2F
文章代碼(AID): #1HJBH9uU (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1HJBH9uU (Mathematica)