1.sym(单变量)和syms(多变量)是两个建立符号对象的函数
2.提取分子分母
[n,d]=numden(sym(3/4)) 数值必须使用符号函数 returns 分子n=3,分母d=4
[n,d]=numden(x/y+y/x) return n=x^2+y^2 d=y*x
3.因式分解与展开
1)factor(s)分解因式
syms x y
f=x^3-y^3
factor(f)
ans=
[ x - y, x^2 + x*y + y^2]
2)expand(s)展开
syms x y
f=(x+y)(x-y)
expand(f)
ans=
x^2-y^2
3)collect(s)合并同类项
syms x y;
R1 = collect((exp(x)+x)*(x+2))
R1=
x^2 + (exp(x) + 2)*x + 2*exp(x)
4)collect(s,v)按变量v进行合并同类项
syms x y;
R2 = collect((x+y)*(x^2+y^2+1), y)
R3 = collect([(x+1)*(y+1),x+y])
R2=
y^3 + x*y^2 + (x^2 + 1)*y + x*(x^2 + 1)
R3=
[ (y + 1)*x + y + 1, x + y]
4.符号表达式的化简
f=cos(x)^2+sin(x)^2
simplify(f)
ans=1
5.符号表达式与数值表达式之间的转化
1)利用sym可以将数值表达式转化成符号表达式
2)numeric或者eval函数可以将符号表达式转化成数值表达式
3)替换函数subs
syms x
I=int((-2*x^2+1)/(2*x^3-3*x+1)^2)
LL=subs(I,'cos(t)')
LL =
1/(6*cos(t)^3 - 9*cos(t) + 3)
6.符号函数的相关运算
1)复合函数运算 compose
f=f(x)
g=g(x)
compose(f,g)
2)反函数运算 finverse
f=exp(x)+1
f1=finverse(f,x)
f1=
log(x-1)
7.符号代数方程求解
1)linsolve
对于多元线性方程
3*x+y-z=3.6
x+2*y+4*z=2.1
-x+4*y+5*z=-1.4
建立多项式系数向量A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4]
x=linsolve(A,b)
x=1.4818;-0.4606;0.3848
2)slove
[x,y,…]= solve(eqn1,eqn2,…,eqnn,’x,y,…’)%指定变量
对于一元多项式方程
f=x^2+2*x+1
solve(f,x)
对于求解多元多次方程组
[x,y]=solve('x+y=3','x-y=2',x,y)
returns x=5/2 y=1/2
3)fsolve
对于求解多变量的非线性方程组
function F=myfun(x,c)
F=2*x(1)-x(2)-exp(c*x(1))-x(1)+2*x(2)-exp(c*x(2));
end
c=-1
x=fsolve(@(x)myfun(x,c),[-5 5]) 后面的向量各个变量的为初始值
若c值一直为-1
function F=myfun(x,c)
F=2*x(1)-x(2)-exp(c*x(1))-x(1)+2*x(2)-exp(c*x(2));
end
x=fsolve('myfun',[-5 5])
4)desolve(多元非齐次)
s=dsolve('D2x==x-y-z','D2y==y-x-z','D2z==z-x-y','x(0)=1','y(0)=0','z(0)=0','Dx(0)=0','Dy(0)=0','Dz(0)=0')
8.多项式运算
1)多项式求值 :ployval(对应元素计算) ploy(以矩阵为计算单位)
2)多项式求根:
第一种:roots
对于一元多次方程 (多项式求根)
x^2+2*x+1=0
则此时要建立多项式系数向量 p=[1,2,1]
求根 x=roots(p)
第二种:通过建立多项式的伴随矩阵再求其特征值的方法得到多项式的所有根(compan和eig函数)
3)多项式的乘除法运算:乘法 conv(向量卷积);除法 deconv
4)多项式微分:微分函数ployder
5)多项式拟合:两种方法 第一种是由矩阵的除法求解超定方程来进行,另一种是用拟合函数ployfit,调用方式:
ployfit(X,Y,n)和[p,s]=ployfit(X,Y,n)
9.求极限
limit(expr, x, a)
limit(expr, a)
limit(expr)
limit(expr, x, a, ‘left’)
limit(expr, x, a, ‘right’)
limit(expr, x, a)表示求符号表达式 expr 关于符号变量 x 趋近于 a 时的极限, limit(expr)求表示缺省变量趋近于 0 时的极限
例1:
(1)clc, clear
syms x f=(3*sin(x)+x^2*cos(1/x))/((1+cos(x))*log(1+x));
s=limit(f,x,0) s=simplify(s)
(2)clc, clear
syms x a s1=limit(((x+2*a)/(x-a))^x,x,inf)
s2=limit(((x+2*a)/(x-a))^x,x,-inf)
10.求导数
diff(expr)
diff(expr, v)
diff(expr, sym(‘v’))
diff(expr, n)
diff(expr, v, n)
diff(expr, n, v)
其中 diff(expr)表示求表达式 expr 关于默认变量的 1 阶导数,diff(expr, v, n)和 diff(expr, n, v)都表示求表达式,expr 关于符号变量 v 的 n 阶导数。
例1:
(1)clc, clear
syms x
y=log(x+sqrt(1+x^2));
s=diff(y,x,2) s=simple(s) %对符号函数进行化简
(2)a=[1,0.5,3.5,6];
da=diff(a)
例2:编写求隐函数的偏导数的 Matlab 函数
function dy=impldiff(f,x,y,n)
if mod(n,1)~=0
error(‘n should positive integer,please correct’);
else
F1=-simple(diff(f,x)/diff(f,y));
dy=F1;
for i=2:n
dy=simple(diff(dy,x)+diff(dy,y)F1);
end
end
syms x y;
f=(x2-2*x)*exp(-x2-y^2-xy);
F1=impldiff(f,x,y,1)
syms x
y=x^3+6*x^2+8*x-1;
dy=diff(y);
dy_zero=solve(dy), dy_zero_num=double(dy_zero) %变成数值类型
ezplot(y) %符号函数画图
12.求不积分
1)求不定积分(符号解)
int(expr)
int(expr, v)
例1:
2)
syms x
I=int(1/(1+sqrt(1-x^2)));
pretty(I) %写成符号表达式的形式,平常可以不用该函数
13.求定积分(符号解)
int(expr, a, b)
int(expr, v, a, b)
例2:求定积分
syms x
I=int(cos(x)*cos(2*x),-pi/2,pi/2)
14.求定积分(数值解)
方法一:
I=quadl(@(t) (t-3*t.^2+2*t.^3).^(-1/3),eps,0.5) %对积分函数进行了倒数变换
或者 I=quad(@(t) (t-3*t.^2+2*t.^3).^(-1/3),eps,0.5)
得到 I=1.4396。
方法二:
I=integral(@(t) (t-3*t.^2+2*t.^3).^(-1/3),eps,0.5)
结果 I=1.4396;
注:quad()函数使用 simpson 法,即用二次曲线逼近被积函数,quadl()采用更高阶 的逼近方法。它们的调用方法是:q=quad(fun,a,b,tol)或者 quadl(fun,a,b,tol),fun 可以是 符号方程,也可以是匿名函数。I=integral(fun,a,b,属性设置对),a,b 是积分限,属性 设置对用来进行选项控制
第二题:
方法一:
I=dblquad(@(x,y)sqrt(1-x.^2-y.^2).*(x.^2+y.^2<=x),0,1,-0.5,0.5)
得到 I= 0.6028。
方法二:
I=integral2(@(x,y)sqrt(1-x.^2-y.^2).*(x.^2+y.^2<=x),0,1,-0.5,0.5)
第三题:
fun3=@(x,y,z)z.^2.*log(x.^2+y.^2+z.^2+1)./(x.^2+y.^2+z.^2+1).*(z>=0 & z<=sqrt(1-x.^2-y.^2)); %该语句使用了续行符...
I=triplequad(fun3,-1,1,-1,1,0,1) %三重积分计算函数
得到 I= 0.1273
注:Matlab 中计算二重积分的函数形式为 q=dblquad(fun,xmin,xmax,ymin,ymax,tol),
一般只用于积分区域为矩形的情况。为了使用该函数,有时需要将非矩形区域化成矩形 区域。