Đặt vấn đề
Có một chuyện hơi đáng sợ thế này.
Bạn cầm một chiếc kính lúp nhìn vào một cái lá.
Thấy những đường gân.
Lấy kính hiển vi mạnh hơn, nhìn tiếp.
Lại thấy những đường nhỏ hơn phân nhánh từ đường lớn.
Nhìn một cành cây, ta thấy nó chia thành những cành nhỏ.
Mỗi cành nhỏ lại chia thành những cành nhỏ hơn.
Nhìn một con sông từ trên cao, dòng sông chia thành nhánh.
Nhìn tia sét giữa trời, nó cũng chia nhánh.
Nhìn mạch máu trong phổi, lại tiếp tục chia nhánh.
Cứ như thể tự nhiên chỉ học được vài trò, rồi lặp đi lặp lại chúng từ khổng lồ xuống bé tí.
Và toán học có một cái tên cho kiểu cấu trúc kỳ quặc đó:
fractal.
Fractal có thể hiểu rất đơn giản là một cấu trúc có chi tiết xuất hiện ở nhiều mức kích thước khác nhau. Trong những fractal lý tưởng của toán học, quá trình này có thể tiếp tục vô hạn: phóng to một phần của hình, ta lại gặp những cấu trúc giống hoặc gần giống hình ban đầu.
Nó giống như mở một con búp bê Nga.
Bên trong có một con nhỏ hơn.
Mở con đó.
Lại có một con khác.
Mở tiếp.
Lại nữa.
Chỉ khác một điều hơi mất ngủ:
Trong toán học, đôi khi cái hộp này không bao giờ có đáy.
Hình học bình thường hơi quá sạch sẽ
Hồi nhỏ chúng ta học hình học bằng những thứ rất ngoan ngoãn:
- Đường thẳng
- Hình vuông
- Hình tròn
- Tam giác
- Hình cầu
- Hình nón
Nhưng nhìn ra ngoài cửa sổ thử xem.
Đám mây nào hình cầu?
Ngọn núi nào hình nón?
Cành cây nào là đường thẳng?
Bờ biển nào ngoan ngoãn chạy thành một đường cong mượt như bài tập lớp 6?
Không có.
Thế giới thật nham nhở.
Nó gãy.
Nó phân nhánh.
Nó lồi lõm.
Nó có những chi tiết nhỏ mọc trên những chi tiết lớn, rồi những chi tiết nhỏ hơn lại mọc tiếp.
Benoît Mandelbrot là một trong những người quan trọng nhất biến cách nhìn này thành một lĩnh vực toán học hiện đại. Ông đặt tên fractal từ fractus trong tiếng Latin, mang ý nghĩa gần với sự vỡ, gãy hoặc không đều. Công việc của Mandelbrot giúp hình học fractal trở thành một công cụ để suy nghĩ về những cấu trúc phức tạp mà hình học Euclid truyền thống mô tả khá vụng về. (IBM)
Nói hơi ngáo một chút:
Euclid nhìn thế giới và vẽ một hình tròn.
Mandelbrot nhìn thế giới rồi bảo: “Ngoài đời làm gì có cái gì tròn dữ vậy?”
Fractal là gì?
Một đặc điểm quan trọng thường xuất hiện trong fractal là tính tự đồng dạng (self-similarity).
Tức là một phần nhỏ của cấu trúc trông giống toàn bộ cấu trúc ở mức lớn hơn.
Ví dụ dễ nhất là cây.
1 |
2 ___|___
3 / \
4 / \
5 _/ \_
6 / \ / \
7 / \ / \
Thân cây chia thành cành.
Cành lại chia thành nhánh.
Nhánh lại chia thành nhánh nhỏ hơn.
Một cành nhỏ không phải bản photocopy chính xác của cả cái cây, nhưng kiểu tổ chức của chúng khá giống nhau.
Trong toán học, chúng ta thậm chí có thể tạo ra fractal tự đồng dạng chính xác.
Một trong những ví dụ đẹp nhất là tam giác Sierpiński.
Tam giác Sierpiński: lấy một cái kéo và cắt mãi mãi
Giả sử có một tam giác đều.
Bây giờ:
- Chia nó thành 4 tam giác nhỏ bằng nhau.
- Bỏ tam giác ở giữa.
- Với 3 tam giác còn lại, làm y hệt.
- Lặp lại.
- Lặp tiếp.
- Tiếp nữa.
- Cho tới khi vũ trụ hết pin.
Ta được tam giác Sierpiński.
Điều kỳ lạ là nhìn toàn bộ tam giác, bạn thấy một hình.
Nhìn vào góc trên, lại có một tam giác Sierpiński nhỏ hơn.
Nhìn vào góc của tam giác nhỏ đó, lại có một cái nữa.
Rồi một cái nữa.
Rồi một cái nữa.
Trong phiên bản toán học lý tưởng, quá trình này tiếp tục vô hạn. Tam giác Sierpiński là một ví dụ kinh điển của tập hợp tự đồng dạng được tạo ra bằng phép lặp đệ quy. (Wikipedia)
Nghe có vẻ chỉ là trò cắt giấy.
Nhưng ở đây một thứ thú vị bắt đầu xuất hiện.
Một hình có thể có 1.585 chiều không?
Đây là đoạn toán học bắt đầu hơi uống nhầm cà phê.
Chúng ta quen với:
- Đường thẳng: 1 chiều
- Hình vuông: 2 chiều
- Khối lập phương: 3 chiều
Nhưng fractal có thể có số chiều không phải số nguyên.
Tam giác Sierpiński có fractal dimension:
$$ D = \frac{\log 3}{\log 2} $$
xấp xỉ:
$$ D \approx 1.585 $$
Một phẩy năm tám năm chiều.
Nghe cực kỳ phạm pháp.
Nhưng ý nghĩa của nó khá đẹp.
Tam giác Sierpiński “nhiều hơn một đường”, bởi nó phủ không gian nhiều hơn một đường cong thông thường.
Nhưng nó lại “ít hơn một mặt phẳng”, bởi có vô số lỗ thủng.
Nó đứng lơ lửng đâu đó giữa thế giới 1 chiều và 2 chiều.
Công thức đó từ đâu ra?
Nếu phóng to mỗi chiều của tam giác lên 2 lần, ta cần 3 bản sao nhỏ để tạo lại hình lớn.
Với một vật tự đồng dạng:
$$ N = s^D $$
Trong đó:
- $N$ là số bản sao.
- $s$ là hệ số phóng đại.
- $D$ là số chiều fractal.
Với tam giác Sierpiński:
$$ 3 = 2^D $$
Suy ra:
$$ D = \frac{\log 3}{\log 2} $$
Xong.
Một cái tam giác bị khoét lỗ vừa bẻ cong trực giác về số chiều.
Đường bờ biển dài bao nhiêu?
Đây là một câu hỏi nhìn qua tưởng dễ.
Ví dụ hỏi:
Đường bờ biển của một quốc gia dài bao nhiêu?
Lấy thước.
Đo.
Hết bài.
Không.
Vấn đề nằm ở cái thước.
Giả sử ta dùng một cây thước dài 100 km.
Ta đi men theo bờ biển.
Những vịnh nhỏ, mỏm đá nhỏ sẽ bị bỏ qua.
Bây giờ đổi sang thước 10 km.
Ta có thể len vào nhiều chỗ hơn.
Kết quả đo dài hơn.
Đổi sang 1 km.
Dài hơn nữa.
Đổi sang 1 mét.
Ta bắt đầu đo vòng quanh từng tảng đá.
Đổi sang 1 cm.
Bây giờ ta có thể bò quanh từng hạt sỏi như một con kiến đang làm luận án tiến sĩ.
Chiều dài lại tăng.
Đây là thứ thường được gọi là coastline paradox — nghịch lý đường bờ biển.
Mandelbrot dùng vấn đề này như một ví dụ quan trọng để chỉ ra rằng chiều dài đo được của một đường biên tự nhiên phụ thuộc vào kích thước đơn vị đo: càng dùng đơn vị nhỏ, ta càng thu được thêm chi tiết và thường đo được chiều dài lớn hơn. (IBM)
Nói cách khác:
Không phải bờ biển tự nhiên dài ra.
Mà vì cái thước của chúng ta cuối cùng đã chịu nhìn kỹ hơn.
Đây là một ý tưởng rất đẹp của fractal.
Độ phức tạp không chỉ nằm trong vật thể.
Đôi khi nó nằm trong mối quan hệ giữa vật thể và mức độ chúng ta quan sát nó.
Và rồi Mandelbrot xuất hiện
Nếu tam giác Sierpiński là một căn phòng fractal khá gọn gàng, thì tập Mandelbrot giống như ai đó mở cửa tầng hầm của toán học rồi phát hiện bên dưới có cả một vũ trụ.
Công thức của nó vô cùng ngắn:
$$ z_{n+1} = z_n^2 + c $$
Bắt đầu bằng:
$$ z_0 = 0 $$
Trong đó $z$ và $c$ là số phức.
Nếu chưa quen số phức thì cứ tạm xem $c$ là một điểm trên mặt phẳng.
Với mỗi $c$, ta làm:
1z = 0
2
3z = z² + c
4z = z² + c
5z = z² + c
6z = z² + c
7...
Sau đó quan sát.
Nếu giá trị cứ lớn dần rồi chạy ra vô cực, điểm $c$ nằm ngoài tập Mandelbrot.
Nếu chuỗi vẫn bị giữ trong một vùng hữu hạn, $c$ thuộc tập Mandelbrot.
Định nghĩa chính xác của tập Mandelbrot chính là tập các giá trị $c$ mà chuỗi trên, bắt đầu từ $z_0=0$, không phân kỳ ra vô cực. (Merriam-Webster)
Nghe cực kỳ tẻ nhạt.
Chỉ là:
Bình phương.
Cộng một số.
Lặp lại.
Thế mà khi máy tính thực hiện việc đó cho hàng triệu điểm, tập Mandelbrot xuất hiện.
Và đây là lúc toán học bắt đầu cư xử như phù thủy.
Một phương trình tí hon sinh ra một thế giới khổng lồ
Điều đáng kinh ngạc về Mandelbrot không chỉ là nó đẹp.
Mà là độ phức tạp khổng lồ được sinh ra từ một quy tắc cực kỳ nhỏ.
Không có hàng triệu quy tắc.
Không có họa sĩ ngồi vẽ từng cái xoắn ốc.
Không có database chứa sẵn từng bông hoa bé tí.
Chỉ có:
$$ z_{n+1}=z_n^2+c $$
Lặp đi lặp lại.
Vậy mà khi zoom vào biên của tập Mandelbrot, ta gặp:
- xoắn ốc,
- cành cây,
- bông hoa,
- tia chớp,
- những cấu trúc giống con hải mã,
- những bản sao gần giống Mandelbrot ban đầu,
- rồi bên trong chúng lại có thêm cấu trúc,
- rồi thêm nữa.
Biên của tập Mandelbrot có cấu trúc fractal với chi tiết xuất hiện ở những mức phóng đại ngày càng nhỏ. (Wikipedia)
Đây là một trong những bài học rất sâu của fractal:
Luật đơn giản không có nghĩa là kết quả đơn giản.
Một đàn kiến không có kiến tổng giám đốc.
Một bầy chim không có con chim nào ngồi trên AWS điều phối toàn bộ đội hình.
Một bông tuyết không đọc bản thiết kế CAD trước khi đông lại.
Nhưng những tương tác nhỏ, khi lặp lại đủ nhiều, có thể sinh ra cấu trúc cực kỳ phức tạp.
Fractal đứng ngay ở ranh giới kỳ lạ đó:
giữa quy luật và hỗn loạn.
Thử vẽ Mandelbrot bằng Python
Ta có thể viết một phiên bản rất đơn giản.
1def mandelbrot(c, max_iter=100):
2 z = 0
3
4 for i in range(max_iter):
5 z = z * z + c
6
7 if abs(z) > 2:
8 return i
9
10 return max_iter
Hàm nhận một số phức c.
Ví dụ:
1print(mandelbrot(0))
2print(mandelbrot(1))
3print(mandelbrot(-1))
Ta bắt đầu bằng z = 0, sau đó liên tục tính:
1z = z * z + c
Nếu:
1abs(z) > 2
ta có thể kết luận chuỗi cuối cùng sẽ chạy ra vô cực.
Muốn tạo ảnh, ta lấy hàng triệu điểm:
1c = x + yi
trên mặt phẳng số phức.
Mỗi pixel tương ứng với một giá trị $c$.
Số vòng lặp trước khi điểm đó thoát ra ngoài có thể được dùng để tô màu.
Và thế là từ vài dòng code, một cái hang toán học vô tận mọc ra trên màn hình.
Fractal trong tự nhiên không hoàn toàn giống fractal toán học
Đây là chỗ cần phân biệt cho rõ.
Một fractal toán học có thể tự đồng dạng vô hạn.
Nhưng tự nhiên thì không.
Một cái cây không thể phân nhánh mãi xuống kích thước nhỏ hơn electron.
Một bờ biển không thể có chi tiết nhỏ mãi vô hạn.
Một bông Romanesco cũng đến lúc gặp tế bào, phân tử rồi nguyên tử.
Vì vậy nhiều cấu trúc tự nhiên chỉ fractal-like — tức có đặc tính fractal trong một khoảng kích thước nhất định.
Ví dụ rất đẹp là Romanesco.
Nhìn toàn bộ Romanesco, ta thấy những chóp lớn.
Nhìn từng chóp lớn, nó lại gồm những chóp nhỏ.
Nhìn chóp nhỏ, lại tiếp tục thấy cấu trúc gần giống.
Đây là một ví dụ trực quan rất đẹp về self-similarity trong sinh học. (Wikimedia Commons)
Tự nhiên không tạo ra fractal hoàn hảo.
Nó tạo ra những thứ còn thú vị hơn:
fractal có lỗi.
Có cành cong.
Có lá méo.
Có phần lớn hơn.
Có phần nhỏ hơn.
Chính những sai lệch đó khiến một cái cây trông giống một sinh vật, chứ không giống ảnh copy-paste bằng Ctrl+C Ctrl+V.
Fractal có ích gì ngoài việc làm hình nền?
Nhìn Mandelbrot zoom 4K lúc 2 giờ sáng đúng là một ứng dụng khá chính đáng.
Nhưng fractal còn có nhiều ứng dụng nghiêm túc.
Đồ họa máy tính
Muốn vẽ một ngọn núi bằng tay?
Rất mệt.
Bạn phải tạo:
- sườn lớn,
- đỉnh phụ,
- đá,
- khe,
- các biến dạng nhỏ.
Một cách khác là dùng các thuật toán sinh địa hình dựa trên nhiễu và cấu trúc đa tỷ lệ.
Thay vì lưu từng hòn đá, ta mô tả quy luật sinh ra độ gồ ghề.
Đây chính là tinh thần rất gần với fractal.
Mandelbrot và fractal geometry cũng có ảnh hưởng lớn tới sự phát triển của computer graphics, đặc biệt trong việc tạo những cảnh quan và cấu trúc tự nhiên có độ phức tạp cao. (IBM)
Antenna
Một số thiết kế antenna dùng hình học fractal để nhét những đường dẫn điện dài vào một diện tích nhỏ và tạo khả năng hoạt động trên nhiều dải tần.
Sinh học
Các cấu trúc như:
- hệ mạch,
- phế quản,
- mạng neuron,
- cấu trúc phân nhánh của thực vật,
đều có thể được nghiên cứu bằng những công cụ liên quan tới fractal và scaling.
Mạng và dữ liệu
Một ý tưởng fractal rất quan trọng không nhất thiết phải xuất hiện dưới dạng hình học.
Đó là:
Pattern ở quy mô nhỏ đôi khi tái xuất hiện ở quy mô lớn.
Traffic mạng theo:
- mili giây,
- giây,
- phút,
có thể chứa các tính chất thống kê liên quan.
Tương tự với nhiều chuỗi thời gian phức tạp.
Fractal vì thế không chỉ là chuyện “một hình nhìn giống chính nó”.
Nó còn là câu hỏi về scale:
Khi thay đổi kính phóng đại, thứ gì vẫn còn giữ nguyên?
Một khái niệm cực kỳ quan trọng: scale
Giả sử nhìn Google Maps.
Zoom cả Việt Nam.
Bạn thấy:
1TP.HCM
2Hà Nội
3Đà Nẵng
Zoom vào TP.HCM.
Bạn thấy:
1Quận
2đường lớn
3sông
Zoom tiếp.
1đường nhỏ
2hẻm
3nhà
Zoom tiếp nữa.
1cửa
2gạch
3vết nứt
4bụi
Mỗi mức zoom là một scale khác nhau.
Hình học truyền thống thường thích những vật mà thay đổi scale không gây nhiều phiền phức.
Fractal thì sống bằng chính sự phiền phức đó.
Nó hỏi:
Khi chúng ta zoom vào, quy luật nào vẫn còn tồn tại?
Một hình tròn khi zoom vào biên đủ lớn sẽ trông gần giống đường thẳng.
Nhưng fractal thì khác.
Zoom vào.
Vẫn lổn nhổn.
Zoom nữa.
Vẫn có chuyện.
Zoom nữa.
Lại thêm chuyện.
Nó là kiểu người bạn hỏi:
“Hết drama chưa?”
Nó trả lời:
“Chưa.”
Điều kỳ lạ nhất của fractal
Fractal khiến chúng ta phải bỏ một trực giác rất quen:
Muốn tạo thứ phức tạp thì phải cần bản thiết kế phức tạp.
Không nhất thiết.
Một công thức ngắn có thể tạo Mandelbrot.
Một luật phân nhánh đơn giản có thể tạo hình giống cây.
Một phép chia tam giác đơn giản sinh ra Sierpiński.
Tức là đôi khi lượng thông tin chứa trong kết quả lớn hơn rất nhiều so với cảm giác về lượng thông tin chứa trong quy tắc tạo ra nó.
Đây là tư tưởng xuất hiện ở rất nhiều nơi trong khoa học máy tính.
Ví dụ một chương trình:
1for i in range(1_000_000_000):
2 do_something()
Đoạn code rất ngắn.
Nhưng quá trình nó tạo ra có thể khổng lồ.
Hay một cellular automaton chỉ có vài quy tắc, nhưng sau hàng nghìn bước lại sinh ra pattern vô cùng phức tạp.
Fractal nhắc chúng ta một điều:
Đừng đánh giá độ phức tạp của một thế giới bằng độ dài của luật tạo ra thế giới đó.
Từ fractal nhìn ngược lại chính chúng ta
Có lẽ đây mới là phần thú vị nhất.
Con người thích chia thế giới thành những cái hộp.
Một cái cây là một vật.
Một khu rừng là nhiều cái cây.
Một thành phố là nhiều tòa nhà.
Internet là nhiều máy tính.
Nhưng khi nhìn những hệ thống phức tạp đủ lâu, ranh giới bắt đầu mờ đi.
Một cành cây có cấu trúc giống cái cây.
Một hệ thống đường nhỏ nối thành đường lớn.
Các mao mạch gom thành mạch máu.
Những con suối gom thành sông.
Những transaction nhỏ gom thành nền kinh tế.
Những neuron nhỏ gom thành một bộ não có thể ngồi suy nghĩ về neuron.
Và ở đâu đó giữa đống hỗn độn này, tự nhiên cứ lặp đi lặp lại vài kiểu tổ chức.
Không copy chính xác.
Không hoàn hảo.
Nhưng giống.
Một phần chứa bóng dáng của toàn thể.
Toàn thể lại sinh ra từ vô số phần nhỏ.
Fractal vì thế không chỉ đẹp vì những hình xoắn ốc đầy màu sắc.
Nó đẹp bởi nó cho chúng ta một kiểu kính mới để nhìn thế giới:
cái nhỏ và cái lớn đôi khi không hoàn toàn tách biệt.
Tổng kết
Fractal là những cấu trúc có chi tiết xuất hiện ở nhiều mức scale khác nhau, thường đi kèm tính tự đồng dạng.
Tam giác Sierpiński cho chúng ta thấy một fractal được tạo bằng đệ quy cực kỳ đơn giản.
Fractal dimension cho thấy “số chiều” thậm chí không nhất thiết phải là 1, 2 hay 3.
Nghịch lý đường bờ biển cho thấy kết quả đo phụ thuộc vào mức độ chi tiết mà ta quan sát.
Còn tập Mandelbrot đưa ý tưởng này tới một mức gần như điên rồ: chỉ từ phương trình
$$ z_{n+1}=z_n^2+c $$
ta có thể sinh ra một cấu trúc có biên phức tạp đến mức càng zoom vào càng tiếp tục xuất hiện những thế giới mới.
Và có lẽ đó là điều fractal muốn nói.
Một thế giới không nhất thiết cần những luật phức tạp để trở nên phức tạp.
Đôi khi chỉ cần một luật rất nhỏ.
Rồi lặp lại.
Lặp lại.
Lặp lại.
Đủ lâu.
Và từ đó, cả một vũ trụ mọc ra.
Bình luận