专栏首页电子狂人Matlab系列之符号运算(下)

Matlab系列之符号运算(下)

上一篇主要对符号对象进行了一些生成和使用的基本操作,然后本篇将介绍符号矩阵、微积分、积分变换以及符号方程的求解,具体内容就往下慢慢看了。

~Show Time~

符号矩阵

符号矩阵的生成

符号矩阵的生成和数值矩阵的相关操作类似,创建方法有以下的几种:

1、直接创建符号矩阵

2、用类似创建数值矩阵的方法创建符号矩阵

3、直接将数值矩阵转换成符号矩阵

根据以上的三种创建方法直接进行举例:

%方法1:元素长度可以是任何符号对象,元素长度也可不同
A1=str2sym('[a b; c d]')
A2=str2sym('[x+2*x,5*z+3*z,y-1,z/z]')

%方法2:先预定义所需的符号变量,再按数值矩阵的创建方法创建符号矩阵
clear%清除旧变量
syms x y z
B1=[x+2*x,5*z+3*z,y-1,z/z]

%方法3:使用sym将数值矩阵转换成符号矩阵
clear%清除旧变量
C1=[0 0.125 0.25 ;0.333 0.5 0.6;1 2 3]%数值矩阵
C2=sym(C1)%符号矩阵

结果:

从以上的输出结果也可以很明显的看出符号矩阵和数值矩阵的区别,符号矩阵的每一行都会用"[ ]"来标记。

符号矩阵的运算

运算和数值矩阵的类似,具体的介绍就参考之前的发的篇章了,直接进行部分运算举例,遇不懂的也继续参考之前发的篇章;

Matlab系列之矩阵秀

数组的运算+矩阵的运算

举例1:

%简单的运算
syms a b c d e f g h
A=[a b; c d];
B=[e f; g h];
C1=A.*B
C2=A.^B
C3=A*A-A^2
c3=A+B

结果1:

举例2:

%解符号线性方程组
syms a11 a12 a21 a22 b1 b2;
A=[a11 a12; a21 a22];
B=[b1 b2];
X=B/A;%相当于解线性方程组X*A=B的X
x1=X(1)
x2=X(2)

结果2:

符号微积分

微积分作为高等数学的基础,显然MATLAB的数学工具箱里肯定是有相关的计算功能,以下讲到的函数同样适用于数值计算。

极限

在进行微积分前,先对极限的函数进行使用学习,函数是:limit,格式如下:

limit(F,x,a)%计算符号表达式F在x趋于a时的极限
limit(F,a)%计算符号表达式F在默认自变量趋于a时的极限
limit(F)%计算符号表达式F在默认自变量趋于0时的极限
limit(F,x,a,'left')和limit(F,x,a,'right')%这两个就分别是x趋于a的左右极限

对以下几个表达式进行编程举例:

程序:

%创建表达式
syms x a
F1=sin(x)/x;
F2=1/x;
F3=(1+a/x)^x;
F4=exp(-x);
%计算极限值
s1=limit(F1)
s2=limit(F2,x,0,'right')
s3=limit(F2,x,0,'left')
s4=limit(F3,x,inf)
s5=limit(F4,x,inf)

结果:

微分

微分用的函数diff,需要注意的主要就是微分次数以及微分变量了,使用格式如下:

diff(S)%求符号表达式对默认自变量的微分
diff(S,'x')%求符号表达式对自变量x的微分
diff(S,n)%求符号表达式对默认自变量的n次微分
diff(S,'x',n)%求符号表达式对自变量x的n次微分

举例:

%创建表达式
S1=str2sym('2*x^3-a*x^2+b*x-3');
S2=str2sym('x*sin(a*x)');
%微分运算
D1=diff(S1)
D2=diff(S1,2)
D3=diff(S1,'a',2)
D4=diff(S2,'a')

结果:

积分

积分函数就是int,积分又分为不定积分和定积分,所以计算时要注意两者的区别,使用格式如下:

int(S)%求符号表达式S对默认自变量的不定积分
int(S,'x')%求符号表达式S对自变量x的不定积分
int(S,a,b)%求符号表达式S对默认自变量从a到b的定积分
int(S,'x',a,b)%求符号表达式S对自变量x从a到b的定积分

对以下几个表达式进行编程计算:

%创建表达式
syms x z a
S1=(-2*x)/((1+x^2)^2);
S2=x/(1+z)^2;
S3=x*log(1+x);
%积分计算
I1=int(S1)
I2=int(S2)
I3=int(S2,'z')
I4=int(S3,0,a)

结果:

符号积分变换

介绍几种比较常见的积分变换的函数使用,Fourier变换、Laplace和z变换,关于他们的定义我就不说了,有需要的可自行再深入了解,只对这三种变换的函数进行使用介绍。

Fourier变换及其逆变换

变换的函数分别为,fourier和ifourier,使用格式如下:

F=fourier(f)%相当于f(x)->F(w),若f=f(w),则F=F(t)
F=fourier(f,v)%指定Fourier变换结果F的变量为v
F=fourier(f,u,v)%指定u为f的自变量,v为F的自变量
%逆变换
f=ifourier(F)%F=F(w)->f=f(x),若F=F(x)则f=f(t)
f=ifourier(F,v)%指定f的变量为u
f=ifourier(F,u,v)%指定u为F的自变量,v为f的自变量

举例:

syms x w u v
f1=sin(x)*exp(-x^2);
f2=exp(-abs(w));
f3=x*exp(-abs(x));
F1=fourier(f1)
F2=fourier(f2,v)
F3=fourier(f3,u,v)

%逆变换
clear
syms w x
F1=sin(w);
F2=exp(-abs(x));
if1=ifourier(F1)
if2=ifourier(F2,x)

结果:

Laplace变换及其逆变换

Laplace相当于Fourier的变换的另一种形式,即e^(-jwt)变成了e^(-st),所以函数的使用也一样,就不进行使用举例了,函数的使用格式如下:

L=laplace(f)%f(t)->L(s),或f(s)->L(t)
L=laplace(f,t)%指定L的变量为t
L=laplace(f,w,z)%指定w为f的变量,z为L的变量
%逆变换
f=ilaplace(L)%L(s)->f(t)或L(t)->f(x)
f=ilaplace(L,y)%y为函数f的变量
f=ilaplace(L,x,y)%x为L的变量,y为f的变量

z变换及其逆变换

z变换相当于Fourier的离散表达,函数使用格式如下:

F=ztrans(f)%f(n)->F(z)或f(z)->F(w)
F=ztrans(f,w)%指定结果形式为F(w)
F=ztrans(f,k,w)%指定f为f(k),F为F(w)
%逆变换
f=iztrans(F)%F(z)->f(n)或F(n)->f(k)
f=iztrans(F,k)%指定结果形式为f(k)
f=iztrans(F,w,k)%指定表现形式为F(w),f(k)

举例:

syms a k w x n z
f1=n^4;
f2=n^z;
f3=sin(a*n);
f4=exp(k*n^2)*cos(k*n);
F1=ztrans(f1)
F2=ztrans(f2)
F3=ztrans(f3,w)
F4=ztrans(f4,k,x)

%逆变换
Z1=2*z/(z-2)^2;
Z2=n/(n+1);
Z3=z/(z-a);
iz1=iztrans(Z1)
iz2=iztrans(Z2)
iz3=iztrans(Z3,k)

结果:

符号方程求解

代数方程求解

上一篇中的举例其实已经接触到了该函数,即solve函数,直接上格式:

g=solve(eq)%求解代数方程eq=0,默认自变量
g=solve(eq,var)%求解代数方程eq=0,自变量指定为var
g=solve(eq1,eq2,...,eqn,var1,var2,...,varn)%求解由多个符号表达式组成的代数方程组,自变量分别为var1,var2,...,varn

举例1:

%求一元二次方程ax^2+bx+c=0的解
syms a b c x
f=a*x^2+b*x+c;
g1=solve(f)%默认自变量
g2=solve(f,a)%指定自变量为a

结果1:

举例2:

%求解多个方程组成的线性方程组
syms x y z
f=x^2-y^2+z-10;
g=x+y+5*z;
h=2*x-4*y+z;
[x,y,z]=solve(f,g,h)%以常规变量形式输出
s=solve(f,g,h)%结果存在结构体变量s中

结果2:

微分方程求解

微分方程的求解之前首先要了解微分方程在MATLAB中该怎么表示,微分方程中用D表示一次微分,D2和D3分别表示二次以及三次微分,D之后的字符为因变量。

方程求解的函数使用格式如下:

r=dsolve('eq1,eq2,...,','cond1,cond2,...','v')

"eq1,eq2,..."为微分方程,"cond1,cond2,..."为常微分方程的初始条件,v为指定的自变量,若无指定,则默认为”t“。

举例1:

%求微分方程dy/dx=ay的通解以及y(0)=b时的特解
syms a y
eq='Dy=a*y'
y1=dsolve(eq)%通解
y2=dsolve(eq,'y(0)=b','x')%特解

结果1:

eq =
    'Dy=a*y'
y1 =

    C1*exp(a*t)
y2 = 
    b*exp(a*x)

举例2:

%求微分方程组x'=y+x和y'=2x的通解
[x,y]=dsolve('Dx=y+x,Dy=2*x')

结果2:

举例3:

%求微分方程y''=x+y',且y(0)=1,y'(0)=0时的特解
y=dsolve('D2=x+Dy','y(0)=1','Dy(0)=0','x')

结果3:

无穷级数的求和运算

普通的数值求和运算直接sum就行了,但是无穷级数求和,sum就没得法了,需要使用符号表达式求和函数:symsum,格式为:symsum(a,x,m,n)

注:a为级数的通项,是符号表达式;x是求和变量;m和n分别为求和的开始项和结束项,显然就是无穷了,即inf。

举例:

求下面两个级数的和函数:

syms n x
a1=(n^3)*(x^(n-1));
a2=(n^3)/(5^n);
s1=symsum(a1,n,1,inf)
s2=symsum(a2,n,1,inf)

结果:

注:piecewise(abs(x) < 1, (x^3 + 4x^2 + x)/(x(x - 1)^4))的意思是当abs(x)<1这个条件成立,则结果 (x^3 + 4x^2 + x)/(x(x - 1)^4)有效。

很显然s1的结果不是最简的,使用simplify函数进行化简后结果为:

本篇到此结束了,关于符号运算的篇章也到此结束,接下来的篇章可能是用之前学到的一些函数对方程组之类的进行求解的应用,也可能是数据分析的一些方法,待我再理理先

本文分享自微信公众号 - 电子狂人(DZKR666),作者:狂人V

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Matlab系列之矩阵秀

    上次讲完了数组的基本操作,不知道是否熟悉使用了,本篇将要对矩阵部分的操作再进行介绍,这部分的内容我觉得蛮有意思的,不过你们觉不觉得我就不知了,但还是想让你们可以...

    狂人V
  • Matlab系列之数组(矩阵)的生成

    从本篇开始,会有一段时间都将用于记录数组、矩阵的操作等等,如果以前没有接触过相关的,可能会觉得要展示的是很复杂的东西,但并不是,这是一个很简单的部分,但也是一个...

    狂人V
  • Matlab系列之运算符和标点符号的功能介绍

    。就不多讲太多废话了,开始分享今天的内容,对MATLAB的运算符做个介绍,然后再对标点符号进行功能说明。

    狂人V
  • 6大设计原则

    所有引用基类的地方必须能透明地使用其子类对象。 只要父类能出现的地方子类就可以出现。

    用户2909867
  • 数据库数据挖掘知识点总结(Microsoft 时序算法)

    前言 本篇文章同样是继续微软系列挖掘算法总结,前几篇主要是基于状态离散值或连续值进行推测和预测,所用的算法主要是三种:Microsoft决策树分析算法、Micr...

    机器学习AI算法工程
  • 一个插排引发的设计思想 (三) 委托与事件

    FlyLolo
  • Cilium使用 (Cilium 3)

    Cilium要求的内核版本比较高,需要对内核进行升级,否则会运行失败。错误日志如minimal supported kernel version is 4.8....

    charlieroro
  • SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测...

    GuZhenYin
  • 2017大数据分析师能力模型与企业需求报告:你的技能够“啃”几年“老本”?

    东湖大数据·数据智库获取8198份真实的企业大数据领域数据分析岗位相关的招聘数据,具有针对性的发布《2017大数据分析师能力模型与企业需求报告》,以多维度视角全...

    钱塘数据
  • LeetCode 100 及 101题

    输入: 1 1 / \ 2 2...

    Carlos Ouyang

扫码关注云+社区

领取腾讯云代金券