向量 [ a , b , c , d ] 表示的多项式为:
poly函数的两种用法:
poly2str函数:poly2str(p,自变量):返回多项式的字符串形式,例:poly2str( [ 1 0 0 ] , ' x '),程序输出 ' x^2 '
polyval函数:polyval(p,x):返回多项式的自变量为 x 时的值
注意:当ployder的参数为两个时,返回值用一个接住和两个接住的含义是完全不一样的
roots函数:sol = roots(多项式系数),sol 为解向量,多项式系数用一个向量表示
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
syms x y %符号表达式
f=2*x^3-3*x*log(y)+x^2-5;
sol=solve(f,y)
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 的解
对于具有多个解的非线性方程一般采用数值解而不是符号解
fzero函数:
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求解
画图:
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);
求解非线性方程组的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(fun)或ezplot(fun, [xmin, xmax]),其中fun可以是句柄函数,也可以是匿名函数,如
隐函数的表示形式为:F(x,y)=0
相应的绘图函数为:
例:ezplot(@(x)sin(x).^3,@(x)cos(x).^3,[0,2*pi])
ezpolar(@(t)g(t))
例:ezpolar(@(x)sin(3*x))
ezplot3(@(t)f(t),@(t)g(t),@(t)h(t),[tmin,tmax])
例:ezplot3(@(t)cos(t),@(t)sin(t),@(t)t,[0,10*pi])