MATLAB多项式与符号运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 =
2 1
matlab规定多项式系数向量用行向量表示,
如:a(x)=2x3+4x2+6x+8; 对应a=[2,4,6,8]; b(x)= 2x3+6x+8; b=?
函数1:ploy2str() 作用:生成多项式表达式的字符串
p =[1.00,-6.00,-72.00,-27.00]; p是多项式p(x)=x3-6x2-72x-27的
matlab描述方法,我们可用: a=poly2str(p,'x')显示数学多项式的形式
代数方程组求解
matlab中有两种除运算左除和右除。 对于方程ax=b,a 为am×n矩阵,有三种情 况: 当m=n时,此方程成为“恰定”方程 当m>n时,此方程成为“超定”方程 当m<n时,此方程成为“欠定”方程
matlab定义的除运算可以很方便地解上 述三种方程
1.恰定方程组的解
方程ax=b(a为非奇异) x=a-1 b 矩阵逆
两种解: x=inv(a)b — 采用求逆运算解方程 x=a\b — 采用左除运算解方程
例: x1+2x2=8 2x1+3x2=13
方程ax=b
1 2
Fra Baidu bibliotek2 3
x1 = 8
x2 13
a x=b
a=[1 2;2 3];b=[8;13]; x=inv(a)*b
例:syms x y z; %注意:变量用空格隔 开 f=x*sin(exp(y))/z; diff(f,y,2) pretty(ans)
多项式求导与符号运算求导的区别
(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)
MATLAB的数值计算
—— matlab 具有出色的数值计 算能力,占据世界上数值计算软 件的主导地位
多项式运算
matlab语言把多项式表达成一个行量, 该向量中的元素是按多项式降幂排的。
f(x)=anxn+an-1xn-1+……+loa0 可用行向量 p=[an an-1 …… a1 +a0]表示
合次数,即用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)求单重积分 调用格式:
q1=quad(‘被积函数表达式’,’积分下限’,’积分上限’)
. 注意:函数表达式中运算符前面加“ ” 例:求积分 3 4 cos2 (2t) sin2 (t)dt
0
q1=quad('4*cos(2*t).^2+sin(t).^2',0,3*pi);
例:求函数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)
函数的求导
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为拟
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)
1、求一次导数 函数的导数可有diff命令来完成
格式为diff(f) 例: syms x %表示将x声明为符号变量,对 x进行符号运算,也就是把x作为函数的自变量 f=log(x); %将x的函数表达式赋值给f变量 result=diff(f)
注意:因为是符号变量运算,所以运算符前不用
加“.” 如:f=2*x^2
法找一个准确地基本解。
例: 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.欠定方程组的解
直线插值:在原始数据点之间用直线拟合 三次插值及三次样条插值:在原始数据点之间用三 次多项式曲线分段连接
三次插值和三次样条插值的区别
样条插值得到的曲线一阶、二阶导数连 续,而一般的三次插值可能会有一阶和 二阶导数的间断,在有些问题如高速飞 机的机翼外形、内燃机进排气门的凸轮 曲线上不允许出现这样的情况,必须用 样条插值。
当方程数少于未知量个数时,即不定 情况,有无穷多个解存在。 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
一组根用列向量表示。
多项式加减运算
计算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)
用符号变量运算求积分
(1)用符号变量求不定积分 调用格式:int(被积函数表达式,被积变量) 例: syms x y z; %表示声明3个符号变量x、y、z
%注意:变量用空格隔开 int(sin(x*y+z),x)
因为是符号变量运算,所以运算符前不用加“.”
(2)用符号变量求定积分
调用格式:int(被积函数表达式,被积变量,积分下限,积分上限)
例:a=[1,2,3]; % x2+2x+3 b=[2,3]; % 2x+3 polyder(a) ans = 2 2 c=polyder(a,b); poly2str(c,'x') ans =6 x^2 + 14x + 12
注释 conv(a,b) →2,7,12,9 →2x3+7x2+12x+9
曲线拟合例题2:
将下列离散点用三次样条插值拟合,并绘制:
(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]; xi=linspace(0,1,20); yi=interp1(x,y,xi,'spline'); %yi=interp1(x,y,xi,‘linear’); %表示线性插值 %yi=interp1(x,y,xi,'cubic'); %表示三次插值 plot(x,y,'o',xi,yi,'b');
多项式除运算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乘积的微分
(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)
并赋给yi plot(x,y, 'o',xi,yi,'b'); 注意:当拟合次数过高时,会造成曲线的振荡
拟合的次数不允许超过点数,即此例中n<=5
插值拟合
(1)插值的定义——是在给定的原始数据点之间用某些 特定的数学算法插入一些数据点,当原始数据点和插入数 据点连线后得到穿过原始数据点的光滑曲线。 (2)当不能很快地求出所需中间点的函数时,插值是一 个非常有价值的工具。 (3)Matlab提供了线性插值、三次插值和三次样条插值3 种选择。
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)
例: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即可。
x= 2.00 3.00
x=a\b x= 2.00 3.00
2.超定方程组的解
方程 ax=b ,m>n时此时不存在唯一解。 方法1:方程解 (a ' a)x=a ' b
x=(a‘ a)-1 a ’ b —— 求逆法 思考为什么不能x=inv(a)*b? 方法2: x=a\b —— matlab用最小二乘
多项式乘运算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 注:多项式乘运算不涉及补零的问题
插值函数:interp1 调用格式:interp1(x,y,xi,’method’) 其中: (1)x、y为离散数据的坐标向量,要求长度
必须相同 (2)xi为插入点的数据向量 (3)Method为插值方法,为字符串变量 有三种方法供选择: ’linear’、’cubic’、’spline’
分别表示线性插值、三次插值和三次样条插值
相关文档
最新文档