matlab----多項式、函數

多項式

多項式的表示

一個p階的多項式可以用一個含有p+1個元素的向量表示,MATLAB表示多項式爲包含由下降冪排列的係數的行向量,例如

p(x)=2*x^2+1

可以表示爲

p = [2 0 1];

conv

多項式的乘法。

p1=[1 1];%它是x+1的係數矩陣
p2=[1 0];%它是x的係數矩陣
P=conv(p1,p2)
P=
    1    1    0
%P=[1 1 0],說明乘出來的多項式爲x^2+x

poly

  • 用根構造多項式。如x指多項式的根,**poly(x)**就得到該多項式的係數;
  • 生成矩陣的特徵多項式。如A爲某一矩陣,**poly(A)**就能夠得到該矩陣的特徵多項式的係數 ;

polyval

y=polyval(p,x);%根據多項式係數矩陣p求在x處的值

roots

x=roots(p);%求多項式p的根

polyder

polyder(p);%對多項式p求導

polyfit

p = polyfit(x,y,n);%根據數據點集(x,y)擬合一個多項式,多項式的最高次冪爲n,返回多項式係數矩陣

sym2poly

通過函數表達式(符號函數形式)產生係數矩陣

p=sym2poly(f);

poly2sym

通過係數矩陣產生多項式函數的表達式(符號函數形式)

f=poly2sym(p);

符號函數(Symbolic Function)

注:本節下matlab代碼共用變量

通過syms定義變量,直接寫函數表達式,這樣就定義了一個符號函數y

syms p q x y
p=x^2;
q=x^2+y^2;

符號函數圖像的繪製可以通過函數fplot(二維),ezplot(二維),ezsurf(三維),ezmesh(三維)

ezplot(p);%或者定義範圍ezplot(p,[-5,5]);
fplot(p);%同上
ezsurf(q);%或者定義範圍ezsurf(q,[-1,1]);或者ezsurf(q,[-1,1],[-1,1]); 
ezmesh(q);%同上

求符號函數在某一處的取值,

  • 一種方法是通過函數matlabFunction將符號函數轉爲匿名函數,再來計算函數值
f1=matlabFunction(p)
f2=matlabFunction(q)
f1(3)
f2(1,2)
%結果爲:
f1 = 
    @(x)x.^2
f2 = 
    @(x,y)x.^2+y.^2
ans =
     9
ans = 
     5

附:匿名函數與符號函數的轉換

上面說的是符號函數轉換爲匿名函數,下面來看匿名函數轉換爲符號函數

f3=@(t)t.^2;
syms t
f4=f3(t)    %f4中就是轉換而來的符號函數
  • 另一種方法是通過函數eval直接求符號函數在某一處的取值,首先需要給x賦特定的值
x=1;y=2;
eval(p)
eval(q)
%結果爲
ans = 
     1
ans = 
     5
  • 另一種方法是通過函數subs直接求符號函數在某一處的取值
subs(p,1)      %subs(p,x,1)
subs(q,[1 2])  %subs(q,[x y],[1 2])
%結果爲
ans = 
     1
ans = 
     5
%另外,subs(q,y,2)會得到x^2+4

字符串函數

  • 字符串轉換爲函數

str2func

fh = str2func(str)
%根據函數名稱或匿名函數的文本表示來構造函數句柄 fh
  • 函數轉換爲字符串

func2str

c = func2str(fh)
%構造字符向量 c,該字符向量包含與函數句柄 fh 相關聯的函數的名稱。如果 fh 與匿名函數相關聯,則 %func2str 返回表示該匿名函數的字符向量。

匿名函數(Anonymous Function)

求函數零點

roots

多項式求零點函數

fzero

求給定初值附近的一個數值解/返回一元函數在某個區間內的的零點

%調用格式:
x=fzero(fun,x0) %fun爲定義方程的函數或匿名函數;x0爲一個值或區間,作爲初始條件

只能求區間裏面的一個零點,並且要求在給定區間端點函數值異號,所以使用之前應該先作圖,得出單個零點分佈的區間,然後使用該函數求零點.若有多個零點,則需多次使用該函數.

fminbnd

求一元函數在某個區間內的最小值和對應的最小值點.

%調用格式:
[x0,fmin]=fminbnd(fun,a,b);%fun爲定義方程的函數或匿名函數;區間爲[a b]

solve

syms x
solve(2*x==1,x)   %現在不推薦用solve('2*t=1','t')
%結果爲
ans =
     1/2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章