[代數] 是否有可能用電腦實作萬用倒函數?

看板Math作者 (pain is my old friend)時間2年前 (2023/06/18 11:28), 2年前編輯推噓13(13057)
留言70則, 14人參與, 2年前最新討論串1/1
給定一函數func, 參數是i, j, k. 輸出是x, y. 假設i, j, k, x, y 都可以定義的數(非0/0),且不是無限大。 用Python語法表示:x, y = func(i, j, k) 那是否可以針對任何func, 用電腦實作一個萬用反函數?我稱此反函數invFunc, 或者用比較數學的表示法func^-1 用Python語法表示:i, j, k = invFunc(func, x, y) 我想問invFunc是否一定可以由程式寫出來?因為目前沒看到相關的萬用反函數可用,因此猜想是無法,如果真的是無法的話,方便解說一下,爲什麼無法?謝謝。 ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.13.57 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1687058920.A.0EE.html

06/18 11:53, 2年前 , 1F
不是所有函數都存在反函數
06/18 11:53, 1F

06/18 11:56, 2年前 , 2F
我想到一個困難點,就是func 有可能超大,導致反函
06/18 11:56, 2F

06/18 11:56, 2年前 , 3F
數很難求。那假設func在程式碼1000行以下,那有辦法
06/18 11:56, 3F

06/18 11:56, 2年前 , 4F
實作萬用反函數嗎?目前我只知道,如果限定在三角函
06/18 11:56, 4F

06/18 11:56, 2年前 , 5F
數的話,sin^-1, cos^-1, tan^-1, …這些都有人寫好
06/18 11:56, 5F

06/18 11:56, 2年前 , 6F
了。另外求反矩陣,印像中也有公版的。
06/18 11:56, 6F
※ 編輯: pmove (1.161.13.57 臺灣), 06/18/2023 11:59:47

06/18 12:02, 2年前 , 7F
回1F,m大:那不存在反函數,可返回exception錯誤,
06/18 12:02, 7F

06/18 12:02, 2年前 , 8F
只處理有反函數就好的,可以麼?
06/18 12:02, 8F

06/18 12:41, 2年前 , 9F
印像中,數學上,反矩陣也不一定存在啊。但程式裡面
06/18 12:41, 9F

06/18 12:41, 2年前 , 10F
可以處理反矩陣存在時,才得到反矩陣。
06/18 12:41, 10F

06/18 12:44, 2年前 , 11F
反矩陣可以看他的 det 是否為零或其他條件,反函數
06/18 12:44, 11F

06/18 12:44, 2年前 , 12F
要看看到有沒有類似的條件可以讓你判斷
06/18 12:44, 12F

06/18 12:44, 2年前 , 13F
Google 陷門函數
06/18 12:44, 13F

06/18 12:45, 2年前 , 14F
如果你辦得到的話你就能輕鬆進入絕大多數的電腦系統
06/18 12:45, 14F

06/18 12:47, 2年前 , 15F
RSA 等密碼系統的安全性就是建立在反函數難以求出
06/18 12:47, 15F

06/18 12:53, 2年前 , 16F
你方便說明一下什麼叫做「萬用反函數」嗎?
06/18 12:53, 16F

06/18 13:36, 2年前 , 17F
先說說你的I,j,k定義域是啥不過反正你說要用電腦實
06/18 13:36, 17F

06/18 13:36, 2年前 , 18F
作,就算都是float也只有有限多個值。
06/18 13:36, 18F

06/18 13:36, 2年前 , 19F
那一般解也非常簡單,反正把整個定義域都算過一遍答
06/18 13:36, 19F

06/18 13:36, 2年前 , 20F
案全部cache起來,反函數就是在cache裡面搜尋x ,y再
06/18 13:36, 20F

06/18 13:36, 2年前 , 21F
反推回原來的I, j, k
06/18 13:36, 21F

06/18 14:18, 2年前 , 22F
如果是求一個程式,給定任何程式碼,以生成此程式碼
06/18 14:18, 22F

06/18 14:18, 2年前 , 23F
的反程式碼,那應該會回到停機問題。
06/18 14:18, 23F

06/18 14:56, 2年前 , 24F
回17樓,w大,把所有值cache起來,先不管效率問題,
06/18 14:56, 24F

06/18 14:56, 2年前 , 25F
當cache的數,有無理數,或精確度不足,會造成小數
06/18 14:56, 25F

06/18 14:56, 2年前 , 26F
點某幾位的數後面,被省略不記,如此會造成某些數,
06/18 14:56, 26F

06/18 14:56, 2年前 , 27F
沒有被cache到。也就是原本func(i, j, k), i, j, k
06/18 14:56, 27F

06/18 14:56, 2年前 , 28F
可以算完所有值域。但是輸出的x, y有可能被省略,使
06/18 14:56, 28F

06/18 14:56, 2年前 , 29F
得某些x, y沒被cache, 但不代表此時反函數不存在。
06/18 14:56, 29F

06/18 17:08, 2年前 , 30F
舉個例子,w = func(u) = u^2, 假設電腦只能表示小
06/18 17:08, 30F

06/18 17:08, 2年前 , 31F
數點後一位(我知道這跟真正的電腦表示法,不太一樣
06/18 17:08, 31F

06/18 17:08, 2年前 , 32F
)那u =1時,w =1。u =1.1時,w=1.2 (1.21但只能表
06/18 17:08, 32F

06/18 17:08, 2年前 , 33F
示小數點後一位,省略0.01),我要問w=1.1時,不在c
06/18 17:08, 33F

06/18 17:08, 2年前 , 34F
ache中,此時u 是多少?我只知道u 不是1,就是1.1,
06/18 17:08, 34F

06/18 17:08, 2年前 , 35F
但到底是多少,尤其當func 更複雜時,有時候很難判
06/18 17:08, 35F

06/18 17:08, 2年前 , 36F
06/18 17:08, 36F

06/18 18:00, 2年前 , 37F
所以你想要的其實是一個 產生反函數的函數?
06/18 18:00, 37F

06/18 18:17, 2年前 , 38F
回樓上,其實很多大大都已回答,是卡在效率問題的樣
06/18 18:17, 38F

06/18 18:17, 2年前 , 39F
,所以目前沒有公版invFunc
06/18 18:17, 39F

06/18 18:42, 2年前 , 40F
就取近似,線性差值
06/18 18:42, 40F

06/18 18:43, 2年前 , 41F
如果你一開始的定義夠密,結果應該不會太差吧
06/18 18:43, 41F

06/18 21:53, 2年前 , 42F
隨便舉例x=f(i)=i^4-i+1 請問x=0時i=? 四組答案?
06/18 21:53, 42F

06/19 01:16, 2年前 , 43F
除非在一個區間內,x to y是bijective(1-1 and onto
06/19 01:16, 43F

06/19 12:50, 2年前 , 44F
Newton's method對我來說就是萬用反函數 :P
06/19 12:50, 44F

06/19 13:13, 2年前 , 45F
程式可以要求輸出preimage,不一定要 1-1
06/19 13:13, 45F

06/19 19:54, 2年前 , 46F
討論完可行性了, 我來說一聲: 這問法像是 XY 問題
06/19 19:54, 46F

06/19 19:54, 2年前 , 47F
原 PO 很有可能有一些跟反函數相關的工作要做
06/19 19:54, 47F

06/19 19:55, 2年前 , 48F
但不知何理由無法或希望不要個別地求反函數
06/19 19:55, 48F

06/19 19:55, 2年前 , 49F
因此來問有何可以不需個別索求反函數的方式
06/19 19:55, 49F

06/19 19:55, 2年前 , 50F
那經過這些可行性討論之後, 我想要問原 PO:
06/19 19:55, 50F

06/19 19:56, 2年前 , 51F
你最一開始會有需要反函數的需求是什麼?
06/19 19:56, 51F

06/19 19:56, 2年前 , 52F
就算只對特定類型的函數求逆都是相對簡單的問題
06/19 19:56, 52F

06/19 19:57, 2年前 , 53F
給出需求來大家會比較知道要建議你用什麼方法
06/19 19:57, 53F

06/20 10:39, 2年前 , 54F
確實是工作上需要求反函數,只是工作上的目前已經求
06/20 10:39, 54F

06/20 10:39, 2年前 , 55F
出來,好奇為何沒人寫一個公版求反函數,所以來問,
06/20 10:39, 55F

06/20 10:39, 2年前 , 56F
謝謝。
06/20 10:39, 56F

06/20 15:34, 2年前 , 57F
那麼這裡再補充一件事吧:效率問題其實是其次
06/20 15:34, 57F

06/20 15:34, 2年前 , 58F
有的函數根本上就是無法求得「一個」特定的反函數
06/20 15:34, 58F

06/20 15:35, 2年前 , 59F
都需要將原函數作一些範圍限定或條件限定之後
06/20 15:35, 59F

06/20 15:35, 2年前 , 60F
才能有「一個」反函數被定義出來
06/20 15:35, 60F

06/20 15:36, 2年前 , 61F
這件事和你的原函數的型式極度相關,因此我才會問
06/20 15:36, 61F

06/20 15:37, 2年前 , 62F
究竟原函數長怎樣,這樣才能夠知道要怎麼加條件
06/20 15:37, 62F

06/20 15:37, 2年前 , 63F
去得到那一個反函數,同時也有助於實際求值
06/20 15:37, 63F

06/20 15:39, 2年前 , 64F
給出型式也能知道是不是那些本質上很難求逆的東西
06/20 15:39, 64F

06/20 20:39, 2年前 , 65F
唯一的一般解就是我說的窮舉法啊。float還可以讓你
06/20 20:39, 65F

06/20 20:39, 2年前 , 66F
這樣搞,R連窮舉的機會都沒了。
06/20 20:39, 66F

06/21 00:02, 2年前 , 67F
程式語言不是只能寫 float,是能夠寫 exact real 的
06/21 00:02, 67F

06/21 01:31, 2年前 , 68F
是computable number嗎?
06/21 01:31, 68F

06/21 20:34, 2年前 , 69F
只是多幾個位數而已,哪可能真的用電腦實作實數。
06/21 20:34, 69F

06/21 21:02, 2年前 , 70F
電腦只能處理特定實數,不然就不會定義computable
06/21 21:02, 70F
文章代碼(AID): #1aZdde3k (Math)