Matlab学习03-符号的替换及运算(接上一篇)
在上一篇的学习中,我知道了符号变量的声明👇
Matlab学习02-matlab中的数据显示格式及符号变量-CSDN博客
接下来开始学习符号运算相关的内容,并学习最为核心的matlab程序设计。之前的学习都是为了程
序设计做铺垫,程序设计又是为了其它的项目需求做铺垫,例如数字信号处理,数字图像处理都要
用到matlab的程序设计,也可以用其它编程语言对数字图像进行处理,后期会去学习使用Java语言
来编写代码并对数字图像进行处理,当前的学习都以matlab为主。
目录
一,符号替换
二,常用的符号运算
1,diff函数
2,int函数
3,simplify
4,solve函数
1)求解单个方程
2)求解方程组:
一,符号替换
在matlab中,subs函数(substitute :替代品)可以用于符号变量的替换,该命令适用单个符号矩
阵,符号表达式,符号代数方程和微分方程中的变量替换,该函数的调用方法如下:
- ,其中:
1)f:表示需要被替换的符号表达式或者是符号方程式。
2)新的符号变量 :用来替代符号表达式或符号方程中旧的符号变量 。
如果用具体的数值型符号变量来替代符号变量 ,就会和符号变量 的系数进行运算。
例如,我有一个符号方程式:f=sin(x)+5*x==0 % 自变量 x需要提前声明为符号变量即syms x
接着我传入两个参数到sub符号替换函数中:
subs(f,6)
f 表示符号方程式f=sin(x)+5*x==0 ;
6 表示一个数值型的符号变量
对应的效果如下 ↓
可以看到,数值型的符号变量 可以与旧的符号变量 前的系数 (系数也是数值型符号变
量),进行算数运算:
- :
其中: 表示被替换的符号变量, 表示指定的新符号变量。
相较于只能传入两个参数并且只能替换掉自变量 的上一个subs函数而言,这个函数可以指
定要替换的符号变量,而不仅仅局限于自变量 。
依旧是 f=sin(x)+5*x==0 这个符号方程式,现在我不想替换自变量 ,只想替换自变量 前的
系数 ,此时,我需要先传入符号方程式 f,接着传入被替换的符号变量 5,最后传入指定的
新符号变量 6。如下↓
二,常用的符号运算
可以用数字代替符号得到数值,符号运算的种类很多,在这里我先学习常用的符号运算,其它的使
用方法都大同小异,如果再遇到有意思的符号运算,我再补充到文章里面。
1,diff函数
diff 全写为differential:微分的,差别的。顾名思义就是求微分或差分的符号函数。该函数所需传入的参数如下:
根据matlab给出的函数解释,可以知道diff函数有三种用法,由于一般都习惯于将函数用字母 表示,因此,我在这里用函数 表示函数 。其中:
- :对符号函数 进行微分运算。一般默认是对自变量 进行求导。
现在我有一个符号表达式,如下:
现在我使用 函数对符号表达式进行求导操作,结果如下:
% 口诀:幂函数求导,摘帽减一。
- :符号函数 对指定变量 进行微分运算。
在上一个函数中只能对自变量 进行求导,但如果我想对变量 进行求导,就需要使用可以
传入两个参数的 函数,其中的变量,可以是符号表达式f=x^n幂函数中的自变
量x(底数),也可以是变量 n(幂)。如果我想对自变量x求导,可以写成diff(f,x),如下:
显而易见,效果和diff(f)一样。
如果我想对自变量n(幂)求导,可以写成diff(f,n),如下:
% 此时,幂函数变成指数函数,底数x为常量,指数n为自变量。
% 由指数求导,可得符号表达式f的求导
- :计算符号函 对自变量或指定变量 的 阶导数, 是正整数。
不管是传入一个参数的diff函数还是传入两个参数的diff函数,都只能进行一阶求导运算,如
果想要求二阶及以上的导,就需要使用可以传入三个参数的diff函数。最后一个参数dim为求
导的次数。例如,符号表达式 f=x^n 对自变量 x 求 二阶导:
% 因为在求导过程中是对自变量x求导,因此,变量n作为系数可以看成是常数直接提出去,
% 只对求导,由幂函数求导,可得,最后再乘上系数n,
% 二阶导的结果就是
2,int函数
在matlab中,int函数(全写为:integral 积分的)可见该函数是用于求积分的符号函数。
需要注意的是,求积分有两种:不定积分和定积分。定积分相较于不定积分就是多了上下限并能够
求出具体的积分结果。
和求导数的diff函数类似,求积分的int函数也有三种:
- :求符号表达式f关于自变量的不定积分。
有一个符号表达式 f=x^2,现在使用int函数对其求不定积分:
求不定积分在高数中有具体的讲解。并且可知,积分和求导是相反的操作,例如
求导的结果是,即 ,因此 的不定积分为:
之所以要在求出来的不定积分后面加上常数C,是因为不定积分的“不定”二字已经告诉了我
们,算出来的结果没有固定的值。由于常数C在求导时,会变成0:
, ,,,... 的导数都是
对 求不定积分,不能确定具体是哪一个表达式,因此需要加上常数C(C=0,1,2,3,4....)。
又例如,对符号表达式 f=x^n 求不定积分,也是一样的求解:
可以看到,的不定积分结果有两种可能:
1) 当幂 n=-1时,f=1/x,根据过的常用求导等式,可知
2) 当幂 n 不等于-1时,f就是幂函数,因为求导是摘帽子,所以求积分就是戴帽子并且前面
乘带的帽子就行。【在数学运算上,一定要加上常数C,不加就是错误答案,没分。】
- :计算符号表达式 关于变量 的不定积分。
这个函数可以计算符号表达式 关于指定变量 的不定积分,而不是默认的自变量,例
如,我不想让符号表达式 f=x^n 对自变量x求不定积分,而是对变量n求不定积分,如下:
此时,幂函数为指数函数,根据指数函数的求导公式,,可得
因此,,替换成上式中的变量,即
- 或:计算符号表达式f关于默认变量或指定变量n从a到b的定积
分。在求定积分时,结合不定积分的结果再借助牛顿莱布尼兹公式就可以求出常数C。
其中:
1)a表示积分的下限,类似于区间的起始位置,a<b。
2)b表示积分的上限,类似于区间的结束位置,b>a。
3)n表示符号表达式f对指定的变量n就行求定积分。
例如,现在我让符号表达式 f=x^n 对 变量 n求定积分:
3,simplify
在matlab中,simplify函数用于包含和式,根式,分数,乘方,指数,对数,三角函数等的表达
式的化简。可以将复杂的符号表达式转换为更简单或更易于理解的形式。
例如,符号表达式 f=x^2 + 2*x + 1 可以利用完全平方和公式化简成 f=(x + 1)^2,如下👇
simplify函数也可以将分式 f= (x^2 - 1) / (x - 1) 上下约分化简:
%
也可以根据已知的勾股定理a²+b²=c² 可以直接算出sin(x)^2 + cos(x)^2 的结果,如下👇
需要注意的是,simplify函数虽然并不总是能找到最简单的形式,结果可能依赖于表达式的复杂
性。对于某些复杂的表达式,简化可能需要较长的计算时间。但整体上还是很有用的。
4,solve函数
在matlab中,ssolve 函数用于求解方程或方程组的解。它可以处理符号方程(使用符号变量)和数
值方程(使用数值变量)。solve 函数的主要作用是找到能使给定方程成立的变量值。
该函数调用方法如下:
可以看到,有关solve函数的使用有很多种,这里就拿其中几个来做例子,剩下的如果感兴趣的话,可以自己去探索。
1)求解单个方程
当求解一个符号方程式或者是数值方程式的自变量x的值时,只需要使用solve(f,x)这个函数即可,其中:
- f:要求解的符号方程式或者是数值方程
- x:需要返回的指定变量x取值结果
解方程很简单,这里不赘述。
2)求解方程组:
当一个问题使用一个方程式无法解决问题,而需要列出两个及以上的方程式时,这些方程式就组成了方程组。需要求几个变量,就得列 几个方程。例如,有两个变量x,y未知,这个时候,就需要列出两个同时包含这两个变量的方程,如下,由方程f1和方程f2求解出x和y的取值结果:
可以看到,得到的解在结构体中,如果想要知道求解的x和y结果是多少,就需要将结果赋值给一个
变量,之后通过变量来获取结构体内的x和y的值:
需要注意:
使用solve函数得到的解是以符号变量的形式表示的,而不是具体的数值。这种符号解可以在后续
的计算中继续使用,具有更高的灵活性。
【个人ps:因为是求解符号表达式的解,得到的变量自然也就是符号变量】
如果需要数值解,可以使用 double 函数将符号解转换为数值形式。
至此,符号变量的使用,符号的替换及符号的运算等相关的内容学习完。
有问题请在评论区留言或者是私信我,回复时间不超过一天。
接下来就要开始学习matlab相关的程序设计基础语句。