MATLAB多项式函数及方程求根及绘图
多项式函数多项式的构造向量 [ a , b , c , d ] 表示的多项式为:poly函数的两种用法:P = ploy(r):以向量 r 内的元素为根,返回多项式的系数P = ploy(A):返回矩阵 A 的特征多项式如果紧接着 roots(P) 的话可以得到矩阵 A 的特征值,与 eig(A) 等价poly2str函数:poly2str(p,自变量):返回多项式的...
一、多项式函数
多项式的构造
向量 [ a , b , c , d ] 表示的多项式为:
poly函数的两种用法:
- P = ploy(r):以向量 r 内的元素为根,返回多项式的系数
- P = ploy(A):返回矩阵 A 的特征多项式
- 如果紧接着 roots(P) 的话可以得到矩阵 A 的特征值,与 eig(A) 等价
poly2str函数:poly2str(p,自变量):返回多项式的字符串形式,例:poly2str( [ 1 0 0 ] , ' x '),程序输出 ' x^2 '
多项式求值
polyval函数:polyval(p,x):返回多项式的自变量为 x 时的值
多项式求导
- y = polyder(p):求多项式 p 的导数
- y = polyder(a,b):求多项式 a 和 b 乘积的导数
- [ x , y ] = polyder(a,b):求多项式 a 除以 b 的导数
注意:当ployder的参数为两个时,返回值用一个接住和两个接住的含义是完全不一样的
多项式求积分
- y = polyint(p):求多项式 p 的不定积分
- y = polyint(a,b):求多项式 a 和 b 乘积的不定积分
多项式求解
roots函数:sol = roots(多项式系数),sol 为解向量,多项式系数用一个向量表示
二、方程求根
一、方程的符号解
1.一个方程的情况
求方程的根
solve函数:solve(f, x):对变量x解方程f=0
函数f定义方式:匿名函数或符号函数
例1:求方程 2x^2-3x-8=0 的根
m=solve(@(x)2*x^2-3*x-8); %匿名函数
syms x %符号函数
m=solve(2*x^2-3*x-8,x);
补充:因为solve函数求出的是符号解,所以可以利用vpa函数将其转换为数值解:
vpa( x , y ):显示 x 的 y 位,如 vpa( pi , 3 ) = 3.14
例2:已知,求出函数 y
syms x y %符号表达式
f=2*x^3-3*x*log(y)+x^2-5;
sol=solve(f,y)
2.方程组的情况
例3:解方程组
syms x y %符号表达式
y1=2*x^2-3*y-8;
y2=x-2*y+1;
[m,n]=solve(y1,y2,x,y); % m 保存 x 的解,n 保存 y 的解
对于具有多个解的非线性方程一般采用数值解而不是符号解
二、方程的数值解
1.一般非线性函数的求根
fzero函数:
- [x,f]=fzero(@fun, x0); %求x0附近的根
- [x,f]=fzero(@fun, [a, b]); %求区间[a,b]上的根,要求两端函数值异
x :f( x ) = 0 时的 x
f :f( x ) 的值
例4:求方程sin(x)-cos(x)=0 在[0,/2]上的根
[x,f]=fzero(@(x)(sin(x)-cos(x)),[0,pi/2])
还可以解带参数的方程:
例5: 求方程x-sin(x)+k 的根,k=1,2,…,10
a=1:10;
for k=a
y(k)=fzero(@(x)(x-sin(x)+k),1);
end
plot(a,y,'*')
xlabel('a')
ylabel('root')
配合ginput函数,先画出函数图,再用ginput函数获取根的大概位置,最后用fzero求解
例6:求方程 的最小正根。
画图:
x=0:pi/50:2*pi;
y=x.*sin(x)+2*x.*sin(2*x)+3*x.*sin(3*x)+4*x.*sin(4*x)+5*x.*sin(5*x)-10;
plot(x,y,x,0)
hold on
line([0,8],[0,0],'color','r');
然后用ginput取点
[x,y]=ginput(1);
最后用fzero求解
[r,fval]=fzero(@(x) x.*sin(x)+2*x.*sin(2*x)+3*x.*sin(3*x)+4*x.*sin(4*x)+5*x.*sin(5*x)-10,3.9);
2.一般非线性方程组求根
求解非线性方程组的matlab函数为fsolve,调用格式为
x=fsolve(fun, x0); %x0为一个向量,有 n 个未知量就需要一个 n 维的向量
其中x0为初始值
注意:和求解非线性方程一样,如果非线性方程组有多个根,调用fsolve只能求出其中的一个。求出的是哪一个依赖于初始值的选取。
例:求非线性方程组的全部实根。
解:首先画出曲线:
h=ezplot(@(x,y) (x.^2.*cos(pi*x)+y.^2.*sin(pi*y)-pi/2),[-3,3,-3,3])
str1=get(get(gca,'Title'),'String')
set(h,'Color',[1 0 0],'LineStyle',':')
hold on
h1=ezplot(@(x,y)(x.^2+y.^2+2*sin(2*x.^2.*y).^2-4),[-3,3,-3,3])
str2=get(get(gca,'Title'),'String')
title([str1,',',str2])
grid on
然后利用ginput函数读取10个点作为初始值,利用fsolve函数解得解向量
[x, y]= ginput(10);
X=[x;y];
m=length(x);
r=zeros(2,m);
for k=1:m
r(:, k)=fsolve(@solfun, X(:,k)); % numerical solution of the given fun.
end
plot(r(1,:),r(2,:),'ko')
function f=solfun(x)
f=[x(1).^2.*cos(pi*x(1))+x(2).^2.*sin(pi*x(2))-pi/2,x(1).^2+x(2).^2+2*sin(2*x(1).^2.*x(2)).^2-4];
end
三、函数的绘图
常用函数如下:
- ezplot:绘制二维平面图
- ezplot3:绘制三维立体图
- ezmesh、ezsurf:绘制网格图
- ezcontour:绘制等高线图
1.显函数绘图:
ezplot(fun)或ezplot(fun, [xmin, xmax]),其中fun可以是句柄函数,也可以是匿名函数,如
- @sin
- @(x) sin(x).*cos(x)
- ‘sin’
2.隐函数绘图:
隐函数的表示形式为:F(x,y)=0
相应的绘图函数为:
- ezplot(@(x,y) F(x,y))
- ezplot(@(x,y) F(x,y),[xymin,xymax])
- ezplot(@(x,y) F(x,y),[xmin,xmax,ymin,ymax]
3.参数方程和极坐标方程
(1)参数方程曲线作图
- ezplot(@(t)f(t), @(t)g(t))
- ezplot(@(t)f(t), @(t)g(t),[tmin,tmax])
例:ezplot(@(x)sin(x).^3,@(x)cos(x).^3,[0,2*pi])
(2)极坐标曲线作图
ezpolar(@(t)g(t))
例:ezpolar(@(x)sin(3*x))
(3)空间曲线作图
ezplot3(@(t)f(t),@(t)g(t),@(t)h(t),[tmin,tmax])
例:ezplot3(@(t)cos(t),@(t)sin(t),@(t)t,[0,10*pi])
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)