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