運氣太好了!MATLAB計算出來的結果是錯的這種事情都遇上了

標題:運氣太好了!MATLAB計算出來的結果是錯的這種事情都遇上了

最近求解一個優化問題,由於存在x’Hx,需要矩陣H爲(半)正定矩陣才能保證x’Hx對向量x是凸函數。矩陣H是由一個方陣與其自身轉置相乘得到的,即H=AA’,以前遇到的矩陣H都是半正定的,但現在有個數據集(記爲D)的結果顯示算法不收斂,檢查之後發現其原因是針對該數據集D,矩陣H不是半正定的。呃,這就麻煩了,因爲暫時還沒能力從數學上證明矩陣H什麼時候是半正定的、什麼時候不是半正定的,只是以前從未遇到過矩陣H不是半正定的情況,所以就默認它是半正定矩陣了,但現在出現了意外情況,所以這個事情就必須得討論一下了。

百思不得其解之後,想到可能是數據集D過大導致的,因爲當前H是12646*12646的矩陣,而其它數據集都比較小(不過萬),於是嘗試只使用該數據集的一部分進行測試,發現當矩陣H的規模變小時,它的確就成爲半正定矩陣了。呃,這是怎麼回事呢?於是從算法本質上去思考,但始終無法解決~

突然想到針對該數據集D,自己曾在其它電腦(記爲PC2)上調試過這個程序,當時顯示算法收斂,所以才挪到了本電腦(記爲PC1)上來跑程序等結果,由於當時的程序版本未考慮到數據集的一些極端分佈情況(樣本x的K個近鄰與x都一模一樣)會使程序在處理某些其它數據集時報錯,所以程序進行了一小點改動以處理這種特殊呢況,這的確可能會導致針對數據集D時的H矩陣有輕微的變動,但如此輕微改變真的就會導致算法不收斂麼?

於是將原來在電腦PC2上針對數據集D收斂的程序版本拿到PC1上來跑,發現程序仍是不收斂,檢查之後發現H矩陣不是半正定的。呃,這就奇怪了,一模一樣的程序,兩個電腦的MATLAB版本都一樣(R2016),換個電腦爲什麼跑出來的結果就不一樣了呢?於是把這個程序在兩臺電腦上同時跑,在關鍵位置設置斷點,檢查結果是否一致。檢查了矩陣H之後,發現兩個矩陣幾乎是一模一樣的,但基於該矩陣得到的結果就不一樣了。又考慮到可能不同電腦的小數點取捨可能不一樣,雖然兩個電腦上的矩陣H幾乎一樣,但還是有非常微小的差異的,於是索性把電腦PC2上的矩陣H存下來拿到電腦PC1上來測試,發現其仍不是半正定矩陣,但該矩陣在電腦PC2上測試時就是半正定的。呃,看來問題找到了,兩臺電腦針對同一個矩陣H的計算結果是不同的。

由於本電腦PC1上仍安裝有另一個MATLAB版本R2017,打開另一個MATLAB對矩陣H進行測試,發現結果顯示矩陣H是半正定的,與PC2的結果一樣。呃,看來是本電腦PC1上的R2016版本的MATLAB計算錯了!!!

爲什麼會算錯呢?難道是本電腦PC1安裝了多個MATLAB版相互有影響?於是將另一個不常用的R2017卸載重啓,發現不管用;將R2016版本卸載重裝,發現也不管用,呃。。。

後來又換了兩臺電腦對矩陣H進行測試,發現計算結果都顯示它是半正定的,與PC2的結果一樣,看來這確實是本電腦PC1的MATLAB R2016算出來的結果是錯的~

難道是電腦的操作系統與MATLAB版本不兼容,畢竟本電腦PC1上的R2017版本的MATLAB計算結果是對的,考慮到電腦PC1的系統是購機時自帶的win10家庭中文版(據說相比於專業版會有很多功能限制),網上搜了個序列號將其升級成了win10專業版,繼續在R2016版MATLAB中測試,發現結果仍然是錯的;將MATLAB卸載重裝一遍後再測試,結果還是錯了~

呃,看來運氣太好真碰到小概率事件了。記得讀本科時,曾選過一個公選課《數學建模》,任課老師是學校的數學建模指導老師,曾經在課堂上說過MATLAB有時也會算錯。十多年過去了,也算是比較經常使用MATLAB,從未發現過計算結果是錯的這種情況,沒想到現在真的遇到了,好激動~

在測試矩陣是否爲半正定時,使用Heig=eig(H);求解矩陣的特徵值,半正定矩陣的特徵值不小於零;還可以使用[U,S,V] = svd(H);進行SVD分解,矩陣H的特徵值存在矩陣S的對角線上,然後使用Ssort=sort(diag(S));將特徵值取出觀察即可。

我將矩陣H、本電腦PC1使用R2016版本MATLAB計算所得其特徵值Heig、以及使用SVD分解得到的特徵值Ssort上傳到了網絡(備份一下),參見本文開篇的資源Heig_matlabR2016a_win10_i7-7500U.mat或鏈接https://pan.baidu.com/s/1we_LohtOnTDzNHSMxYVmeg 提取碼:pdel

值得注意的是,Heig和Ssort也是不同的,且兩者都是錯誤的,具體原因不詳。

僅以此文紀念這段傳奇的經歷!

附:本電腦PC1系統信息如下和計算出錯的MATLAB版本如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章