matlab河南工业大学课件第4章(1)_2_2

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求多项式的符号形式 求多项式的乘积 求多项式的除法 求多项式p的导数 求多项式p*q的导数 求多项式p/q的导数
代数多项式求值 矩阵多项式求值
求多项式的根
非线性方程的数值求解
非线性方程
多项式函数
非线性方程
非线性方程组
roots
fzero
fsolve
17
非线性方程的根
Matlab 非线性方程的数值求解
控制工程中的程序设计
授课教师:冯肖亮 E-mail: fengxl2002@161.com
1
河南工业大学 电气工程学院
第四章
数值问题求解
---多项式运算与非线性方 程求解
2
Matlab 多项式运算
Matlab的多项式表示
在 Matlab 中,n 次多项式是用一个长度为 n+1 的向量来表示,缺少的幂次项系数为 0。例如:
%字符串 %匿名函数的函数句柄
f=inline('x^3-3*x+1'); fzero(f,2) %内联函数
fzero(@(x)x^3-3*x+1,2)
特别注意:f 不是方程!也不能使用符号表达式!
如,syms x; f=x^3-3*x+1; fzero(f,2) %error!
19

>> >> >>
k1=polyder([2,-1,0,3]) k2=polyder([2,-1,0,3],[2,1]) [k2,d]=polyder([2,-1,0,3],[2,1])
8
多项式的值
计算多项式在给定点的值
代数多项式求值
y = polyval(p,x)
计算多项式 p 在 x 点的值
9
多项式的值
矩阵多项式求值
Y=polyvalm(p,X)
采用的是普通矩阵运算, 且X 必须是方阵 例:已知 p(x)=2x3-x2+3, 则求其代数多项式与矩阵多项式 polyvalm(p,A) = 2*A*A*A - A*A + 3*eye(size(A)) polyval(P,A)=2*A.*A.*A-A.*A+3*ones(size(A))
22
例题:
sin x y 2 ln z 7 y 3 3 x 2 z 1 0 x y z 5
在命令窗口输入: x0=[1 1 1]; x=fsolve(@fun, x0)
y(1) sin x(1) x(1) 2 ln x(1) 7 0 x (2) 3 y(2) 3x(1) 2 x(3) 1 0 y(3) x(1) x(2) x(3) 5 0
[2, 1, 0, 3] [ 0, 0, [ 2, 1] [2, 1, 2, 4]
多项式四则运算
例:
把多项式a(x)与多项式 b(x)相加求解如下:
所得结果代表的多项式为:
d ( x) 2x3 6x2 12x 20
多项式四则运算
多项式乘法运算: k = conv(p,q)
function y=fun(x) y(1)=sin(x(1))+x(2)^2+log(x(3 ))-7; y(2)=3*x(1)+2^x(2)-x(3)^3+1; y(3)=x(1)+x(2)+x(3)-5; 2.3959 2.0050
23
x= 0.5991
符号求解
符号求解方程:solve。两种格式: s=solve(f,v):求方程关于指定自变量的解; s=solve(f):求方程关于默认自变量的解。
7
多项式的求导
多项式的求导: polyder;有3种格式:
k=polyder(p) : 多项式 p 的导数;
k=polyder(p,q): p*q 的导数;
[k,d]=polyder(p,q):p/q 的导数,k 是分子,d 是分母 例:已知 p(x)=2x3-x2+3,q(x)=2x+1 , 求 p’,(p.q)’,(p/q)’.
24
符号求解
solve 也可以用来解方程组 solve( f1 , f2 , ... , fN , v1 , v2 , ... , vN)
求解由 f1 , f2 , ... , fN 确定的方程组关于 v1 , v2 , ... , vN 的解
x 2 y z 27 例:解方程组 x z 3 x 2 3 y 2 28
18
非线性方程的根
fzero 的另外一种调用方式
fzero(f,[a,b]) 或 fzero(f,x0)
2点说明:
求方程 f=0 在 [a,b] 区间内或x0附近的根。
方程在 [a,b] 内可能有多个根,但 fzero 只给出一个
参数 f 可通过以下三种方式给出: fzero('x^3-3*x+1',2)
13
部分分式展开函数residue
residue函数可以完成有理多项式的部分分式展开,它是一个对 系统传递函数特别有用的函数,其调用格式为:
格式一:[r,p,k]=residue(b,a)
功能:把b(s)/a(s)展开成:
rn r1 r2 b( s ) ..... k a( s) s p1 s p2 s pn
fzero(f,x0):求方程 f=0 在 x0 附近的根。
4点说明:
方程可能有多个根,但 fzero 只给出距离 x0 最近的一个
x0 是一个标量,不能缺省 fzero 先找出一个包含 x0 的区间,使得 f 在这个区间两个端点 上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果 找不到这样的区间,则返回 NaN。 由于 fzero 是根据函数是否穿越横轴来决定零点,因此它无法 确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有 零点。
11
多项式的零点
计算多项式的零点(根)
x=roots(p) :若 p 是 n 次多项式,则输出是 p=0 的 n
个根组成的 n 维向量。 例:已知 p(x)=2x3-x2+3, 求 p(x) 的零点。
>> >>
p=[2,-1,0,3];
x=roots(p)
若已知多项式的所有零点,则可用 poly 函数给出该 多项式,如:
例:计算以下方程的根

1) 求sinx在3附近的零点; 2) 求cosx在[1,2]范围内的零点; 3 3) x 2 x 5 0 3 4) x 2 sin x 0
本例较简单,可直接在命令窗口输入命令求解: 1) fzero(@sin,3) 2) fzero(@cos,[1,2]) 3) fzero(@(x) x^3-2*x-5,1); roots([1 0 -2 -5]) 4) fzero(@(x) x^3-2*sin(x),1)
在 Matlab 中多项式是用它的系数向量来表示的。
例:2x3-x2+3 <-> [2,-1,0,3]
注:系数中的零不能省!
多项式的符号形式:poly2sym
如,>> poly2sym([2,-1,0,3])
运行结果:ans = 2*x^3-x^2+3
4
多项式四则运算
多项式加减运算:Matlab没有提供专门进行多项 式加减运算的函数,事实上,多项式的加减就是其所 对应的系数向量的加减运算。 对于两个次数相同的多项式,可以直接对其系数 向量进行加减运算; 如果两个多项式次数不同,则应该把低次多项式 中系数不足的高次项用0补足,然后进行加减运算。 例: p1 2 x 3 x 2 3 p2 2 x 1 p1 p2 2 x 3 x 2 2 x 4
例:计算多项式 2x3-x2+3 和 2x+1 的乘积
>> >> >> >>
p=[2,-1,0,3]; q=[2,1]; k=conv(p,q) %乘积多项式的向量形式
poly2sym(k)
%乘积多项式的符号形式
多项式除法运算: [k,r] = deconv(p,q)
其中 k 返回的是多项式 p 除以 q 的商,r 是余式。 即,[k,r]=deconv(p,q) <==> p=conv(q,k)+r
注:若 x 是向量或矩阵,则采用数组运算 (点运算)! 例:已知 p(x)=2x3-x2+3,分别取 x=2 和一个 22 矩阵,
求 p(x) 在 x 处的每个分量上的值
>> >> >>
p=[2,-1,0,3]; x=2; y = polyval(p,x) x=[-1,2;-2,1]; y = polyval(p,x)
其中,r代表余数数组,p代表极点数组,k代表常数项。
14
部分分式展开函数residue
例:
10s 20 将有理多项式 展开成部分分式。 3 2 s 8s 19s 12
6.6667 5 1.6667 0 即有理多项式可展开为: s 4 s5 s 1 15
多项式运算小结 poly2sym(p) k = conv(p,q) [k,r] = deconv(p,q) k = polyder(p) k = polyder(p,q) [k,d] = polyder(p,q) y = polyval(p,x) Y = polyvalm(p,X) x = roots(p) 特别注意:多项式运算中,使用的是多项式 系数向量, 不涉及符号计算! 16
2点说明:
f 可以是用字符串表示的方程,或符号表达式;
若 f 中不含等号,则表示解方程 f=0。
例:解方程 x^3-3*x+1=0
>> >> >>
syms x; f=x^3-3*x+1;s=solve(f,x)
s=solve('x^3-3*x+1','x') s=solve('x^3-3*x+1=0','x')
3) fzero不能获得多项式的多重根,尤其是复数根。 而roots函数求解,则可获得所有根
21
函数fsolve
与fzero函数只能求解单个方程的根不同,fsolve
函数可求解非线性方程组的解。其算法采用Βιβλιοθήκη Baidu是最
小二乘法。
调用格式:x= fsolve(fun,x0)
定义待求解方程时,必须首先将方程组变换成 F(X)=0的形式!
>> [x,y,z]=solve('x+2*y-z=27','x+z=3', ... 'x^2+3*y^2=28','x','y','z') 输出变量的顺序要书写正确!
25
求解方程函数小结
roots(p): 求多项式的所有零点,p 是多项式系数向量。
fzero(f,x0): 求 f=0 在 x0 附近的根,f 可以使用 inline(内联函数)、字符串、或 @(函数句柄),但不能是方程或符号表达式! fsolve(fun,x0): 求非线性方程组fun=0在x0 附近的根。
p=poly(x) % -> p(x)=(x-x1)(x-x2)…(x-xn)
12
% 其为向量形式且和原多项式差一个因子an
例: 已知 f(x)
(1) 计算f(x)=0 的全部根。
(2) 由方程f(x)=0的根构造一个多项式g(x),并与f(x)
进行对比。
命令如下:
P=[3,0,4,-5,-7.2,5]; X=roots(P) G=poly(X) %求方程f(x)=0的根 %求多项式g(x)
20
3点说明
1)除了采用匿名函数外,当然可以采用句柄函数定 义函数
x=fzero(@fun,1) function y=fun(x) y=x^3-2*sin(x);
2)初值的选择对于解有影响,不同的初值可能获得 不同的解

可以根据感兴趣的解的区间确定初值范围 可以作出函数在一定范围内的曲线,直观的确定解的大致范围
命令为:
>> >> >>
p=[2,-1,0,3]; x=[-1, 2;-2,1]; polyval(p,x) polyvalm(p,x)
10
例6-20 仍以多项式x4+8x3-10为例,取一个2×2矩阵 为自变量分别用polyval和polyvalm计算该多项式的 值。 A=[ 2 5 ;3 6]; p=[1 8 0 0 -10]; A1=polyval(p,A); A2=polyvalm(p,A);
p( x) an x n an1x n1 a1x a0
在 Matlab中,用其系数的行向量表示该多项式:
[an , an1, , a1, a0 ]
3 2 例: 2 x x 3
[2, 1, 0, 3]
注:系数中的零不能省!
Matlab 多项式运算
Matlab 中多项式的表示方法
相关文档
最新文档