慕课matlab学习 第七章-038

第七节-Matlab符号计算

01-符号对象





% 第七节-Matlab符号计算
% 01-符号对象


% 符号对象的建立
% 符号对象的运算
% 符号矩阵


% 符号对象的建立
% eg

t=sym(2)
sin(sym(pi/3))
sin(pi/3)


% 符号计算的结果是一个精确的数学表达式
a=5;
b=-8;
x=sym('a')
y=sym('b')
w=(a+b)*(a-b) %得到的是一个数字
s=(x+y)*(x-y) %得到的是一个公式
eval(s)       %将符号表达式转换位数值结果


% 符号对象的建立
% (2 ) syms命令
%   syms命令可以一次定义多个符号变量,其- -般调用格式如下:
%   syms符号变量名1符号变量名2 ... 符号变量名n
% eg
syms a b c d

% (1)四则运算
% 符号表达式的四则运算与数值运算一样,用+-*、人、^% 算符实现,其运算结果依然是一个符号表达式。
syms X ;
f=2*X^2+3*X-5
g=X^2-X+7
f+g
% 可以看到,输出的结果是表达式

% 关系运算
% 6种关系运算符:  <<=> >> >===~=% 对应的6个函数: lt()le()gt()ge()eq()ne( )% 逻辑运算
% 3种逻辑运算符: & ()1()~ ()% 4个逻辑运算函数: and()or()not( )xor()。
syms X1 ;
% 逻辑运算符
y=X1>0&X1<10
%逻辑函数
y=and(X1>0,X1<10)

% 因式分解和展开运算
% (4)因式分解与展开运算
%  MATLAB提供了对符号表达式进行因式分解、展开、合并的函数,函数
%  的调用格式为: .
%factor(s):对符号表达式s【分解】因式。
%expand(s):对符号表达式s进行【展开】。
% ③collectls):对符号表达式s【合并同类项】。
%collct(s,v):对符号【表达式s】按【变量v】合并同类项。

% 对 a^3-b^3进行因式分解:即 a^3-b^3=f1(x)*f2(x)*f...(x)
syms a b
S=a^3-b^3
factor(S)
factor(S)  %接收到的是各个因式分解的值
% 其他用法 分解质因子 12=2*2*3
factor(12)

% 梅森素数的验证问题
% 所谓梅森数,是指形如2°-1的一 -类整数,其中指数p是素数。
% 将梅森数记为M。。如果梅森数是素数,就称为梅森素数。请
% 验证M1g、M23、 M29、M3l是 否为梅森素数。
syms p
m=2^p-1  %给 m 一个公式
p=19     %给p一个赋值
m19=eval(m) % 计算m公式的结果,此时p=19
factor(m19) %质因子分解,发现只有本身,所以这是一个素数


p=21     %给p一个赋值
m21=eval(m) % 计算m公式的结果,此时p=19
factor(m21) %质因子分解,发现由其他质数构成,所以这不是一个素数




%(5)其他运算
% ①提取有理分式的分子分母: [n,d]=numden(s)% ②提取符号表达式的系数: c=coeffs(s,x)% ③符号表达式化简: simplify(s)% ④符号多项式与多项式系数向量之间的转换:
% 符号多项式转换为多项式系数向量: p=sym2poly(s)% 多项式系数向量转换为符号多项式: s=poly2sym(p)% 求ax^2+bx+c=0 的根
syms a b c x;  %定义符号对象 a,b,c,x;
f1=a*x^2+b*x+c %定义f(x)函数
g=coeffs(f1,x) %提取符号表达式f1的系数,自变量是x ,其他变量是 a,b,c
g=g(end:-1:1)  %对前面的系数进行排列,原来是[c,b,a].我们要的是[a,b,c]
roots(g)       %求的函数的根的表达式

% 符号运算中变量的确定
% ①如果没有明确指定自变量,MATLAB将按以下原则确定主变量并对其进行相应运算:
% 寻找除i、j之外,在字母顺序上最接近x的小写字母。
% 若表达式中有两个符号变量与x的距离相等,则ASCII码大者优先。

%symvar( )函数可以用于查找一个 符号表达式中的符号变量
% 函数的调用格式为:
% symvar(s,n)
% 函数返回符号表达式s中的n个符号变量。因此,可以用
% symvarl(s,1)查找表达式s的主变量。


% 符号矩阵也是一种符号表达式, 所以符号表达式运算都可以在矩阵意义下进行。
% 注意:这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。

% 建立符号矩阵并化简
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] %使用符号建立矩阵
simplify(m) %对矩阵进行化简



% 矩阵中有 λ 时,以下其次线性方程组有非零解
%1-λ)x1-2x2+4x3=0
%   2x1+(3-λ)x2+x3=0
%   x1+x2+(1-λ)x3=0

% 分析:对于齐次线性方程组Ax=0,当 rank(A)<n或|A|=0时,齐次线性方程组有非零解。
syms lamda;                              %创建符号运算
A=[1-lamda,-2,4;2,3-lamda,1;1,1,1-lamda] %创建符号矩阵
D=det(A)                                 %|A|的行列式,A是符号矩阵,这样的话求到的是一个带有符号参数的行列式的值
factor(D)                                %对行列式进行因式分解
% 求得结果为 [ -1, lamda, lamda - 2, lamda - 3] 所以lamda=023都是有【非零解】的




你可能感兴趣的:(Matlab)