多項式
多項式的表示
一個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