符号对象的建立
函数(sym和syms)
常量
>> t=sym(4);
>> c=t+1
c =
5
变量
>> x=sym('b');
>> y=sym('a');
>> a=12;
>> b=13;
>> x+y
ans =
a + b
>> eval(x+y)
ans =
25
syms命令可以一次性定义多个符号变量
>> syms a b c;
>> f=a+b+c;
>> a=b+1;
>> c=a+2;
>> b=2;
>> f
f =
a + b + c
>> eval(f)
ans =
2*b + 6
>> eval(ans)
ans =
10
符号对象的运算
四则运算
符号表达式的四则运算与数值运算一样,用+、-、*、/、^
关系运算
6种关系运算符:<、<=、>、>=、==、~=。
对应的6个函数:lt()、le()、gt()、ge()、eq()、ne()。
输入变量是一个常量
>> clear
>> syms a b c ;
>> a=14;
>> b=17;
>> c=21;
>> lt(a,b)
ans =
1
>> a>b
ans =
0
输入变量是一个矩阵
>> syms d;
>> d=[1,2,3;4,5,6];
>> gt(d,5)
ans =
0 0 0
0 0 1
assume函数设置值域
在进行符号对象的运算前,可用assume函数对符号对象设置值域
assume(condition)
assume(expr,set)
第一种格式指定变量满足条件condition,第二种格式指定表达式
expr属于集合set
方法一
>> syms x;
>> assume(x>0);
>> assume(x<0);
>> abs(x)
ans =
-x
方法二
>> syms y;
>> assume(y,'positive'); %定义y是个正数还可以是'integer', 'rational', 'real', 'positive', 'clear', 'unreal'
>> abs(y)
ans =
y
逻辑运算
3种逻辑运算符:&(与)、|(或)和~(非)。
4个逻辑运算函数:and(a,b)、or(a,b)、not(a)和xor(a,b)。
>> syms x;
>> y=x>0 & x<10
y=
0<x & x<10
也可以是
>> y=and(x>0,x<10)
y=
0<x & x<10
因式分解与展开运算
① factor(s):对符号表达式s分解因式。
###
s如果是一个常量的话,会返回s的素数
>> syms d;
>> d=3;
>> s=d*2;
>> factor(s)
ans =
2 3
###
② expand(s):对符号表达式s进行展开
③ collect(s):对符号表达式s合并同类项。
④ collect(s,v):对符号表达式s按变量v合并同类项。
>> syms a b;
>> s1=a^3-b^3;
>> s2=(a+b)^2;
>> s3=(a+b)^2-a^2;
>> s4=(a+b*x)^2+a*x;
>> factor(s1)
ans =
[ a - b, a^2 + a*b + b^2]
>> expand(s2)
ans =
a^2 + 2*a*b + b^2
>> collect(s3)
ans =
b^2 + 2*a*b
>> collect(s4,x)
ans =
b^2*x^2 + (a + 2*a*b)*x + a^2
其他运算
① 提取有理分式的分子分母:[n,d]=numden(s)。
② 提取符号表达式的系数:c=coeffs(s,x)。
s必须是合并过同类型,且按照x的次数降序排列
③ 符号表达式化简:simplify(s)。
>>syms x;
>> y=cos(x)^2-sin(x)^2
y =
cos(x)^2-sin(x)^2
>> simplify(y)
ans =
2*cos(x)^2-1
radsimp函数含根式表达式进行化简;
combine 函数表达式求和、乘积、幂运算等形式现项进行合并;
④ 符号多项式与多项式系数向量之间的转换:
符号多项式转换为多项式系数向量:p=sym2poly(s)。
按照变量次数从很高向低输出变量的系数,
%正确示范
syms x;
>> sym2poly(s)
ans =
2 1 56
>> poly2sym(ans,x)
ans =
2*x^2 + x + 56
% 错误示范
>> syms a b c x;
>> s1=a*x^2+b*x+c;
>> p=sym2poly(s1)
错误使用 sym/sym2poly (line 31)
Input has more than one symbolic variable.
>> p=sym2poly(a*x^2+b*x+c)
错误使用 sym/sym2poly (line 31)
Input has more than one symbolic variable.
>> p=sym2poly(a*x^2+b*x+c,x)
错误使用 sym/sym2poly
输入参数太多。
多项式系数向量转换为符号多项式:s=poly2sym(p)。
>> syms x a b c;
>> s1=(a*x^2+b*x+c);
>> s1=(a*x^2+b*x+c)/a*2;
>> s2=a*x^2+b*x+c;
>> [n,d]=numden(s1)
n =
2*a*x^2 + 2*b*x + 2*c
d =
a
>> coeffs(s2,x)
ans =
[ c, b, a]
%对其进行求解
>> g=ans(end:-1:1)
g =
[ a, b, c]
>> roots(g)
ans =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
符号运算中变量的确定
① 如果没有明确指定自变量,MATLAB将按以下原则确定主变量并对其进行相应运算:
寻找除i、j之外,在字母顺序上最接近x的小写字母。
若表达式中有两个符号变量与x的距离相等,则ASCII码大者优先。
② symvar()函数可以用于查找一个符号表达式中的符号变量,函数的调用格式为:
symvar(s,n)
函数返回符号表达式s中的n个符号变量。因此,可以用symvar(s,1)查找表达式s的主
变量。
3. 符号矩阵
符号矩阵也是一种符号表达式,所以符号表达式运算都可以在矩阵意
义下进行。
>> syms a b x y alp;
>> m=[a^3-b^3,sin(alp)^2+cos(alp)^2;(15*x*y-3*x^2)/(x-5*y),78]
m =
[ a^3 - b^3,cos(alp)^2 + sin(alp)^2]
[(- 3*x^2 + 15*y*x)/(x - 5*y), 78]
>> simplify(m)
ans =
[ a^3 - b^3, 1]
[ -3*x, 78]
本文详细介绍了MATLAB中符号运算的基础知识,包括符号对象的创建、四则运算、关系运算、逻辑运算、因式分解与展开、提取分子分母、提取系数、化简表达式、多项式与系数向量转换及符号矩阵操作。通过具体实例,深入浅出地讲解了MATLAB符号运算的各个功能。
1023

被折叠的 条评论
为什么被折叠?



