matlab-非线性方程求根函数及函数曲线绘制
Matlab中提供了很多求解非線性方程(y=f(x))的函數,剛開始使用,真的很困惑。全部。這里依據matlab的help文檔對這些函數做一些小小的總結
fsolve函數
用來求解非線性方程組:F(x)=0;當中,x是一個向量或者矩陣,F(x)的返回值是一個vector。以下是詳細用法(以x0為初始點。利用優化算法尋找函數fun(x)與y=0的交點,即fun(x) = 0的根):
局限性:僅僅能求解距離給定初始值近期的那個根
一個方程的情況
fun=x2+x+1
在新的m文件里,書寫該fun的計算函數
function y = fun(x)
y = x^2+x-6;
end
求解根
初值為-1時:
x = fsolve(@fun,-1)
結果為:result=-3
初值為2時:
x = fsolve(@fun,2)
結果為:result=2能夠看到,當給定的初始值不同一時候。fsolve的返回值不同。這是因為。fsolve返回的是距離給定初始點較近的那個根(fsolve在計算時,由初始點開始。逐步向零點逼近,當找到零點值后,優化停止,所以。這種方式僅僅能返回距離給定初始值x0近期的那個零點)
options參數
這里在求解根的時候,全部的優化參數都是使用的默認值,但實際上,優化參數能夠通過options進行設置。能夠設置詳細優化方法(Algorithm)、是否顯示每步迭代的結果(Display)、最大迭代步數(MaxIter)等, 設置方法例如以下:
options = optimoptions('','','')
x = fsolve(@fun,2,options )
方程組(以包括兩個方程的方程組為例)
y={y1=x21+x1?6=0y2=2x22+x2?6=0
在新的m文件里,書寫該fun的計算函數
function y = fun(x)
y(1) = x(1)^2+x(1)-6;
y(2) = 2*x(2)^2+x(2)-6;
end
求解根
初值為[-1,1]時:
x = fsolve(@fun,[-1,1])
結果為:result=[-3,1]初值為[2,-1]時:
x = fsolve(@fun,2)
結果為:result=[2,-2]
fzero函數
用來求解非線性方程的根f(x)=0;該函數通過推斷f(x)的符號是否發生變化來計算方程的根
詳細地,假設x0是方程的根。那么。該函數在點x0+Δ和x0?Δ處的函數值符號一定相反,所以,該函數不能用來求解相似于x2=0這種方程
局限性:僅僅能求解距離給定初始值近期的那個根(與fsolve的局限性形同)
以下給出一個樣例:
fun=x2+x+1
在新的m文件里,書寫該fun的計算函數
function y = fun(x)
y = x^2+x-6;
end
求解根
初值為-1時:
x = fzero(@fun,-1)
結果為:result=-3初值為2時:
x = fzero(@fun,2)
結果為:fzero=2初值為區間[-5,5]時:
x = fzero(@fun,[-2,5])
結果為:fzero=2
注意:當給定fzero為初識區間時,要求fun函數在區間的兩個端點的符號不同能夠看到。利用該方法求得的結果與利用fsolve的結果同樣,也是僅僅能返回距離給定初始值較近的那個根
options參數
這里的options參數與fsolve的設置方法同樣。比如:
options = optimoptions('','','')
x = fzero(@fun,2,options )
roots函數
該函數用來求解多項式方程的根,roots能夠返回多項式函數的全部根,比如,計算例如以下多項式方程的根:
fun=x3+2
用法例如以下:
roots([1 0 0 2])
這里的[1 0 0 -2]各自是x3、x2、x1、x0的系數,結果為:
-1.2599 + 0.0000i
0.6300 + 1.0911i
0.6300 - 1.0911i
root函數
該函數用來求解符號多項式方程的根,root能夠返回符號多項式函數的全部符號根,比如,計算例如以下多項式方程的根:
fun=x3+2
用法例如以下:
syms x
p = x^3 + 2;
result = root(p,x)
% or result = root(x^3 + 2,x)
結果為:
result =
root(x^3 + 2, x, 1)
root(x^3 + 2, x, 2)
root(x^3 + 2, x, 3)
該結果是符號計算結果(即result是符號變量),假設僅僅是須要該結果作為中間過程。那么直接將result帶入其它計算過程就可以,但假設須要該result的數值結果。那么能夠使用vpa函數,詳細地:
result_vpa = vpa(result)
結果例如以下:
result_vpa =
-1.2599210498948731647672106072782
0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i
0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i
這三個數值就是多項式方程fun=x3+2=0的三個根
能夠看到。與roots的計算結果同樣
方程求解函數小結
fsolve:計算非線性方程組的某個根(距離初始值較近的)
fzero:計算非線性方程的某個根(距離初始值較近那個)
roots:計算多項式方程的全部根
root:計算符號多項式方程的全部根
Matlab的函數曲線繪制
ezplot函數
繪制函數曲線explot(fun)
默認的顯示區間是[-2pi, 2pi]
實際中,能夠設置顯示區間,利用explot(fun,[xmin,xmax])
繪制’顯示函數’曲線(y=x2)
eg1: figure;explot('x^2')
結果例如以下:
能夠看到。因為沒有指定曲線的x取值范圍,所以是默認值[-6.28,6.28]
eg2: figure;explot('x^2',[-1,1])
結果例如以下:
能夠看到。因為設定了區間[-1,1]。所以x軸僅僅在區間[-1,1]內顯示
繪制’顯示函數’曲線(x2?y=0)
eg1: figure;explot('x^2-y')
結果例如以下:
能夠看到,因為沒有指定曲線的x取值范圍,所以是x、y軸的默認值都是[-6.28,6.28]、[-6.28,6.28]
eg2: figure;explot('x^2',[-1,1,-1,1])
結果例如以下:
能夠看到。因為設定了區間[-1,1,-1,1],所以x軸、y軸在區間[-1,1,-1,1]內顯示
利用函數句柄
首先。定義函數句柄
fh = @(x,y) x.^2 + y.^3 - 2*y - 1;
然后利用ezplot繪制該函數
ezplot(fh)
axis equal
實驗結果例如以下:
增加區間限制后
ezplot(fh[-10,10,-10,10])
axis equal
實驗結果例如以下:
能夠看到,僅僅顯示了區間[-10,10,-10,10]的圖像
總結
以上是生活随笔為你收集整理的matlab-非线性方程求根函数及函数曲线绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos6.5搭建流媒体服务器
- 下一篇: [LeetCode]: 100: Sam