MATLAB多项式函数及方程求根及绘图

您所在的位置:网站首页 matlab画复数图像 MATLAB多项式函数及方程求根及绘图

MATLAB多项式函数及方程求根及绘图

2023-12-17 01:30| 来源: 网络整理| 查看: 265

一、多项式函数 多项式的构造

向量 [ a , b , c , d ] 表示的多项式为:ax^3+bx^2+cx+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])



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3