前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab符号计算(一)

matlab符号计算(一)

作者头像
巴山学长
发布2019-07-15 14:50:41
3K0
发布2019-07-15 14:50:41
举报
文章被收录于专栏:巴山学长巴山学长

计算一般可分为解析计算和数值计算,解析计算是连续的求解过程,而数值计算则是离散的求解过程。在matlab中,原则上只要数学上能解析计算的,采用matlab符号计算就能够精确求解。

1、符号的创建

(a) 符号常量的创建

符号常量是不含变量的符号表达式。在MATLAB中,使用sym指令来建立符号常量。 一般调用形式为:sym('常量') 。

例1.1

a=sym('sin(2)')

a =

sin(2)

sym命令还可以把数值转换成某种格式的符号常量,调用形式为:sym(常量,参数)。说明:参数可以选择为'd'、'f'、'e'或'r'四种格式,可省略。

例1.2 把常量转换为符号常量

a = sym(sin(2),'r')

a =

4095111552621091

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

4503599627370496

(b) 符号变量的创建

符号变量即为含有变量的符号表达式,sym可用于定义符号变量,但sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。 syms函数的一般调用格式为:

syms 变量1 变量2 … 变量n

注意:符号变量之间用空格而不要用逗号或分号分隔。

例1.3

syms x y

y = sin(x) + cos(x)

2、符号表达式的建立

符号表达式是代表数字、函数和变量的字符串或字符串数组,它不要求变量要预先定义的值。符号表达式包含符号函数和符号方程,其中符号函数没有等号,而符号方程必须带有等号。符号表达式主要有下面三种方式:

① 用单引号建立符号表达式

例2.1

f = 'a*x^2+bx+c=0'

f =

'a*x^2+bx+c=0'

② 用sym建立符号表达式

例2.2

f1 = sym('a*x^2+b*x+c')

f1 =

a*x^2+b*x+c

③ 使用已经定义的符号变量来组成符号表达式

例2.3

syms a b c x

%创建多个符号变量

f2 = a*x^2+b*x+c

%创建符号表达式

f2 =

a*x^2+b*x+c

或者,

syms('a','b','c','x')

f3 = a*x^2+b*x+c; %创建符号表达式

3、符号运算

(a) 运算符

MATLAB采用了重载(Overload)技术,使得用来构成符号表达式的运算符,无论在拼写还是在使用方法上,都与数值计算中的算符完全相同,如“+”,“-”,“*”,“\”,“/”,“^”等。符号对象的比较中,没有“>”、“≥”,“<”,“≤”的概念,而只有是否“等于”的概念,即“==”与“~=”。如果要判断两个符号数值的大小一般来说有两种办法,一种是利用double将其转化成数值型的,另一种是利用sort+“==”或“~=”。

例3.1

a = sym('2');

b = sym('3');

double(a)<double(b)

ans =

1

sa = sort([b,a])

sa =

[2, 3]

a == sa(1)

ans =

1

(b) 极限、导数和级数的符号计算

例3.2 极限

clc;

clear;

% 求极限

syms n;

% limit函数用于求极限运算。

% 若y=f(x),limit(y)表示x→0时的极限,

% limit(y,x,a)表示x→a时的极限

limit( n^(n+1/2) /( exp(n)*gamma(n+1)), n,inf)

ans =

1/(2*pi)^(1/2)

例3.3 导数

的导数,

syms a t x;

f = [a, t*log(x); sqrt(t), x^2+3*x];

% 矩阵f对t的一阶导数

dfdt = diff(f,t);

dfdt =

[0, log(x); 1/(2*t^(1/2)), 0 ];

% 矩阵f对x的二阶导数

dfdx2 = diff(f,2);

dfdx2 =

[0, -t/x^2; 0, 2 ];

% 求二阶混合导数

dfdtdx = diff(diff(f,t),x);

dfdtdx =

[0, 1/x;0, 0];

例3.4 级数

syms k;

f1 = symsum( (k-2)/2^k, k, 3, inf);

f1 =

1/2

A = [1/(2*k+1)^2, (-1)^k/3^k];

f2 = symsum(A, k, 1, inf);

f2 =

[pi^2/8 - 1, -1/4]

温馨提示

如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档