MATLAB求函式零點 fzero函式

2021-06-20 20:06:45 字數 2709 閱讀 6017

6 函式的零點5。2 一元函式的零點5。2 任意一元函式零點的精確解【 * 例 5。2-1 】通過求 的零點,綜合敘述相關指令的用法。...

5.6 函式的零點

5.6.2 一元函式的零點

5.6.2.2 任意一元函式零點的精確解

【 * 例 5.6.2 .2-1 】通過求

(1)構造乙個內聯函式物件

被解函式

y=inline('sin(t)^2*exp(-a*t)-b*abs(t)','t','a','b'); %<1>

(2)作圖法觀察函式零點分布

a=0.1;b=0.5;t=-10:0.01:10; % 對自變數取樣,取樣步

y_char=vectorize(y); % 為避免迴圈,把 y 改寫成適合陣列運算形式。 <4>

y=feval(y_char,t,a,b); % 在取樣點上計算函式值。

clf,plot(t,y,'r');hold on,plot(t,zeros(size(t)),'k'); % 畫座標橫軸

xlabel('t');ylabel('y(t)'),hold off

圖 5.6.2 .2-1 函式零點分布觀察圖

(3)利用 zoom 和 ginput 指令獲得零點的初始近似值(在 matlab 指令窗中進行)

zoom on % 在 matlab 指令窗中執行,獲區域性放大圖

[tt,yy]=ginput(5);zoom off % 在 matlab 指令窗中執行,用滑鼠獲 5 個零點猜測值。

圖 5.6.2 .2-2 區域性放大和利用滑鼠取值圖

tt % 顯示所得零點初始猜測值(該指令可在 notebook 中執行)。

tt =

-2.0032

-0.5415

-0.0072

0.5876

1.6561

(4)求靠近 tt(4) 的精確零點

[t4,y4,exitflag]=fzero(y,tt(4),,a,b) %<11>

zero found in the interval: [0.57094, 0.60418].

t4 =

0 。 5993

y4 =

0exitflag =

1(5)求在 tt(3)附近的精確零點

從理論分析可知,

[t3,y3,exitflag]=fzero(y,tt(3),,a,b)

zero found in the interval: [0.58266, -0.59706].

t3 =

-0.5198

y3 =

0exitflag =1

圖 5.6.3 -0 兩函式的三維相交圖

(2)在某區域觀察兩函式 0 等位線的交點情況

clear;

x=-2:0.5:2;y=x;[x,y]=meshgrid(x,y); % 產生 x-y 平面上網點座標

f1=sin(x-y);f2=cos(x+y);

v=[-0.2, 0, 0.2]; % 指定三個等位值,是為了更可靠地判斷 0 等位線的存在。

contour(x,y,f1,v) % 畫 f1 的三條等位線。

hold on,contour(x,y,f2,v),hold off % 畫 f2 的三條等位線。

圖 5.6.3 -1 兩個二元函式 0 等位線的交點圖

(3)從圖形獲取零點的初始近似值

在圖 5.6.3 -1 中,用 ginput 獲取兩個函式 0 等位線(即三線組中間那條線)交點的座標。

[x0,y0]=ginput(2); % 在圖上取兩個點的座標

disp([x0,y0])

-0.7926 -0.7843

0.7926 0.7843

(4)利用 fsolve 求精確解。以求( 0.7926,7843 )附近的解為例。

本例直接用字串表達被解函式。注意:在此,自變數必須寫成 x(1), x(2) 。假如寫成 xy(1), xy(2) ,指令執行將出錯。

fun='[sin(x(1)-x(2)),cos(x(1)+x(2))]'; %<12>

xy=fsolve(fun,[x0(2),y0(2)]) %<13>

xy =

0.7854 0.7854

(5)檢驗

fxy1=sin(xy(1)-xy(2));fxy2=cos(xy(1)+xy(2));disp([fxy1,fxy2])

1.0e-006 *

-0.0994 0.2019

〖說明〗指令 <12><13> 可用以下任何一組指令取代。

(a)內聯函式形式指令

fun=inline('[sin(x(1)-x(2)), cos(x(1)+x(2))]', 'x'); % 項 'x' 必須有。

xy=fsolve(fun,[x0(2), y0(2)]);

(b) m 函式檔案形式及指令

先用如下 fun.m 表示被解函式(並在搜尋路徑上)

[fun.m]

function ff=fun(x)

ff(1)=sin(x(1)-x(2));

ff(2)=cos(x(1)+x(2));

然後執行指令 xy=fsolve('fun',[x0(2),y0(2)]) 。

第四步檢驗中的結果表明:所找零點處的函式值小於

options=optimset('fsolve');

options.tolfun

ans =

1.0000e-006

MATLAB求函式零點與極值

1.roots函式 針對多項式求零點 詳見matlab多項式及多項式擬合 2.fzero函式 返回一元函式在某個區間內的的零點.x0 fzero x x.2 3 x 4,1,5 只能求區間裡面的乙個零點,並且要求在給定區間端點函式值異號,所以使用之前應該先作圖,得出單個零點分布的區間,然後使用該函式...

函式零點的求解方法

有了函式後,我們怎麼用呢?方程的分類 單個方程按其係數的性質分為線性方程和非線性方程。一元非線性方程求解 fzero roots fsolve 多元非線性方程求解 fsolve fzero fsolve 比較 解 fzero 函式,初值,options 解 fsolve 函式,初值,options ...

消失的零點

注 本人於2018 01 07 11 22 19部落格 上午9點多醒來收到一封kettle資料同步失敗的郵件,於是起來準備看下原因,報錯 為 cannot parse 1990 04 15 illegal instant due to time zone offset transition asia...