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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章