1樓:醉蝶翩翩
我也很好奇 就試了一下 fzero(@(x)x^2-1,0.05)時,ans=1,。fzero是一個數值搜尋過程,依賴於函式特性,值的指定,以及matlab所能識別的最小步長。
如果想計算更準確,可以用符號函式求解0點。符號函式不用關心具體的函式值,完全當做符號處理,所以,不存在上述不穩定因素。
2樓:匿名使用者
這是一個很好的問題,雖然看似簡單,但涉及到很多值得思考的問題。
首先,應該明確一點——fzero求函式零點是和初值的選取有密切關係的,例如,x^2-1有兩個零點,取不同的初值,可能會求得不同的零點,如下圖所示。
從圖中能發現一些奇怪的現象,例如:
>> fzero(f,0.01)
ans =
-1>> fzero(f,0.16)
ans =
1>> fzero(f,0.161)
ans =
-1>> fzero(f,-0.01)
ans =
1>> fzero(f,-0.16)
ans =
-1>> fzero(f,-0.161)
ans =
1按常理,應該求得距離初值比較近的零點才對,但上面的例子顯示,事實並非如此,甚至,求得相同零點所對應的初值範圍還不連續,的確很讓人崩潰。。。
說明一下fzero求零點的基本步驟:它會首先確定一個區間,使得區間兩端的函式值異號,這樣,只要函式連續,就能夠求出一個零點。
確定區間的過程與初值x0有關,如果x0非零,就以x0/50為初始步長,向正負兩個方向分別擴充套件區間,如果滿足函式值異號,則確定區間的步驟完成,否則按照sqrt(2)的倍數增大步長,繼續擴充套件區間。需要注意的是,擴充套件區間時,按照先負方向減步長、後正方向加步長的順序,而且一旦左端點滿足要求就會終止,這樣,就可能出現從某個正的初值x0出發,分別向正負方向n次擴充套件區間,直到n+1次時,剛好負方向的符號改變,從而這個區間就確定為包圍了負方向(例如-1)這個零點。
以上應該大致可以解釋,為什麼不是象直覺理解的那樣「求出的零點應該靠近初值」。
3樓:匿名使用者
都說簡單問題了,還問?
關於MATLAB符號運算的問題,求解matlab符號運算的問題
1 matlab的符號運算是藉助於其它符號運算核心完成的,2008a之前是用maple,2008b之後用mupad,不同版本對符號運算的具體支援可能存在差別,例如,你說的第一個問題,我在6.5和2007b 2013a等幾種版本下測試,用這兩種寫法都可以得到相同的結果 x y solve eq1,eq...
matlab呼叫opencv庫的mat類imread函式不能
零點 我試了下你的 編譯的時候都沒有問題。這裡想請教下您一個問題,如果遇到過,麻煩指教下。問題是這樣的,我用了上邊可以顯示 的 編譯通過,然後我輸入一張 如 function filename 同一路徑下的 or function path to filename 斜槓和反斜槓都試過了 這樣都可以顯...
matlab如何執行程式啊,如何執行matlab程式
不是沒反應,應該是讓你輸入一個分數,比如95,再回車看有沒有反應 如何執行matlab程式?1 開啟matlab軟體。2 找到指定的m檔案,並開啟。3 在選單欄找到 4 選中不需要執行的 全部選中。5 選中後點選 6 這是看到 變成了綠色,說明已經註釋好,即不會執行。7 再次點選執行,會發現綠色部分...