MATLAB符号运算小技巧

article/2025/9/18 21:53:46

1. 引言

        MATLAB具备强大的符号运算功能。符号运算就是所谓的计算机代数,通俗的说就是利用计算机进行数学公式的推导。这篇文章主要总结几个MATLAB进行符号运算时的小技巧,这也是作者在进行技术研究过程中实际碰到的一些难题,希望后来者能少走写弯路。

2. 符号运算

2.1 常规符号运算

先来说最朴素的情况,我们可以通过syms或者sym定义符号,我比较喜欢用syms,感觉这个指令功能更强大一些。代码如下:

syms v m g h;
L = 1/2*m*v^2 - mgh

以上代码定义了四个符号变量v,m,g,h。利用这四个符号变量定义了一个符号函数。此时希望对符号函数进行如下处理:

\frac{d}{dt}\left( \frac{\partial L}{v} \right )

里面的偏导数是比较容易计算的,MATLAB提供了一个叫做diff的函数专门用来求导数。这样\frac{\partial L}{v}可以通过如下方式计算:

lv = diff(L, v)

此时得到的结果是lv=m*v,这个结果是符合我们预期的,但是接下来怎么让lv对时间求导数呢?我们从公式上可以看出来lv并不是显含时间t的,但是从原始公式上你可能已经看出v是一个速度的概念,它一定是和时间t相关的。也就是v=v\left(t \right )。那么MATLAB如何处理此处对时间的导数呢?要不试一下:

syms t;
lvt = diff(lv, t);

 很不幸,这种情况下你得到的将是0。因为MATLAB并不知道你这里的v是时间的函数。这就是我们要介绍的第一个技巧。

2.2 抽象符号函数

        前面我们提到MATLAB并不知道速度v是时间的函数,那么怎么告知MATLAB呢?答案是在定义符号的时候将v定义成时间的抽象函数:

syms v(t) m g h;
L = 1/2*m*v^2 - mgh

syms v(t)这样的定义方式matlab会自动创建一个符号变量t并认为v是符号变量t的抽象函数。这样\frac{d}{dt}\left( \frac{\partial L}{v} \right )实现方式如下:

syms v(t) m g h;
L = 1/2*m*v^2 - mgh;
lv = diff(L, v);
lvt = diff(lv, t);

这时得到的lvt将是lvt=m*diff(v(t),t),这正是我们希望得到的。当公式变得越来越复杂时,你可能会觉得diff(v(t),t)这种表达方式过于繁琐,希望能够通过一个更简洁的变量来代替它,比如新定义一个符号a,用a取代diff(v(t),t),这就是第二个技巧。

2.3 变量替换

        可以通过如下方式进行变量替换操作:

syms v(t) m g h;
L = 1/2*m*v^2 - mgh;
lv = diff(L, v);
lvt = diff(lv, t);syms a;
lvt = subs(lvt, diff(v, t), a);

得到的表达式变为lvt=m*a。

2.4 符号表达式化简

        当一个符号表达式存在冗余项时,可以对符号表达式进行合并等简化操作,使用的指令为simplify,代码如下:

syms v(t) m g h;
L = 1/2*m*v^2 - mgh;
lv = diff(L, v);
lvt = diff(lv, t);L = simplify(L);

2.5 实变量符号运算

        定义如下的符号表达式:

syms v(t) m g h;
y = [m g h];
z = y';

会发现z=[conj(m); conj(g); conj(h)]。出现这种问题的原因是matlab默认的运算 ' 是共轭转置,而单纯的转置使用的是 .' 因此一种解决方式是:

syms v(t) m g h;
y = [m g h];
z = y.';

另外一种方式是我们声明符号变量的时候就告知matlab这是一个实数范围内的符号变量:

syms v(t) m g h real;
y = [m g h];
z = y';

这种方式的问题是real本身只能修饰符号变量,不能修饰抽象符号函数v(t),因此matlab会报警,如果矩阵中含有v(t)那么进行转置操作v(t)依然会带上conj,解决方法是用assumeAlso指令:

syms m g h real;
syms v(t);
assumeAlso(v(t), 'real');
y = [m g h v];
z = y';

2.6 取出符号函数体

        现在有一个新的问题是由抽象符号函数引入的,假如我们输入如下指令:

syms m g h real;
syms v(t);
assumeAlso(v(t), 'real');
y = [m g h v];

现在我们希望取出矩阵y中的前三个元素要怎么做呢?你可能自然而然会想到用y(1:3),但是这个操作的结果并不如你所愿,它得到的将会是一个四维的元组(cell),每个元组有三个元素,展开后是y={{m m m} {g g g} {h h h} {v(1) v(2) v(3)}},其实这个指令的真正含义是当t分别取1,2,3时矩阵各个维度的值。如果你真的需要得到矩阵y的前三个元素,需要进行如下操作:

syms m g h real;
syms v(t);
assumeAlso(v(t), 'real');
y = [m g h v];y = formula(y);
y = y(1:3);

 3. 参考文献

[1]. Issue with reality assumption of an implicit function -

[2]. How do you declare a symbolic function of time as a real variable -

[3]. Return body of symbolic function - MATLAB formula

[4]. Use a symfun as index of a matrix -


http://chatgpt.dhexx.cn/article/hl0E1rTo.shtml

相关文章

Matlab-运算符

运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。MATLAB主要用于整个矩阵和阵列的操作。因此,MATLAB中的运算符既可用于标量数据也可用于非标量数据。MATLAB允许以下类型的基本操作 算术运算符 关系运算符 逻辑运算符 按位运算符 集合运算符…

matlab常见符号运算(计算导数,积分、符号求和等))

符号运算的建立 sym 函数用来建立单个符号量,一般调用格式为: 符号变量 sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串 syms 命令用来建立多个符号量,一般调用格式为: syms 符号变量1 符号变量2 … 符号变量…

MATLAB符号变量的创建和简单运算

声明:本文章中数据来自清风老师数学建模课程 文章目录 MATLAB符号变量的创建和简单运算1、符号变量1. 1 符号变量的创建1.2 符号方程的创建3 符号矩阵的创建 2、符号运算2.1 简单运算2.2 表达式的整理2.3 因式分解2.4 多项式展开2.5 合并2.6 计算分子与分母2.7 让结…

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

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

MATLAB的符号运算基础

在数学运算中,运算的结果如果是一个数值,可以称这类运算为数值运算;如果运算结果为表达式,在MATLAB中称为符号运算,符号计算是对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MATLAB具有符号数学工具箱…

MATLAB符号运算——积分

积分 积分是微积分学与数学分析里的一个核心概念。通常分为定积分和不定积分两种。直观地说,对于一个给定的正实值函数,在一个实数区间上的定积分可以理解为在坐标平面上,由曲线、直线以及轴围成的曲边梯形的面积值(一种确定的实…

MATLAB的符号计算

MATLAB的符号计算 matlab的符号计算是通过sym、syms 函数去创建符号对象或者符号表达式。例如一元二次函数我们便可以通过syms 函数创建。 syms a b c x y z f1 a * x^2 b * x c; f2 sin(x) * cos(y); f3 (x y)/z; 符号表达式常用运算函数 函数名说明函数名说明facto…

matlab中的符号对象与符号运算

符号对象(Symbolic Objects 不同于普通的数值计算)是Matlab中的一种特殊数据类型,它可以用来表示符号变量、表达式以及矩阵,利用符号对象能够在不考虑符号所对应的具体数值的情况下能够进行代数分析和符号计算(symbolic math operations),例如…

Matlab系列之符号运算(上)

Matlab系列之符号运算 前言创建符号对象基本操作符号变量的基本操作符号表达式的基本操作四则运算多项式的操作符号表达式化简符号表达式的替换反函数求解复合函数 更多精彩等你发现~ 前言 看到文章的名字,可能很多人都没懂意思,如果叫它的另一个名字&a…

MATLAB学习之符号运算

创建符号变量数值与符号的转换数值矩阵转换为符号矩阵符号替换 本文介绍MATLAB中的符号运算; 1. 创建符号变量 符号常量是不含变量的符号表达式,用 sym 命令来创建符号常量。 sym(‘常量’):创建符号常量。 asym(sin(2)) sym 命令也可以把…

MATLAB08:符号运算

pdf版本笔记的下载地址: MATLAB08_符号运算(访问密码:3834) MATLAB08:符号运算 创建符号变量创建符号数字创建符号变量 符号运算符号表达式的化简与代入符号表达式的化简符号表达式的代入 求方程的解析解解单变量方程解多变量方程解方程组 符…

MATLAB基础(三)符号运算

符号对象的建立 符号对象的建立:sym 和 syms sym 函数用来建立单个符号变量,一般调用格式为:符号变量 sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串 例如:asym(a) a 是符号变量 bsym(1/3) …

MATLAB符号运算部分知识总结

1. 符号表达式的定义 1.1符号变量的定义 符号变量通过命令syms和sym定义,syms命令一次定义一个或多个符号变量,sym命令一次只能定义一个符号变量。定义好的符号函数可以通过命令symvar检查其自变量。 MATLAB系统有默认的符号自变量,主要为&am…

[MATLAB]符号计算

符号计算 一、数值微积分1.1 数值计算与符号计算的区别1.2 符号对象1.3 符号常量1.4 符号变量1.4.1 符号变量的创建1.4.2 创建符号矩阵1.4.3 自由符号变量 1.5 符号表达式1.6 符号计算的运算符1.7 符号运算中的函数运算1.8 符号计算与数值计算的区别 二、符号数字及表达式2.1 数…

MATLAB符号运算

在数学、物理学及力学等各种学科和工程应用中,经常还会遇到符号运算的问题。在MATLAB中,符号运算是为了得到更高精度的数值解,但数值的运算更容易让读者理解,因此在特定的情况下,分别使用符号或数值表达式进行不同的运…

matlab 运算符

1、字符串 字符串是用单引号来标示的,例如:SI Have a Dream.,赋值号之后在单引号内的字符即是一个字符串,而S是一个字符串变量。 2、运算符 MATLAB 运算符分为算术运算符、关系运算符和逻辑运算符。 1、算术运算符 矩阵算术运算符 运算符…

将stylus 样式 转换成sass,scss

因为有一个项目使用的是 stylus. 后来的项目使用了 scss, 但是很多样式代码都可以共用的, 就是格式不太一样 要是一点一点来转化 就累死了 就想着网上找到一个工具也可以 能实现快速转换 没想到还真有 npm install -g stylus-converter mac sudo npm install -g s…

@import ‘./common/stylus/mixins.styl‘引起的一系列错误

import ./common/stylus/mixins.styl’引起的一系列错误 环境&#xff1a;vue-cli 4 代码&#xff1a; <template><div><h1>App 组件</h1><button class"btn btn1">按钮1</button><button class"btn btn2">按…

stylus的使用

欢迎访问我的博客地址 : 博客地址 stylus的使用 前提条件是已经有了vue项目&#xff0c;如果没有&#xff0c;请先建立&#xff0c;具体方法看这里https://cn.vuejs.org/v2/guide/installation.html 安装stylus 建立好项目后我们来安装stylus npm install -D stylus-loader s…

CSS预处理框架——Stylus

目录 内容介绍一、特征二、选择器&#xff08;Selectors&#xff09;  1、缩排 :book:  2、规则集  3、父级引用  4、消除歧义 三、变量&#xff08;Variables&#xff09;  1、变量 :mag:  2、标识符&#xff08;变量名&#xff0c;函数等&#xff09;  3、属性…