书籍:Matlab实用教程
外出回来,还是用Matlab2021a
电脑信息:Intel® Xeon® CPU E5-2603 v3 @ 1.60GHz
系统类型:64位操作系统,基于X64的处理器 windows10 专业版
第3章MATLAB的符号计算
3.1 符号表达式的建立
3.1.1 创建符号常量
cpp
>> a=sym(sin(2))
a =
4095111552621091/4503599627370496
>> a1=2*sqrt(5)+pi
a1 =
7.6137
Matlab2021a与之前的版本也不同,sym改为str2sym
cpp
>> a2=sym('2*sqrt(5)+pi')
错误使用 sym>convertChar (第 1580 行)
Character vectors and strings in the first argument can only specify a variable or number. To evaluate character vectors and strings representing symbolic expressions, use 'str2sym'.
出错 sym>tomupad (第 1296 行)
S = convertChar(x);
出错 sym (第 234 行)
S.s = tomupad(x);
>> a2=str2sym('2*sqrt(5)+pi')
a2 =
pi + 2*5^(1/2)
>> a3=sym(2*sqrt(5)+pi)
a3 =
2143074082783949/281474976710656
>> a4=sym(2*sqrt(5)+pi,'d')
a4 =
7.613728608589372726100918953307
>> a31=a3-a1
a31 =
0
>> a5='2*sqrt(5)+pi'
a5 =
'2*sqrt(5)+pi'
3.1.2 创建符号变量和表达式
1、使用sym命令创建符号变量和表达式
cpp
>> sym('x','real')
ans =
x
>> sym('y','real')
ans =
y
>> z=str2sym('x+iy')
z =
iy + x
>> real(z)
ans =
x + real(iy)
>> sym('x','unreal')
错误使用 sym/assume (第 590 行)
输入 应与以下值之一匹配:
'integer', 'rational', 'real', 'positive', 'clear'
输入 'unreal' 与任何有效值均不匹配。
出错 sym (第 253 行)
assume(S, n);
>> f1=str2sym('a*x^2+b*x+c')
f1 =
a*x^2 + b*x + c
2、使用syms命令创建符号变量和符号表达式
cpp
>> 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
f3 =
a*x^2 + b*x + c
3.1.3 符号矩阵
cpp
>> A=str2sym('[a,b;c,d]')
A =
[a, b]
[c, d]
>> syms a b c d
>> A=[a b;c d]
A =
[a, b]
[c, d]
>> B='[a,b;c,d]'
B =
'[a,b;c,d]'
>> C=str2sym(B)
C =
[a, b]
[c, d]
3.2 符号表达式的代数运算
3.2.1 符号表达式的代数运算
cpp
>> syms a11 a12 a21 a22
>> A=[a11 a12;a21 a22]
A =
[a11, a12]
[a21, a22]
>> det(A)
ans =
a11*a22 - a12*a21
>> eig(A)
ans =
a11/2 + a22/2 - (a11^2 - 2*a11*a22 + a22^2 + 4*a12*a21)^(1/2)/2
a11/2 + a22/2 + (a11^2 - 2*a11*a22 + a22^2 + 4*a12*a21)^(1/2)/2
>> f=str2sym('2*x^2+3*x+4')
f =
2*x^2 + 3*x + 4
>> g=str2sym('5*x+6')
g =
5*x + 6
>> f+g
ans =
2*x^2 + 8*x + 10
>> f*g
ans =
(5*x + 6)*(2*x^2 + 3*x + 4)
3.2.2 符号数值任意精度控制和运算
cpp
>> a=str2sym('2*sqrt(5)+pi')
a =
pi + 2*5^(1/2)
>> digits
Digits = 32
>> vpa(a)
ans =
7.6137286085893726312809907207421
>> vpa(a,20)
ans =
7.6137286085893726313
>> digits(15)
>> vpa(a)
ans =
7.61372860858937
>> a1=2/3
a1 =
0.6667
>> a2=sym(2/3)
a2 =
2/3
>> digits
Digits = 15
>> a3=vpa('2/3',32)
a3 =
0.66666666666666666666666666666667
>> format long
>> a1
a1 =
0.666666666666667
3.2.3 符号对象与数值对象的转换
cpp
>> a1=str2sym('2*sqrt(5)+pi')
a1 =
pi + 2*5^(1/2)
>> b1=double(a1)
b1 =
7.613728608589373
>> a2=vpa(str2sym('2*sqrt(5)+pi'),32)
a2 =
7.6137286085893726312809907207421
>> b2=numeric(a2)
函数或变量 'numeric' 无法识别。
>> b3=eval(a1)
b3 =
7.613728608589373