在一個旋轉餐廳面擺一個撞球檯, 觀察球的軌跡, 數學式會變成什麼樣子? (如果它轉得夠快的話啦) 離心力, 每當公車轉彎時都可以感受得到; 科氏力, 常常聽到但一直覺得理解得有點心虛。 我偏好用精準但不要太難的數學式去理解物理, 這樣即使省略囉唆的數學運算過程, 還是可以很放心地把最終得到的物理知識放進我的信仰體系裡面。 很認真地搜尋到這篇 (正好符合我的程度與偏好的) 文章: Non-Inertial Frames, 又有很棒的漫畫, 一定要導讀/分享一下重點。
2024年10月16日 星期三
2024年5月9日 星期四
透過 maxima 感受「平方反比定律」 的神奇
忘記很久以前在哪裡讀到, 說 萬有引力的平方反比定律
裡面這個 "2" 次方是很神奇、 很剛好的數字。 也忘記到底是怎麼剛好法。
最近心血來潮, 開始讀 向量場的數學,
在 Anchordoqui 寫的講義
裡面讀到一個範例 (5.3 節範例 3):
令 r=(x,y,z) 表示空間中一個起始於原點的向量。
如果向量場 vf3 的數學式是: vf3(r) = r/|r|^3,
那麼 vf3 的散度 (divergence) 到處都是零。
讀者不用擔心高深的數學, 這裡我只假設讀者知道純量場、 向量場跟偏導數的定義。
至於一個向量場 vf3 的散度, 它只不過是一個
公式很簡單的純量場。
至於它有什麼物理意義或數學特性, 就暫時先隨便無所謂了。
2023年6月25日 星期日
判斷字串長度是否為質數的正規表示式
讀到一個神奇的正規表示式, 竟然可以拿來判斷字串長度是否為質數?!
^x?$|^(xx+?)\1+$
"|" 的左邊很簡單, 只是在比對長度為0或者1的字串。
比較燒腦的右邊則是在嘗試比對 「長度恰好為 p*(q+1)」 的字串。 小括弧裡面的部分抓取 「長度至少為2的子串, 越短越好」。 這裡用 non-greedy 的 +? 而不是較常見的 (greedy 的) + 來表達「越短越好」。 後面的 \1+ 表示 「重複前面小括弧比對成功的同一字串任意次, 至少1次」。 如果小括弧內的字串長度為 p, 後面的成功比對次數為 q, 那麼整個字串的長度就是 p*(q+1), 不是質數。
用 python 寫, 程式長這樣:
import re
def is_prime(n):
return not re.match(r'^x?$|^(xx+?)\1+$', 'x'*n)
def primes_up_to(n):
return [ i for i in range(n) if is_prime(i) ]
primes_up_to(100)
這一篇 有更詳細的解說。
2019年8月7日 星期三
尺規作圖遊樂場 Dr. Geo
還記得小時候學的 (沒有刻度的) 直尺與圓規作圖嗎?
光用這兩個工具, 就可以畫出相似三角形、 三角形的外接圓/內切圓等等圖形。
這是很燒腦又很好玩的益智遊戲。
用電腦畫更好玩, 因為繪圖完成後,
你可以用滑鼠抓著原圖的頂點或圓心,
改變原圖 (例如三角形) 的大小/形狀/位置的同時,
看著衍生圖 (例如外接圓或內切圓) 跟著變動, 超有成就感!
十幾年前我寫過
DrGeo: 物理老師也會心動的幾何教學玩具。
後來 Dr. Geo 大改版; 幾個月前得知:
新版的 Dr. Geo 不僅支援中文顯示,
也支援中文輸入, 今天終於要來重寫一篇新版的介紹文了。
2018年9月2日 星期日
資料視覺化幫我重新發現克卜勒第三定律
如果你沒空看 18 分鐘的 TED 演講 Hans Rosling 用前所未有的方法詮釋數字統計, 那麼至少要欣賞一下這個 4 分鐘的短片 「200 年, 200 個國家」:
資料視覺化可以幫我們從枯燥的數字當中, 一眼看出奇特、 令人驚訝的現象。 而且即使我們手邊沒有任何特殊的資源, 還是可以玩出一些有趣的東西。 今天我們要重新發現 (天文學上的) 克普勒第三定律。
2017年12月3日 星期日
用 GRASS 繪製燦坤各分店的勢力範圍地圖 Voronoi Diagram
想像你有一張 「中華電信基地臺分佈地圖」,
並且假設每個基地臺的功率都一樣大。
地圖上的每一個點都可以問: 「哪一個基地臺離我最近?」
以便決定哪個基地臺的訊號比較強、 我的手機要跟誰連線。
以 (不會移動的) 「偶像 - 粉絲」 之間的關係來比喻,
每個偶像有自己的勢力範圍, 範圍內的所有點就是它的粉絲。
各勢力範圍之間的分界線由相鄰兩偶像的垂直平分線所組成。
這樣畫出來的圖稱為 Voronoi Diagram。
因為我拿不到基地臺座標, 所以只好改畫燦坤各分店的勢力範圍地圖。
目前可能沒什麼用, 因為分店跟粉絲的直線距離沒有太大意義;
但以後出現無人機送/取貨業務時, 這張地圖可能就有用了。
2017年11月7日 星期二
多邊形求面積與地理中心/形心/幾何中心近似值
最近想要處理 osm 上面撈出來的便利商店資料。
其中有些以點標示, 有些以多邊形標示。
為了簡化問題, 想用多邊形的
地理中心 (點) 來取代多邊形 (面)。
以數學術語來說, 就是需要計算
幾何中心, 也就是 centroid, 亦稱為形心。
在
平面上的多邊形形心計算公式 裡面, 還需要順便計算面積。
所以我寫了
gj-area-centroid.py 來計算 geojson
簡單多邊形的面積與形心的近似值。
2017年7月20日 星期四
資料科學/機器學習的好用入門工具 t-SNE 幫你看見高維度數值資料
想像你有一個試算表, 裡面有幾十個數值欄位,
還有幾個 「分類用」 的字串欄位。
你想問: 如果我拿到一筆資料的所有數值欄位,
是否可以猜出它屬於哪一個分類?
比方說, 已知一個人的身高/體重/BMI/心跳速率/血壓/睡眠時間/肝指數GOT、GPT/...
是否可以猜出他比較可能是哪一種血型/星座/生肖/職業/...?
(有點毛毛的例子, 不過也正好提醒大家:
現代的趨勢就是這樣 -- 你的隱私, 就是政府或大企業手中的大數據。)
這是機器學習領域裡面典型的分類問題 (classification)。
如果資料量不大 (例如只有幾百筆或幾千筆資料、
每筆只有幾十個或幾百個欄位),
可能不足以拿來訓練複雜的人工智慧演算法; 又或者你有大量的資料,
但想要在全力運算之前小量取樣,
並且用一個操作簡單運算量較低的演算法、
以不是很精確但可以視覺化的方式迅速了解你的資料長相。
這時, 屬於非監督式學習類型的 t-SNE
演算法就非常適合拿來用肉眼觀察資料的群聚/分類現象。
2016年8月13日 星期六
試算表按姓名/國別/分類/群組/... 等等標籤來分項/分組加總
你有一個試算表, 其中有一個數字欄位 (例如金額/人口/面積), 還有一個文字欄位 (例如商品名稱/團隊名稱/姓名), 現在想要根據這個文字欄位來對數字欄位分項/分組加總, 把相同商品名稱 (或相同團隊名稱、 或相同姓名) 的所有列的數字欄位全部累加起來, 該怎麼做? 在 LibreOffice/OpenOffice/google sheet/excel 等等各家試算表軟體裡面, 都有 (1) subtotal (2) pivot table (3) sumif 三種方式都可以達到相同的效果。 本文採用 LibreOffice Calc, 分別以這三種方法來處理這兩個範例:
- 處理 blockbuster.csv 「有史以來票房前五十名的電影及導演列表」 (從 1 和 2 整理出來的) 從而製作出 「導演-導過最賣座幾部片票房總額」 的對照表 ( 成果檔)。
- 處理 countries.csv 「全球各國人口及面積列表」, (從 這裡 整理出來的) 從而製作出 「六大洲人口密度列表」 ( 成果檔)。
這三個方法也可以拿來應用於統計各國奧運得獎數、 朋友旅遊結束後拆帳、 公司部門之間比較績效等等場合。
2012年12月26日 星期三
HTML 網頁內嵌 MathML 數學式及 SVG 向量圖
廿年前讀博士班時, 我那份有點像是數學系產品的論文是用 LaTeX 寫的。 LaTeX 的排版真的超讚; 不過它也很龐大。 相對地, 改用 HTML 製作講義, 就輕簡很多, 而且不論走到哪裡, 幾乎每一部電腦都可以讀寫。 至於數學式, 幾年前曾經試著把 MathML 內嵌到 HTML 裡面, 沒成功。 今年又教到微積分, 於是再試一下, 竟然就發現 firefox 支援 HTML 網頁內嵌 MathML 數學式及 SVG 向量圖! 真是太讚了! 我用的是 firefox 17; 讀者留言表示 opera 和 chromium 也可以; chrome 23 只能顯示 SVG 不能顯示 MathML; konqueror 4.9.2 則是兩者都無法顯示。
2011年4月5日 星期二
Gnuplot 十分鐘的 3d 曲面奇航
2010年1月16日 星期六
一些 logo 語言的資源
- 指令列表 (中文)
- The KTurtle Handbook 完整英文手冊
- Logo 15-word challenge 15 個指令以內的 logo 程式畫出來的圖片集錦。
給大人看的部分: logo 語言 是為小朋友設計的學習程式語言入門玩具。 kturtle 是一個實作。 有些 logo 語言允許多隻烏龜同時跑來跑去一起畫圖。 (待補)
大人問小孩: 「全世界的玩具隨便你挑? 這怎麼可能?
如果我要的玩具只有一個, 正好又被別人借走了呢?」