前言

有时候,你可能会遇到较复杂的方程(组),希望用MATLAB来求解。MATLAB的符号运算正好可用于求解方程(组)。此外,它还有许多其他功能。例如,展开和简化、因式分解以及微积分运算等。MATLAB的符号运算虽然是数值运算的补充,但是它仍然是科学计算研究中不可替代的重要内容。与数值运算相比,符号运算不需要预先对变量赋值,其运算结果以标准的符号形式表达。比如说计算sin(π),数值运算的结果是1.2246e-16,符号运算的结果是0。前者是近似的,后者是精确的。

正文

MATLAB符号运算功能非常强大,本文只介绍大部分常用的符号运算功能。注:本文代码的运行环境是MATLAB R2016b。

1. 创建符号数、符号变量和符号矩阵

这一步骤是符号运算的第一步,后面的步骤都是在此基础上进行的。

%创建符号数 (只能用sym函数)
s0 = 1 / sym(7)              %符号数,不适合大型符号数
s1 = sym('1/7')              %符号数
s2 = sym('3 + 4i')           %符号复数%创建符号变量 (sym函数和syms函数都行)
%--sym函数
s3 = sym('x')               %符号变量%--syms函数
syms a b c                  %创建多个符号变量,值为本身
syms(sym('[d e; e d]'))      %用已存在的符号变量矩阵创建多个符号变量%创建符号矩阵 (sym函数和syms函数都行)
s4 = sym('[2 5 6; 9 8 6]')    %符号数矩阵
s5 = sym('x', [2 3])          %符号变量矩阵,矩阵内的元素不会被创建为符号变量
A = [a b c; c b a]            %用已存在的符号变量创建符号变量矩阵
% syms A B [2 3]              %仅2017及以上版本支持,同时创建多个符号矩阵

代码运行结果如下。可以看到s5是一个2x3的符号变量矩阵,但矩阵内元素不会被创建成符号变量。

2. 创建符号表达式、符号函数

要表达一个数学函数可以用符号函数或符号表达式。

%创建符号表达式
syms x y
f = x^2 + 5*x + 4                      %符号表达式
subs(f, x, [2 1])                       %分别将f中的x换成2和1
f2 = sym('x^2 + 2*x + 1 = 0')               %创建方程
k = piecewise(x <= 0, x + y, x > 0, x - y);    %分段符号表达式
%更多分段符号表达式/函数的介绍详见:https://ww2.mathworks.cn/help/symbolic/piecewise.html#responsive_offcanvas%创建符号函数
%--用syms函数
syms G(x, y) F(z)    %创建多个符号函数,变量名为括号前字母, 值为本身,其自变量也创建对应的符号变量
F(z) = z^2 + 5*z + 4                        %符号函数
F([2 1])                                        %分别计算F(2)和F(1)
G(x, y) = piecewise(x <= 0, x + y, x > 0, x - y); %分段符号函数,有多个条件用&&连接%--用symfun函数
syms x y
g = symfun(x^2 + y^2, [x y])   %因变量 = symfun(公式,[自变量1 自变量2])
g([2 3], [1 2])                %分别计算g(2, 1)和g(3, 2)

代码运行结果如下。从图中可以看出符号表达式与符号函数之间的区别,它们的类型不同,且计算函数值的方式的也不同。

3. 符号运算中的基本运算

符号运算是精确计算,不会产生截断误差。并且可以根据需要,给出完全的封闭解或任意精度的数值解。本节讨论符号运算中的基本运算,可分为算术运算和关系运算。

3.1. 算术运算

数值运算中的一些运算符,例如‘+’、‘-’、‘*’、‘/’、’.*‘、’./‘、‘^’等,在符号运算中也可以使用。由于比较简单,且和数值运算相同,这里不做展示。

3.2 关系运算

关系运算符在符号运算中也可以使用,包括’>‘、’>=‘、’<‘、’<=‘、’==‘、’~=‘等。但是,在符号运算中这些运算并不是用来做关系比较,而是通过这些关系运算符构建关系式,作为后续操作(例如,解方程)的限制条件。若要对两个符号式做关系比较,可以使用函数isAlways、isequal或isequaln。

%关系运算
syms x
assume(x > 2);                                      %假设x是大于2的
solve((x + 1)*(x - 1)*(x - 2)*(x - 4)*(x - 6) == 0) %在设定的条件下,解方程%函数isAlways、isequal以及isequaln
%--isAlways:判断两个符号式构成的关系比较式的真假
A1 = [x, sym(9); 2*x^2, tan(x)];
B1 = [2*x, sym(6); x^2, sin(x)/cos(x)];
res1 = isAlways(A1  > B1)                    %对于数组情况,分别比较相应元素,结果为同等大小的logical数组%--isequal和isequaln:都是判断输入的两个符号式是否相等。但前者将NAN视为不相等,后者将NAN视为相等
A2 = [x+1, nan]
B2 = [x+1, nan]
res2 = isequal(A2, B2)
res3 = isequaln(A2, B2)                   %对于数组情况,相应元素全部相等,返回1;反之,返回0

代码运行结果如下。

4. 符号运算的主要功能

MATLAB符号运算提供了许多数学操作,例如解方程、微积分、线性代数运算、简化、变换等。本节将简单介绍微积分、解方程以及变换,更多详细功能介绍请看官方帮助文档。

4.1 微积分

微积分是数学中非常重要的分析工具。MATALB提供了许多微积分的相关操作,这里简单介绍求极限、微分以及积分。详细功能见微积分帮助文档。

%求极限
syms x
f1 = limit((exp(x) - 1) / x, x, 0)        %计算x逼近0时,f的双向极限值%微分
syms x y
f2 = diff(sin(x*y), x, y)                 %f先对x求导,再对y求导%积分
syms x y
f3 = x / (y^2 + 1);
res1 = int(f3, x)            %f关于x的不定积分
res2 = int(f3, x, 1, 3)      %f关于x在[1, 3]上的定积分
%changeIntegrationVariable函数:换元积分法
%integrateByParts函数:分部积分法

代码运行结果如下。

4.2 解方程

利用MATALB可以求解多种方程(组),例如线性方程、非线性方程、微分方程等。详见方程求解帮助文档。

%线性方程:所有未知数都是一次的。可用矩阵形式表示。(用linsolve)
syms x y z
eqns = [x+y-2*z == 0, x+y+z == 1, 2*y-z == -5];
[A, b] = equationsToMatrix(eqns)             %将线性方程转为矩阵形式
X = linsolve(A, b)                               %linsolve函数大的对象是矩阵形式的线性方程%非线性方程:(用solve函数或vpasolve函数)
%--求解析解
syms x y
eqns = [2*x^2 + y^2 == 0, 2*x - y == 4];
[solx soly] = solve(eqns, [x y])%--求数值解
syms x
eqn = x^6 - x^2 == 2;
s1 = vpasolve(eqn, x)                %不指定求解范围
s2 = vpasolve(eqn, x, [-3, 3])       %指定求解范围%常微分方程:未知函数是一元函数的微分方程称作常微分方程
syms y(t) a b
eqn = diff(y, t, 2) == 2 * a^2 * y;  %二阶常微分方程
diffY = diff(y, t);
cond = [y(0)==b, diffY(0)==1];       %初始条件
ySol(t) = dsolve(eqn, cond)

代码运行结果如下。

4.3 变换

傅里叶变换、拉普拉斯变换以及Z变换是数学中的常用变换,也是对于工科学生很重要的变换。MATLBA为上述变换都提供了相应的函数来实现。下面开始介绍这些函数的简单使用,每个变换的定义不进行说明,详细说明见变换函数的帮助文档。

%傅里叶变换
syms t
f = cos(2 * t);
f_FT = fourier(f)         %傅里叶变换
f_IFT = ifourier(f_FT)    %傅里叶逆变换
% fourier(f, y)           %指定变换变量,默认是w
% fourier(f, t, y)        %指定自变量和变换变量,默认自变量可以用symvar查看%拉普拉斯变换
syms t
f = 2 * t;
f_LT = laplace(f)         %拉普拉斯变换
f_ILT = ilaplace(f_LFT)   %拉普拉斯逆变换
% laplace(f, y)           %指定变换变量,默认是s
% laplace(f, t, y)        %指定自变量和变换变量%Z变换
syms n z
f = sin(n);
f_ZT = ztrans(f)          %Z变换
f_IZT = iztrans(f_ZT)     %逆Z变换
% ztrans(f, y)            %指定变换变量,默认是z
% ztrans(f, t, y)         %指定自变量和变换变量

代码运行结果如下。

5. 绘图

对于前面提到的符号表达式、符号方程、符号函数等,MATLBA提供了丰富的绘图函数来绘制它们。这些图可以是2D或3D形式的直线、轮廓线、曲面或网格。甚至,还可以创建动画图。下面展示2D和3D形式的曲线图,更详细说明见绘图帮助文档。

syms x
fplot(tan(x) * sin(x));      %2D曲线  syms t
xt = exp(-t/10).*sin(5*t);    %参数方程
yt = exp(-t/10).*cos(5*t);
zt = t;
figure
fplot3(xt, yt, zt)            %3D曲线

代码运行结果如下。

博主:虔诚~似锦(主博客)

个性签名:如果你愿意努力,人生最坏的结果也不过是大器晚成。

------------------------------------------------------------------------------------

如果这篇文章对你帮助的话,记得在下方点赞哦,博主在此感谢!

MATLAB 符号运算相关推荐

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

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

  2. Matlab符号运算总结

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

  3. 第十一章:MATLAB:符号运算(符号与数值,符号矩阵)

    第十一章:MATLAB符号运算 11.1. 符号与数值 11.1.1. 符号与数值间的转换 实例-数值与符号转换 11.1.2. 符号表达式与数值表达式的精度设置 实例-魔方矩阵的数值解 实例-稀疏矩 ...

  4. matlab整理符号表达式,[2018年最新整理]MATLAB符号运算与符号方程求解.ppt

    [2018年最新整理]MATLAB符号运算与符号方程求解 MATLAB符号计算 1 符号对象 2 符号微积分 3 级 数 4 符号方程求解 9.1 符号对象 9.1.1 建立符号对象 1.建立符号变量 ...

  5. matlab符号函数绘图法_《MATLAB符号运算及其应用》(黄忠霖著).pdf

    <MATLAB符号运算及其应用>(黄忠霖著).pdf [General Information] 书名=MATLAB符号运算及其应用 作者=黄忠霖,黄京编著 页数=425 出版社=北京市: ...

  6. MATLAB符号运算实现复变函数积分

    应用MATLAB符号积分实现复变函数积分运算 应用MATLAB符号积分运算实现复变函数积分计算 1. 解析函数的积分 2. 一般复变函数的曲线积分 应用MATLAB符号积分运算实现复变函数积分计算 本 ...

  7. matlab word几级标题,完整word版,MATLAB符号运算

    . 符号运算 科学计算包括数值计算和符号计算两种计算,数值计算是近似计算:而符号计算则是绝对精确的计算. 符号变量的生成和使用 1.符号变量.符号表达式和符号方程的生成 (1).使用sym函数定义符号 ...

  8. Matlab 符号运算 机器人正运动学DH 代公式

    通常算DH的时候需要先列DH参数表,再依次依据公式求T01,T12,T23,然后T03=T01*T12*T23 但是这最后一步T03=T01*T12*T23 非常麻烦,代公式容易代错,算4*4的矩阵相 ...

  9. 数学建模学习笔记(19)Matlab符号运算

    % Matlab的符号运算% 1.符号变量的创建 % syms 符号变量名 % 注释:可以用一个syms语句同时创建多个变量 syms y; syms a b;% 2.符号方程的创建 % 符号方程可以 ...

  10. matlab符号运算实验目的,MATLAB符号计算实验报告.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab MATLAB符号计算实验报告.doc11页 本文档 ...

最新文章

  1. error C2733: 不允许重载函数的第二个 C 链接
  2. 面对互联网一线大厂,这些技术你需要了解!
  3. 轻松练:如何从900万张图片中对600类照片进行分类|技术头条
  4. 【视图】ABAP Views
  5. 部门选择控件源代码公布
  6. 数据仓库工具箱:维度建模权威指南3
  7. 深入探究Spark -- Cluster Manger部署(最常用为YARN实现Task Scheduler)
  8. java biginteger log_java – BigInteger:计算可伸缩方法中的小数位数
  9. Interval(区间类问题)
  10. 调用微信支付接口总结
  11. JSON在android中应用
  12. C# in depth (第六章 实现迭代器的捷径)
  13. mysql查询连续次数_Mysql如何查询连续的时间次数
  14. 2021烟台市高考成绩查询,烟台2021高考成绩查询系统入口
  15. listary文件查找程序下载和使用
  16. Python整数求和
  17. java document对象详解
  18. 2019年年末给我自己的一个总结---发现自己其实外表平静,内心狂野哈哈哈哈哈
  19. Arduino 串口数据读写
  20. 关于DES加密强制更新版(4.22)

热门文章

  1. jxls遍历list时使用模板的批注语法
  2. JXLS (Excel 导出工具使用)
  3. python MySQL操作(增删改查)
  4. iOS13微信收款到账语音提醒开发总结
  5. HP Proliant DL360 G9使用业务网卡登录ILO管理
  6. mac搭建c语言开发环境
  7. DNS 服务器配置02
  8. catia二次开发:IDE界面介绍
  9. magisk卸载内置软件_【教程篇】安卓手机卡刷Magisk(面具)获取Root教程
  10. ESP8266 WIFI模块使用说明