為什麼同樣的C++函數,在matlab混合編程中調用,和直接在VS2010中調用,計算結果不一致?
01-08
cpp函數是一個國外人的matlab 機器學習toolbox中用於混合編程的函數。
在matlab中,是將這個cpp函數通過mex編譯為mexw64文件,然後在matlab程序中調用。我在vs2010中直接調用這個函數,然後和matlab的結果對比,發現存在一定的誤差,最大達到0.001級別,函數中數據是float型的。C++函數都是一樣的,輸入的數據也一樣,只不過一個是matlab調用,一個是VS調用,輸出的數據就會有0.001級別的差異
沒給庫的出處地址沒給你的代碼沒給測試方法甚至沒給測試數據和結果在我看來你開這個問題僅僅是來發發牢騷,不像是想解決問題的
準確地說,這叫函數代碼一樣,輸入一樣。而函數代碼一樣,編譯器或編譯選項不一樣,即便輸入一樣,結果也往往會不一樣。建議看看vc裡面/fp:相關的選項。
你提供的信息不足:1.沒有給出該函數的實現2.沒有給出測試數據3.沒有給出你的測試方法,或者說你所說的誤差的判斷依據
最理想的是,你應該用最簡短的例子(不一定就是你的使用的函數)並且給出測試數據和你的測試方法以及其他必要信息,以方便他人重現出你所說的誤差,這樣才有辦法幫你分析和解決問題
目前你的問題的描述,只能讓人感覺「好神奇啊,為什麼會這樣呢?」或者「我有一千種猜測,我列舉一下,你看下有可能是哪種;算了你又沒給我錢,我幹嘛要浪費時間幫你寫下來1000種猜測,況且你的情況還不一定在這1000種裡邊」所以你這種提問方式大大降低了別人幫你解決問題的可能性和慾望--------------------注意到你在上述評論之後修改了你的問題描述,強調了「函數都是一樣的」,「輸入的數據也一樣」,但是這些還是不能代替上述說的那些,況且你也沒有說明你是如何測試的或者判斷依據。
發現錯誤的時候要懷疑每一個地方,而不是放著一些地方不管認為「問題肯定不是出在這裡」。你現在這些強調潛在意思就是說「我在這些地方肯定沒有搞錯,所以沒必要給你們說的那麼詳細」,我碰到過很多像你這樣的提問者,至少有95%以上的提問者他們的問題就出在他們自己不願意去查甚至不願意提供給他人的自己非常自信的部分中。C++是一門嚴重依賴編譯器(的版本號)的語言!
Mex是可以在vs裡面調試的,嘗試debug一下。看看是哪一步出了問題。
建議編譯成debug和release模式看看二者是否相同,不同很可能是初始化問題。然後再就是樓上說的/fp的問題。
1.矩陣行列存儲搞混了2.精度不一致
可能是數據的精度問題造成
有沒有可能轉mexw的時候自動轉double了
推薦閱讀:
※用於數學建模 安裝matlab 2014 需要安裝哪些組件?
※matlab的floor函數是否有bug?
※為什麼不少程序員認為Matlab的語言設計不優雅甚至比較丑?能否舉出一些例子來說明?
※matlab把數值數組轉成分立的字元組成的元胞數組?