当前位置:
文档之家› MATLAB多项式与符号运算
MATLAB多项式与符号运算
多项式除运算deconv()
a=[1,2,3];
% x2+2x+3
c = [4,13,28,27,18]; % 4x4+13x3+28x2+27x+18
(1) d=deconv(c,a)
d =4 5 6 →4x2+5x+6 (2) [d,r]=deconv(c,a)
余数
c除a后的整数
多项式求导
matlab提供了polyder()进行多项式的微分。 命令格式: polyder(p): 求p的微分 polyder(a,b): 求多项式a,b乘积的微分
多项式乘运算conv()
例:a(x)=x2+2x+3; b(x)=4x2+5x+6; c = (x2+2x+3)(4x2+5x+6) a=[1 2 3];b=[4 5 6]; c=conv(a,b)=conv([1 2 3],[4 5 6]) c = 4.00 13.00 28.00 27.00 18.00 p=poly2str(c,'x') p = 4 x^4 + 13 x^3 + 28 x^2 + 27 x + 18 注:多项式乘运算不涉及补零的问题
例:syms x; a=int(cos(x),0,pi/6)
例:syms x y; b=int(x^y,y,0,pi/6) pretty(b)
注:pretty()可以使结果更加整齐
(3)用符号变量求广义积分
当积分限某一具体数值变为正负无穷时定积分转变为广 义积分,在MATLAB中也只需将积分限变为inf或-inf即可。
插值函数:interp1 调用格式:interp1(x,y,xi,’method’) 其中: (1)x、y为离散数据的坐标向量,要求长度
必须相同 (2)xi为插入点的数据向量 (3)Method为插值方法,为字符串变量 有三种方法供选择: ’linear’、’cubic’、’spline’
分别表示线性插值、三次插值和三次样条插值
法找一个准确地基本解。
例: x1+2x2=1 2x1+3x2=2 3x1+4x2=3
12
1
2 3 x1 = 2
3 4 x2 3
a x=b
a=[1 2;2 3;3 4];b=[1;2;3];
解1 x=a\b 解2 x=inv(a'a) a' b
x=
x=
1.00
1.00
0
0.00
3.欠定方程组的解
方程ax=b(a为非奇异) x=a-1 b 矩阵逆
两种解: x=inv(a)b — 采用求逆运算解方程 x=a\b — 采用左除运算解方程
例: x1+2x2=8 2x1+3x2=13
方程ax=b
1 2
2 3
x1 = 8
x2 13
a x=b
a=[1 2;2 3];b=[8;13]; x=inv(a)*b
MATLAB在积分求导运算中的应用
(1)求单重积分 调用格式:
q1=quad(‘被积函数表达式’,’积分下限’,’积分上限’)
. 注意:函数表达式中运算符前面加“ ” 例:求积分 3 4 cos2 (2t) sin2 (t)dt
0
q1=quad('4*cos(2*t).^2+sin(t).^2',0,3*pi);
n1=length(x1); n2=length(x2); if n1>n2
x2=[zeros(1,n1-n2),x2]; elseif n1<n2
x1=[zeros(1,n2-n1),x1]; end; y=x1+x2
主程序: a=[2,4,6,8]; b=[3,6,9]; C=polyadd(a,b)
并赋给yi plot(x,y, 'o',xi,yi,'b'); 注意:当拟合次数过高时,会造成曲线的振荡
拟合的次数不允许超过点数,即此例中n<=5
插值拟合
(1)插值的定义——是在给定的原始数据点之间用某些 特定的数学算法插入一些数据点,当原始数据点和插入数 据点连线后得到穿过原始数据点的光滑曲线。 (2)当不能很快地求出所需中间点的函数时,插值是一 个非常有价值的工具。 (3)Matlab提供了线性插值、三次插值和三次样条插值3 种选择。
代数方程组求解
matlab中有两种除运算左除和右除。 对于方程ax=b,a 为am×n矩阵,有三种情 况: 当m=n时,此方程成为“恰定”方程 当m>n时,此方程成为“超定”方程 当m<n时,此方程成为“欠定”方程
matlab定义的除运算可以很方便地解上 述三种方程
1.恰定方程组的解
a=[1 2 3;2 3 4];b=[1;2];
a x =b
x=a\b
x=pinv(a)b
x=
x=
1.00
0.83
0
0.33
0
-0.17
多项式拟合
原理:MATLAB通过给定的离散点,找一 个n次多项式,使所有离散点到多项式 曲线的距离的平方和最小。
准则:最小二乘法 拟合函数:p=polyfit(x,y,n) 其中x、y为离散数据点的坐标向量,n为拟
一组根用列向量表示。
多项式加减运算
计算a(x)+b(x)
如:2x3+4x2+6x+8
3x2+6x+9
则:a=[2,4,6,8];
b=[3,6,9]
→b=[0,3,6,9]
c=a+b =[2,7,12,17]
→ 2x3+7x2+612x+17
编写子程序文件自动完成两多项式加减运算
函数文件: function y=polyadd(x1,x2)
合次数,即用n次多项式拟合,p为n次 多项式的系数
拟合程序例1:
将下列离散点用直线拟合,并绘制:
(0,11.2)、(0.2,16.5)、(0.4,20.4)、(0.6,26.3)、(0.8,30.5)、(1,28.7)
编程:
x=0:0.2:1; y=[11.2,16.5,20.4,26.3,30.5,28.7]; a=polyfit(x,y,1); %即用a1x+a2的直线表达式拟合 %下面开始绘制已经求出的直线a1x+a2 xi=linspace(0,1,50); yi=polyval(a,xi); %将xi的每一个元素作为横坐标带入 a1x+a2的表达式中,得出xi对应的纵坐标
当方程数少于未知量个数时,即不定 情况,有无穷多个解存在。 matlab可用两种方法求解: 方法1:用除法求的解x是具有最多零元素
的解 x=a\b 方法2:是具有最小长度或范数的解,这个
解是基于伪逆pinv求得的。
x=pinv(a)b
x1+2x2+3x3=1 2x1+3x2+4x3=2
x1 1 2 3 x2 = 1 2 3 4 x3 2
(2)双重积分 调用格式:
q2=dblquad(‘被积函数表达式’,xmin,xmax,ymin,ymax);
. 注意:函数表达式中运算符前面加“ ”
例:求
2 4
( y sin x x sin y)dxdy
3
q2=dblquad('y.*sin(x)+x.*cos(y)',3*pi,4*pi,pi,2*pi)
多项式求导与符号运算求导的区别
(1)多项式求导例子 a=[1,2,3]; % x2+2x+3 polyder(a) 结果:ans = 2 2 %代表2x+2 (2) syms x;
f=x^2+2*x+3; diff(f) 结果:ans=2*x+2
例:求f(x)=(x+exsinx)1/2的导数 程序 syms x; f=(x+exp(x)*sin(x) )^(1/2) diff(f) pretty(ans)
用符号变量运算求积分
(1)用符号变量求不定积分 调用格式:int(被积函数表达式,被积变量) 例: syms x y z; %表示声明3个符号变量x、y、z
%注意:变量用空格隔开 int(sin(x*y+z),x)
因为是符号变量运算,所以运算符前不用加“.”
(2)用符号变量求定积分
调用格式:int(被积函数表达式,被积变量,积分下限,积分上限)
例:求函数g(x)=1/(1+x2)在1到正无穷的广义积分 程序:syms x;
g=1/(1+x^2); int(g,1,inf) 例:求函数f(x)=1/(x2+2x+3)在负无穷到正无穷的广义积分 程序:syms x; f=1/(x^2+2*x+3); int(f,-inf,inf)
函数的求导
2、求高阶导数
格式:diff(f,n) 其中n为求导的阶数 例:求y=e-2xcos(3x1/2)的4阶导数 程序:
syms x; y=exp(-2*x)*cos(3*(x)^(1/2)) diff(y,4) pretty(ans)
3、多元函数求导
调用格式: diff(函数表达式,被求导变量,n)
a=x^3 - 6 x^2 - 72 x – 27
并将表达式的结果以字符串的形式赋值给变量a
函数2:roots()
作用: 求多项式的根
a=[1,-3,2]; %对应多项式x2-3x+2 %若求 方程x2-3x+2=0的根 x=roots(a) 则x =