MATLAB求代数方程的近似根(解)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
k = polyder(p) k = polyder(p,q) [k,d] = polyder(p,q)
y = polyval(p,x) Y = polyvalm(p,X)
多项式运算中, 使用的是多项式
系数向量,
不涉及符号计算!
x = roots(p)
线性方程组求解
线性方程组求解
linsolve(A,b):解线性方程组 Ax b
p2 2x 1 p1 p2 2x3 x2 2x 4
[2, 1, 0, 3] [ 0, 0[,2,1] [2, 1, 2, 4]
多项式四则运算
多项式乘法运算: k = conv(p,q)
例:计算多项式 2x3 x2 3 和 2x 1 的乘积 >> p=[2,-1,0,3]; >> q=[2,1]; >> k=conv(p,q);
多项式除法运算: [k,r] = deconv(p,q) 其中 k 返回的是多项式 p 除以 q 的商,r 是余式。 [k,r]=deconv(p,q) <==> p=conv(q,k)+r
多项式的求导
polyder
k=polyder(p) : 多项式 p 的导数; k=polyder(p,q): p*q 的导数; [k,d]=polyder(p,q): p/q 的导数,k 是分子,d 是分母
fsolve [x,fval,flag,out]=fsolve(fun,x0,options): 参数大部分与fzero相同,优化参数更多,更灵活。 注意x0的长度必须与变量的个数相等。
它与fzero的区别是,算法不同,fsolve的功能强大多很多,它可 以直接方便的求解多变量方程组,线性和非线性,超静定和静不 定方程,还可求解复数方程。 fun同样可以是句柄、inline函数或M文件,但是一般M文件比较 多,这是由于fsolve是解方程组的,目标函数一般比较烦,直接 写比较困难
>> p=[2,-1,0,3]; >> x=roots(p)
若已知多项式的全部零点,则可用 poly 函数给出该多 x2 ) (x xn )
多项式运算小结
poly2sym(p,’x’) k = conv(p,q)
[k,r] = deconv(p,q)
多项式的值
矩阵多项式求值
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))
例:解方程组
x
2yz xz3
2
x 3y 8
>> A=[1 2 –1; 1 0 1; 1 3 0]; >> b=[2;3;8]; >> x=linsolve(A,b)
b是列向量!
非线性方程的根
Matlab 非线性方程的数值求解 fzero(f,x0):求方程 f=0 在 x0 附近的根。
optimset('Display','off'))
>>function f=myfun(x) f=[x(1)-0.6*sin(x(1))-0.3*cos(x(2)),
x(2)-0.6*cos(x(1))+0.3*sin(x(2))]; >>[xy,f,exit]=fsolve(@myfun,[0.5,0.5]', optimset('Display','off'))
例:解方程组
uy2
vz
w
0 关于y,z的解
yzw0
>>[y,z]=solve('u*y^2+v*z+w=0','y+z+w=0','y','z
') >>S=solve('u*y^2+v*z+w=0','y+z+w=0','y','z ') >>disp('S.y'),disp(S.y),disp('S.z'),disp(S.z)
方程可能有多个根,但 fzero 只给出距离 x0 最近的一个 x0 是一个标量,不能缺省 fzero 先找出一个包含 x0 的区间,使得 f 在这个区间 两个端点上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果找不到这样的区间,则返回 NaN。 由于 fzero 是根据函数是否穿越横轴来决定零点,因 此它无法确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有零点。
多项式四则运算
多项式加减运算
Matlab 没有提供专门进行多项式加减运算的函数,事实 上,多项式的加减就是其所对应的系数向量的加减运算
对于次数相同的多项式,可以直接对其系数向量进行 加减运算;
如果两个多项式次数不同,则应该把低次多项式中系 数不足的高次项用 0 补足,然后进行加减运算。
例: p1 2x3 x2 3
例:解方程组
x
y
0.6sin x 0.3cos 0.6cos x 0.3sin
y y
0 0
>>fun='[x(1)-0.6*sin(x(1))-0.3*cos(x(2)),
x(2)-0.6*cos(x(1))+0.3*sin(x(2))]';
>>[xy,f,exit]=fsolve(fun,[0.5,0.5]',…
例:已知 p(x) 2x3 x2 3,q(x) 2x 1 , 求 p',( p q)',( p / q)'
>> k1=polyder([2,-1,0,3]); >> k2=polyder([2,-1,0,3],[2,1]); >> [k2,d]=polyder([2,-1,0,3],[2,1]);
>> p=[2,-1,0,3]; >> x=[-1, 2;-2,1];polyval(p,x) >> polyvalm(p,x)
多项式的零点
x=roots(p):若 p 是 n 次多项式,则输出是 p=0 的 n 个根组成的 n 维向量。
例:已知 p(x) 2x3 x2 3,求 p(x) 的零点。
多项式的值
计算多项式在给定点的值
代数多项式求值
y = polyval(p,x): 计算多项式 p 在 x 点的值
注:若 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)
solve 在得不到解析解时,会给出数值解。
例:解方程组
x 2 y z 27
x
z
3
x5 3 y2 28
>> [x,y,z]=solve('x+2*y-z=27','x+z=3', ...
'x^5+3*y^2=28','x','y','z')
一般非线性方程数值解
y = polyval(p,x) Y = polyvalm(p,X)
多项式运算中, 使用的是多项式
系数向量,
不涉及符号计算!
x = roots(p)
线性方程组求解
线性方程组求解
linsolve(A,b):解线性方程组 Ax b
p2 2x 1 p1 p2 2x3 x2 2x 4
[2, 1, 0, 3] [ 0, 0[,2,1] [2, 1, 2, 4]
多项式四则运算
多项式乘法运算: k = conv(p,q)
例:计算多项式 2x3 x2 3 和 2x 1 的乘积 >> p=[2,-1,0,3]; >> q=[2,1]; >> k=conv(p,q);
多项式除法运算: [k,r] = deconv(p,q) 其中 k 返回的是多项式 p 除以 q 的商,r 是余式。 [k,r]=deconv(p,q) <==> p=conv(q,k)+r
多项式的求导
polyder
k=polyder(p) : 多项式 p 的导数; k=polyder(p,q): p*q 的导数; [k,d]=polyder(p,q): p/q 的导数,k 是分子,d 是分母
fsolve [x,fval,flag,out]=fsolve(fun,x0,options): 参数大部分与fzero相同,优化参数更多,更灵活。 注意x0的长度必须与变量的个数相等。
它与fzero的区别是,算法不同,fsolve的功能强大多很多,它可 以直接方便的求解多变量方程组,线性和非线性,超静定和静不 定方程,还可求解复数方程。 fun同样可以是句柄、inline函数或M文件,但是一般M文件比较 多,这是由于fsolve是解方程组的,目标函数一般比较烦,直接 写比较困难
>> p=[2,-1,0,3]; >> x=roots(p)
若已知多项式的全部零点,则可用 poly 函数给出该多 x2 ) (x xn )
多项式运算小结
poly2sym(p,’x’) k = conv(p,q)
[k,r] = deconv(p,q)
多项式的值
矩阵多项式求值
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))
例:解方程组
x
2yz xz3
2
x 3y 8
>> A=[1 2 –1; 1 0 1; 1 3 0]; >> b=[2;3;8]; >> x=linsolve(A,b)
b是列向量!
非线性方程的根
Matlab 非线性方程的数值求解 fzero(f,x0):求方程 f=0 在 x0 附近的根。
optimset('Display','off'))
>>function f=myfun(x) f=[x(1)-0.6*sin(x(1))-0.3*cos(x(2)),
x(2)-0.6*cos(x(1))+0.3*sin(x(2))]; >>[xy,f,exit]=fsolve(@myfun,[0.5,0.5]', optimset('Display','off'))
例:解方程组
uy2
vz
w
0 关于y,z的解
yzw0
>>[y,z]=solve('u*y^2+v*z+w=0','y+z+w=0','y','z
') >>S=solve('u*y^2+v*z+w=0','y+z+w=0','y','z ') >>disp('S.y'),disp(S.y),disp('S.z'),disp(S.z)
方程可能有多个根,但 fzero 只给出距离 x0 最近的一个 x0 是一个标量,不能缺省 fzero 先找出一个包含 x0 的区间,使得 f 在这个区间 两个端点上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果找不到这样的区间,则返回 NaN。 由于 fzero 是根据函数是否穿越横轴来决定零点,因 此它无法确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有零点。
多项式四则运算
多项式加减运算
Matlab 没有提供专门进行多项式加减运算的函数,事实 上,多项式的加减就是其所对应的系数向量的加减运算
对于次数相同的多项式,可以直接对其系数向量进行 加减运算;
如果两个多项式次数不同,则应该把低次多项式中系 数不足的高次项用 0 补足,然后进行加减运算。
例: p1 2x3 x2 3
例:解方程组
x
y
0.6sin x 0.3cos 0.6cos x 0.3sin
y y
0 0
>>fun='[x(1)-0.6*sin(x(1))-0.3*cos(x(2)),
x(2)-0.6*cos(x(1))+0.3*sin(x(2))]';
>>[xy,f,exit]=fsolve(fun,[0.5,0.5]',…
例:已知 p(x) 2x3 x2 3,q(x) 2x 1 , 求 p',( p q)',( p / q)'
>> k1=polyder([2,-1,0,3]); >> k2=polyder([2,-1,0,3],[2,1]); >> [k2,d]=polyder([2,-1,0,3],[2,1]);
>> p=[2,-1,0,3]; >> x=[-1, 2;-2,1];polyval(p,x) >> polyvalm(p,x)
多项式的零点
x=roots(p):若 p 是 n 次多项式,则输出是 p=0 的 n 个根组成的 n 维向量。
例:已知 p(x) 2x3 x2 3,求 p(x) 的零点。
多项式的值
计算多项式在给定点的值
代数多项式求值
y = polyval(p,x): 计算多项式 p 在 x 点的值
注:若 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)
solve 在得不到解析解时,会给出数值解。
例:解方程组
x 2 y z 27
x
z
3
x5 3 y2 28
>> [x,y,z]=solve('x+2*y-z=27','x+z=3', ...
'x^5+3*y^2=28','x','y','z')
一般非线性方程数值解