pdf版本笔记的下载地址: MATLAB08_符号运算(访问密码:3834)

MATLAB08:符号运算

  • 创建符号变量
    • 创建符号数字
    • 创建符号变量
  • 符号运算
    • 符号表达式的化简与代入
      • 符号表达式的化简
      • 符号表达式的代入
    • 求方程的解析解
      • 解单变量方程
      • 解多变量方程
      • 解方程组
    • 符号微积分运算
      • 求极限
      • 微分
      • 积分
      • 级数求和
      • 泰勒展开
  • 绘制图像

MATLAB强大的符号运算基于符号运算工具箱,具体请见其 官方文档.

创建符号变量

创建符号数字

使用sym函数可以创建符号数字.使用符号数字可以精确地保存无理数,不会产生误差.

sym(1/3) % 得到 1/3
1/3         % 得到 0.3333

将无理数保存为符号数字可以避免将其转换为浮点数的误差:

  1. 使用符号数字计算 sin ⁡ ( π ) \sin(\pi) sin(π)

    sin(sym(pi))   % 得到 0
    sin(pi)         % 得到 1.2246e-16
    
  2. 使用符号数字计算 ϕ = 1 + 5 2 \phi = \frac{1+\sqrt{5}}{2} ϕ=21+5 ​​

    symphi = (1 + sqrt(sym(5)))/2;   % 得到 5^(1/2)/2 + 1/2
    symf = symphi^2 - symphi - 1;  % 得到 (5^(1/2)/2 + 1/2)^2 - 5^(1/2)/2 - 3/2numphi = (1 + sqrt(5))/2;      % 得到 1.6180
    numf = numphi^2 - numphi - 1;  % 得到 0
    

创建符号变量

使用symsyms可以创建符号变量,区别在于:

  1. sym每次只能创建一个符号变量,而syms一次可以创建多个符号变量.

    syms a      % sym命令只能创建一个符号变量
    syms b c d  % syms命令可以创建多个符号变量
    
  2. 若所指定的符号变量已存在,sym不会保留其原有的值,而syms会清空其值.

    syms x y
    f = x+y;  % 隐式创建符号变量f
    sym f       % 不清空变量f原有的值,即f = x + y
    
    syms x y
    f = x+y;  % 隐式创建符号变量f
    syms f      % 清空变量f原有的值,即f = f
    
  3. 使用sym可以创建符号变量矩阵.

    A = sym('a', [2 5])  % 创建一个2*5的符号变量矩阵
    whos
    

    得到的输出如下:

    A =
    [ a1_1, a1_2, a1_3, a1_4, a1_5]
    [ a2_1, a2_2, a2_3, a2_4, a2_5]Name      Size            Bytes  Class    AttributesA         2x5               112  sym
    

    联合使用symsyms可以快速创建一系列带下标的变量

    clear all
    syms(sym('a', [1 5]))
    whos
    

    得到输出如下:

      Name      Size            Bytes  Class    Attributesa1        1x1                 8  sym                a2        1x1                 8  sym                a3        1x1                 8  sym                a4        1x1                 8  sym                a5        1x1                 8  sym
    

符号运算

符号表达式的化简与代入

符号表达式的化简

使用simplify()函数可以化简符号表达式.

syms x a b csimplify(sin(x)^2 + cos(x)^2);      % 得到 1
simplify(exp(c*log(sqrt(a+b))));   % 得到 (a + b)^(c/2)

表达式化简的标准是不确定的,下面三个函数分别按照不同标准化简表达式:

  • expand()函数可以展开表达式

    syms xf = (x ^2- 1)*(x^4 + x^3 + x^2 + x + 1)*(x^4 - x^3 + x^2 - x + 1);
    expand(f);      % 得到 x^10 - 1
    
  • factor()函数可以分解因式

    syms xg = x^3 + 6*x^2 + 11*x + 6;
    factor(g);      % 得到 (x + 3)*(x + 2)*(x + 1)
    
  • horner()函数可以将多项式变为嵌套形式

    syms xh = x^5 + x^4 + x^3 + x^2 + x;
    horner(h);      % 得到 x*(x*(x*(x*(x + 1) + 1) + 1) + 1)
    

符号表达式的代入

使用sub(expr, old, new)函数可以将符号表达式expr中的old替换为new.

syms xf = 2*x^2 - 3*x + 1;
subs(f, 1/3)    % 得到 2/9
syms x yf = x^2*y + 5*x*sqrt(y);
subs(f, x, 3);  % 得到 9*y + 15*y^(1/2)

求方程的解析解

使用solve(eqn,var)solve(eqns,vars)可以求取方程式的解析解.

解单变量方程

使用==定义一个方程,并对其调用solve函数求解.

syms xeqn = x^3 - 6*x^2 == 6 - 11*x;
solve(eqn);     % 得到 [1 2 3]

若不指定==符号右边的值,则默认等式右边为0.

syms xeqn = x^3 - 6*x^2 + 11*x - 6;
solve(eqn);     % 得到 [1 2 3]

解多变量方程

对于多变量方程,我们需要指定针对哪个变量进行求解.

syms x yeqn = [6*x^2 - 6*x^2*y + x*y^2 - x*y + y^3 - y^2 == 0];
solve(eqn, y);  % 得到 [1, 2*x, -3*x]

解方程组

solve()函数传入方程组可以解方程.

syms u veqns = [2*u + v == 0, u - v == 1];
S = solve(eqns,[u v]);

可以通过变量名索引方程的解,并可以将该解代入其他表达式中.

S.u;             % 得到 1/3
S.v;                % 得到 -2/3
subs(3*v + u, S);  % 得到 -5/3

符号微积分运算

求极限

使用limit(expr, var, a)函数可以求取符号表达式expr在变量var趋近于a时的极限,添加参数'left''right'可以指定左极限或右极限.

syms x;
expr = 1/x;limit(expr,x,0);            % 得到NaN
limit(expr,x,0,'left');       % 得到-Inf
limit(expr,x,0,'right');  % 得到Inf

微分

使用diff(expr, var, n)函数可以求取符号表达式expr对变量varn阶微分.

syms a b c x;
expr = a*x^2 + b*x + c;diff(expr, a);        % 得到 x^2
diff(expr, b);      % 得到 x
diff(expr, x);      % 得到 b + 2*a*x
diff(expr, x, 2);   % 得到 2*a

积分

使用int(expr, var)函数可以求取符号表达式expr对变量var的不定积分.使用int(expr, var, [a, b])函数可以指定上下限求定积分,ab可以是符号表达式.

syms x a b
expr = -2*x/(1+x^2)^2;int(expr, x);           % 得到 1/(x^2 + 1)
int(expr, x, [1, 2]);   % 得到 -0.3
int(expr, x, [1, Inf]); % 得到 -0.5
int(expr, x, [a, b]);   % 得到 1/(b^2 + 1) - 1/(a^2 + 1)

对于一些函数,MATLAB不能求出其积分,这时MATLAB会返回一个未解析(unsolved)的积分形式.

syms x
int(sin(sinh(x)));  % 一个无解的积分,MATLAB返回 int(sin(sinh(x)), x)

级数求和

使用symsum(expr, k, [a b])计算级数expr的索引kab的加和.

syms k xsymsum(k^2, k)           % 得到 k^3/3 - k^2/2 + k/6
symsum(k^2, k, [0 10])  % 得到 385
symsum(x^k/factorial(k),k,1,Inf)    % 得到 exp(x) - 1

泰勒展开

使用taylor(expr,var,a)计算表达式exprvar=a处的泰勒级数.

syms xtaylor(exp(x)) % 得到 x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
taylor(sin(x))  % 得到 x^5/120 - x^3/6 + x
taylor(cos(x))  % 得到 x^4/24 - x^2/2 + 1

绘制图像

可以对符号表达式绘制图像,常用的绘图函数如下:

函数 作用
fplot() 绘制符号表达式的二维线图像
fplot3() 绘制符号表达式的三维线图像
ezpolar() 绘制符号表达式的极坐标线图像
fmesh() 绘制网状面图像
fsurf() 绘制带颜色的面图像
fcontour() 绘制轮廓图像
fimplicit() 绘制隐含函数关系的图像
  1. 下面例子展示二维和三维线图像的绘制

    subplot(1, 2, 1)
    syms x
    f = x^3 - 6*x^2 + 11*x - 6;
    fplot(f, x)subplot(1, 2, 2)
    syms t
    fplot3(t^2*sin(10*t), t^2*cos(10*t), t)
    

  2. 下面例子演示三维面的绘制

    syms x y
    fsurf(x^2 + y^2)
    

  3. 下面例子演示隐含函数关系图像的绘制

    syms x y
    eqn = (x^2 + y^2)^4 == (x^2 - y^2)^2;
    fimplicit(eqn, [-1 1])
    

pdf版本笔记的下载地址: MATLAB08_符号运算(访问密码:3834)

MATLAB08:符号运算相关推荐

  1. python中符号计算输出数学_Python科学计算与数据处理—符号运算库.doc

    Python 科学计算与数据处理 - 符号运算库 符号运算库目录从示例开始欧拉恒等式球体体积数学表达 式符号数值运算符和函数符号运算表达式转换和简化方程目录微分 方程积分其他函数符号运算库. 它的目标 ...

  2. 【MATLAB】符号数学计算(二):符号运算中的运算符和函数

    一般的这里就不再列举 1.算术运算符号 运算符号" ' "." .' "分别实现矩阵的共轭转置和非共轭转置. >> syms a b c d; &g ...

  3. java8 无符号_Java8包装类 新增 无符号运算方法

    Java8为整型包装类,增加类支持无符号运算的方法. Java8为Integer,Long新增如下方法 static String toUnsignedString(int/long i):该方法将指 ...

  4. matlab求xk符号解,matlab符号运算习题

    matlab符号运算习题 第 3 讲 MATLAB 符号计算符号计算则是可以对未赋值的符号对象(可以是常数.变量.表达式)进行运算和处理.MATLAB 具有符号数学工具箱(Symbolic Math ...

  5. Matlab符号运算总结

    matlab符号运算功能强大,在帮一师兄校对矩阵推导的时候使用到.暂时没有仔细研究,做一个标记. http://blog.chinaunix.net/uid-20559667-id-1924747.h ...

  6. x86架构下 CF与OF标志位 带符号和无符号运算 详解

    针对能够影响OF和CF标志位的指令,一般来说是涉及到数据运算的指令,这里使用add举例,即不区分有无符号的加法指令,参与运算的数据,从二进制层级去考虑. CF标志位 对于CF,它是carry flag ...

  7. latex 符号_sympy: 符号运算-1

    本文主要参考资料来自sympy的官网: Introduction - SymPy 1.4 documentation​docs.sympy.org 一般,我们使用计算机软件进行数学计算,主要是数值计算 ...

  8. java 无符号运算_java位运算和无符号运算

    计算机在底层使用的是二进制补码进行运算. 计算规则: 正数的原码.反码.补码是其二进制本身. 负数的原码首先计算其二进制数,然后最高位使用1表示负数,反码是最高位不变其它位取反,补码是在反码的基础上进 ...

  9. MATLAB中符号运算和数值运算的区别

    两者的根本区别是 : 数值计算的表达式.矩阵变量中不允许有未定义的自由变量 , 而符号计算可以含有未定义的符号变量.对于一般的程序设计软件如 C, C + + 等语言实现数值计算还可以 , 但是实现符 ...

最新文章

  1. 【问题收录】[ubuntu]startx doesn't work
  2. 农牧行业销售经理生存手册(二)
  3. find 命令_linux中find命令的使用
  4. python到底怎么学-学 Python 到底能帮你解决什么问题 ?
  5. Welcome email
  6. Atitit RSA非对称加密原理与解决方案
  7. 联想服务器开启虚拟化,联想电脑虚拟化开启方法
  8. Selenium Web 自动化 - 项目实战(三)
  9. NLP《词汇表示方法(七)BERT》
  10. 什么样的两个矩阵相似_Lecture 27 | 相似矩阵
  11. [Java] 蓝桥杯ALGO-103 算法训练 完数
  12. 专科python应届生工资多少-大四应届毕业生,学了两个月Python,找工作感觉好难啊?...
  13. java captcha 验证码_java生成图片验证码的示例代码
  14. WPE制作游戏外挂 更改封包
  15. Nmap库ICMP主机探测
  16. 业务流程图和数据流程图、流程图
  17. 微信分享返回 错误码 -6 的情况!
  18. 有时候你只是看起来很努力
  19. 微软自带远程控制桌面软件
  20. scala成长之路(1)基本语法和数据类型

热门文章

  1. java线程状态——java线程状态图
  2. Hibernate 中 SessionFactory的创建
  3. Windows资源管理器占用CPU过高
  4. LCD12864驱动(Proteus中用51单片机驱动AMPIRE128X64)
  5. python爬虫—Requests
  6. 手机计算机应用会横屏,北京市大学生计算机应用大赛——3g智能手机创意设计作品提交书模板(游戏类).pdf...
  7. SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)
  8. CaptureScreenshot捕捉画面截图截屏
  9. IIS服务器安全配置[摘]
  10. 20154312 曾林 EXP9 Web安全基础