一、多项式函数

多项式的构造

向量 [ a , b , c , d ] 表示的多项式为:ax^3+bx^2+cx+d

poly函数的两种用法:

  1. P = ploy(r):以向量 r 内的元素为根,返回多项式的系数
  2. P = ploy(A):返回矩阵 A 的特征多项式
    1. 如果紧接着 roots(P) 的话可以得到矩阵 A 的特征值,与 eig(A) 等价

poly2str函数:poly2str(p,自变量):返回多项式的字符串形式,例:poly2str( [ 1 0 0 ] , ' x '),程序输出 ' x^2 '

多项式求值

polyval函数:polyval(p,x):返回多项式的自变量为 x 时的值

多项式求导

  1. y = polyder(p):求多项式 p 的导数
  2. y = polyder(a,b):求多项式 a 和 b 乘积的导数
  3. [ x , y ] = polyder(a,b):求多项式 a 除以 b 的导数

注意:当ployder的参数为两个时,返回值用一个接住和两个接住的含义是完全不一样的

多项式求积分

  1. y = polyint(p):求多项式 p 的不定积分
  2. 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函数:

  1. [x,f]=fzero(@fun, x0);           %求x0附近的根
  2. [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

三、函数的绘图

常用函数如下:

  1. ezplot:绘制二维平面图
  2. ezplot3:绘制三维立体图
  3. ezmesh、ezsurf:绘制网格图
  4. ezcontour:绘制等高线图

1.显函数绘图:

ezplot(fun)或ezplot(fun, [xmin, xmax]),其中fun可以是句柄函数,也可以是匿名函数,如

  1. @sin
  2. @(x) sin(x).*cos(x)
  3.  ‘sin’

2.隐函数绘图:

隐函数的表示形式为:F(x,y)=0

相应的绘图函数为:

  1. ezplot(@(x,y) F(x,y))
  2. ezplot(@(x,y) F(x,y),[xymin,xymax])
  3. ezplot(@(x,y) F(x,y),[xmin,xmax,ymin,ymax]

3.参数方程和极坐标方程

(1)参数方程曲线作图

  1. ezplot(@(t)f(t), @(t)g(t))
  2. 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])

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐