能否構造一個函數,使其定義域為整數集,值域為有理數集呢?
最好能是增函數。高中生。
康托爾用對角線法則證明了 等勢:
也就是如這張圖所表示的...
當然這張圖本身就表示了一個函數...
不過你要是問能不能給出一個表達式...
這就有點困難了...不過對OEISer來說都是小Case.
分子:[1],[1,2], [3,2,1], [1,2,3,4], [5,4,3,2,1]......A092542 - OEIS
分母:[1,2,1], [1,2,4,,3,2,1], [1,2,3,4,5,6,5...]....A092543 - OEIS
首先介紹一位老朋友:
這個數列是:0, 1, 1, 2, 2, 2, 3, 3, 3, 3....編號A003056 - OEIS
然後有:
其中:
代入化簡得:
也就是:
那麼這個函數長什麼樣呢?
那能不能是單調增函數呢?
假如有個單調增函數 滿足題主的要求,那麼 是兩個有理數.
那麼請問 是不是大小介於兩數之間的有理數...它的位子在哪呢?
有理數稠密而整數不稠密,不存在這樣一個增函數滿足題意...
如果懶得看文字,這個圖就說明了一切(網上搜的)
不包括負的?那讓負的整數對應那些負有理數。或者下面這個圖,我更喜歡(也是網上搜的)
我知道題主困惑什麼,題主想的是一個用公式表示出的函數,像什麼sin(x/180 + cos(x^2))這樣。其實數學史上很長時間都只認這樣的公式為函數(參看知乎關於「函數」中文翻譯的答案)。但後來公式種類越來越多,帶極限、帶積分,甚至是某個微分方程的解就被命名為一個新函數。人們覺得何不承認所有映射,不必非要用我們所熟悉的「特殊函數」(好像是Dirichlet持這種意見,Weierstrauss或許還是堅持以收斂級數為函數)。
- 這個問題在修習了高等數學的基礎上會變得很容易。由於實數範圍內的有理數太多了,我們搞不清楚,所以我們先考慮[0,1)區間內的有理數。但這裡面的有理數也很多,所以我們從簡單的開始。
拋去特殊的0,分母是2的有一個,即1/2
分母是3的有兩個,即1/3,2/3
以此類推,我們可以列出所有的有理數。當然,其中有重複的項,如1/2和2/4,不過沒關係,遇到的時候直接跳過就可以了。按照這樣的方法我們顯然可以構造出一個數列,使得在[0,1)內的所有有理數必然都出現在我們給定的數列里。
- 現在我們考慮一組區間:[n,n+1)
顯然這個區間可以排成一列。如果你覺得按照n的大小無法排成有開頭的一列的話,那我們這樣來看就好了。
n=0,n=1,n=-1,n=2,n=-2……
按照如上n的順序,我們可以得到一組區間,它們互相之間交集為空並且全部並起來是實數集。也就保證了任何一個有理數,乃至實數,都會至少出現在其中一個區間里。
並且每個區間里的有理數我們都能排成一列。即n+0,n+1/2,n+1/3,n+2/3……
- 有了上面兩步之後,我們終於可以開始接下來最關鍵的一步排列了。
我們可以把n=0的數列排列在第一行,n=1的排在第二行,n=-1在第三行,以此類推。照著這樣的排列方法,我們容易得到一個二維數表,並且是有第一行第一列的。而且我們還能保證任何一個有理數都出現在了該數表中。如果能把這個數表裡的數還排列成一個新的數列,並且將每個位置的數值作為對應於0,1,-1……等點的函數值,那麼題設的函數就構造好了。
我們這樣考慮,不妨記這個數表中第n行第m列的數為a(n,m)。我們按照如下的順序去排列,即可達成我們所需要的效果:
a(1,1),a(2,1),a(1,2),a(3,1),a(2,2)……
即首先把m+n=2的選出來,按照n從小到大排列,然後再選擇m+n=3的以同樣的方式排列,然後再選擇m+n=4的……如此,即可得到一個全新的數列。我們記其為r(n)。
構造函數f(n)=r(n),顯然定義域為整數,而值域為有理數。
- 能否單調化?
答案顯然是不能的。因為有理數具有稠密性,而整數沒有。
下面的論證用反證法即可,如果你有興趣可以自己想想再看。
我們假設真的有一個單調遞增的函數滿足題設,那麼f(0)和f(1)一定是兩個有理數,並且f(0)&
顯然根據大小應該在0,1之間,但0,1之間沒有其他的整數。無論排列在0,1之外的哪一側,都會破壞函數的單調性。所以反證法中的假設,顯然錯誤了。由此可得,不存在這樣的單調函數。
- 最後一點題外話,關於有理數,整數之間的性質,數系的擴充都是高等數學最為基礎的範疇。當然某些內容過於抽象只出現在了數學分析等數學系的課程中。如果有興趣可以自己再查閱一下。數學,或者說分析學研究的基礎就是研究各種數的性質。希望這樣的回答對你有幫助。
能。整數集和有理數集都是可數無窮。可以一一對應。
但是無法做成遞增吧.
(define next-rat
(lambda (now-rat)
(let ((n (get-n now-rat))
(d (get-d now-rat)))
(if (= d 1)
(make-rat 1 (+ n d))
(make-rat (+ n 1) (- d 1))))))
(define (int-rat n)
(define map-iter
(lambda (n result) ;;暫不考慮n小於0以及負有理數
(if (= n 0)
result
(map-iter (- n 1) (next-rat result)))))
(map-iter n (make-rat 1 1)))
;;定義有理數數據結構
(define make-rat cons)
(define get-n car)
(define get-d cdr)
加了高中生三個字立馬高大上起來,就不是問作業了→_→
試試看法萊數列,經過適當的修改,應該是能滿足你的要求的
增函數不可能,因為(f(n)+f(n+1))/2是有理數而大小介於f(n)與f(n+1)之間。
不要求增函數的話,可以用康托爾對角線法構造,別的答案應該已經說過了。如果不要求一一對應的話,可以不剔除重複的非既約分數,表達式應該可以不太複雜。
一一映射是很簡單的,相當於在二維平面上格點與自然數對應,只需要用斜線就行了
但是增函數是不可能的,因為f(1)和f(2)之間必有有理數,而與一一映射矛盾。
等你學了《實變函數》就知道了,整數的數量和有理數的數量是一樣多的,都是可數個,也叫做可列可數個,手機不方便回答,抱歉!
既然後面有大神解釋了,我就不重複了,無視我吧
高中生研究這幹嘛,這在數學系實變函數里很簡單的問題。如你以後不讀數學系,這問題你幾乎用不上。
我們只考慮一一映射。
樓上已經給了答案,按康托爾對角線法則很容易構造出一一映射。
構造出增函數的一一映射是不可能的,這就相當於把有理數從小到大排列出來。我們先簡化問題只考慮零到一的有理數。很顯然沒有這序列,因為任一有理數都有可列個有理數比他小。
如果值域是有理數的子集,很多。
如果是值域恰好是有理數集本身,就不清楚了——應該不存在吧,因為這相當於尋找一個單調的,從有理數到無理數的一對一映射。
from fractions import gcd,Fraction
def Z2Q(z):
if z==0:
return Fraction(0,1)
def Z2Q_positive(z):
def z2q(n, f):
if n==z:
return f
a=f[0]+f[1]-1
f2=(f[0]+1, f[1]-1) if f[0]&0 else -Fraction(*Z2Q_positive(-z))
def Q2Z(q): 根據這幅圖來的,1對應1/1,拋掉了非既約分數以形成雙射,0對應0,負的對應負的。 f:Z??Q, x??x
if q==0:
return 0
def Q2Z_positive(q):
def q2z(n ,f):
if Fraction(*f)==q:
return n
a=f[0]+f[1]-1
f2=(f[0]+1, f[1]-1) if f[0]&0 else -Q2Z_positive(-q)
知乎不缺垃圾回答
推薦閱讀:
※已知任意位置的正方形和三角形的頂點坐標 如何計算重疊部分面積?
※從事數學研究會對人的個性產生哪些影響?可能使人產生哪些狹隘的見解?
※試作集合(0,1)與集合[0,1]的一一對應?
※數學上能否指出某個公理體系中符合哪些條件的真命題是可以證明的,符合哪些條件的命題是「真而不可證」的?
※學習數學到底有什麼用?