很簡單的matlab程式,這個值為什麼等於乙個極小值但是不為0?

時間 2021-06-03 18:34:00

1樓:雄氏老方

一點程式設計上的小建議,如果你的函式中物理量都很小(例如e-7以下)。你可以調整公式裡面的物理量量綱。例如原來是kg/L 調整成ug/L 。這樣可以避免浮點數四捨五入誤差

2樓:「已登出」

捨入誤差的問題。

譬如 這樣乙個算式,我們都知道 時有

但是計算機在計算 的時候並不能以分數的方式儲存,只能以小數的方式儲存而且只能保留小數點後若干位數,所以導致計算機計算得到的 不等於0,而是乙個很小的數。

同理,如題,理論上確實是分母不等於0,error就等於0。但是,計算機只保留有限位數的緣故:

倒數第二步SO4_mob_ini = HSO4_mob_ini*Ka_HSO4/H_mob_ini; % mol/L

結果SO4_mob_ini只保留了16位數,並不是精確的所以最後一步結果不是0,而是很小的數

3樓:

matlab的數值計算是雙精度浮點數,本來就是有誤差的,這個也沒辦法解決和避免。

但是你如果非要要求精度那麼高的話可以把你這個改成符號計算,用syms,這樣會好點

Ka_HSO4

=sym

(10^(

-1.99

));SO4tot_mob_ini

=sym

(0.078

);% mol/l

初始值改成符號值之後會更準確一點

如何反駁「前端很簡單」的觀點?

BLS475 學前端需要多少本書?雙11我最少買了8本,從HTML,CSS,JS,到jQuery,Bootstrap,Vue.js,Node.js,ES6,TypeScrpit,這還不包括UI設計方面的。你就讓他看,生看,看到他能吐槽前端很簡單為止,看他個月能看完?我做手機遊戲時,只要看完一本coc...

這個圖左邊這個程式的輸出值不太懂為啥是10

張浩 實際上機試一下,開啟gcc的 Wall選項,把所有的warning處理掉。養成0 warning的好習慣,以後自然就懂了。 卡卡超人 因為printf執行成功時返回列印的字元個數。C89標準預設返回值為int 返回值一般是儲存在eax 看環境,ax rax 暫存器內,因為printstar執行...

怎麼用很簡單的語言解釋全息原理?

董唯元 嚴謹的解答請參考大神 Trivial 的回答,我只是來扯一點YY的私貨。簡單的說,就是在黑洞視界處,徑向自由度消失了,只剩下切向自由度。解釋如下 用史瓦西度規寫出黑洞的樣紙是醬嬸的 儘管爛俗且不嚴密,但還是想說 在 的時候,也就是在黑洞視界以內,空間變成了時間,時間變成了空間。呸,後半句不算...