欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matlab----多项式、函数(更新ing)

程序员文章站 2022-03-02 10:49:36
...

多项式

多项式的表示

一个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

附:匿名函数与符号函数的转换

上面说的是符号函数转换为匿名函数,下面来看匿名函数转换为符号函数

[email protected](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
相关标签: matlab