MATLAB 科学计算
- 符号运算
- 定义
sym_x = sym('x'); % 定义一个符号变量,用 sym_x 在代码中引用,显示为 x syms a b; % 同时定义两个符号变量 a 和 b
- 使用
- 符号变量使用与普通变量没有区别。
- 包含符号变量的表达式赋值给其他变量,这个变量也会变成符号变量。
- 数值代入
- 符号变量的表达式无法直接代入数值,需要使用
matlabFunction
函数转换。 syms x y; z = x^2 + y^2; func_z = matlabFunction(z); % func_z = @(x,y)x.^2+y.^2
matlabFunction
函数自动识别表达式中的符号,创建对应参数的匿名函数。- 入参可以是数组。
- 符号变量的表达式无法直接代入数值,需要使用
- 定义
- 代数运算
- 因式分解
syms x; f = factor(x^3 - 1); % f = [x - 1, x^2 + x + 1]
syms a b c d; % 指定对含 b 或 c 的项进行因式分解,其他项因式分解的结果放在最前面 y = -a*b^5*c*d*(a^2 - 1)*(a*d - b*c); f = factor(y, [b, c]); % f = [-a*d*(a - 1)*(a + 1), b, b, b, b, b, c, a*d - b*c]
- 展开
syms x y f = expand((x + y)^3); % f = x^3 + 3*x^2*y + 3*x*y^2 + y^3
- 合并同类项
syms x y; f = x^2*y - x*y^2 - x*y + y^2; f_x = collect(f); % 默认对 x 合并 % f_x = y*x^2 + (- y^2 - y)*x + y^2 f_y = collect(f, y); % 指定对 y 合并 % f_y = (1 - x)*y^2 + (x^2 - x)*y
- 分式通分
syms x y; f = 1/x - 1/y; num = numden(f); % 返回分子 % num = y - x [num, den] = numden(f); % 返回分子、分母 % num = y - x, den = xy
- 因式分解
- 线性代数
- 构造
- 单位矩阵:
A = eye(n)
,返回 阶单位矩阵。 - 零矩阵:
A = zeros(n)
,返回 阶零矩阵。 - 对角矩阵:
A = diag([a1, a2, a3])
,返回以a1, a2, a3
为对角元的对角矩阵。 - 浮点数随机矩阵:
A = rand(n)
,返回 阶矩阵,元素为 内的随机浮点数。 - 整数随机矩阵:
A = magic(n)
,返回 阶矩阵,元素为 中的整数的乱序排列。
- 单位矩阵:
- 运算
- 加法:
A + B
- 乘法:
A*B
- 乘幂:
A^n
- 点乘:
A.*B
,矩阵元素对应相乘。其他运算也有类似的点运算。 - 转置:
A_transpose = A'
- 求逆:
A_inverse = inv(A)
- 行列式:
d = det(A)
- 特征值
e = eig(A)
:返回矩阵特征值,以列向量给出。[V, D] = eig(A)
:返回矩阵单位特征向量以及相似的对角矩阵。
- LU 分解:
[L, U] = lu(A)
- 单位化:
B = normalize(A)
,将矩阵的列单位化。
- 加法:
- 构造
- 多项式
- 表示
- MATLAB 中多项式用行向量表示。
- 对于多项式 ,行向量则是多项式的系数 。
- 运算
- 求值
p = [1 -3 2]; % p(x) = x^2 - 3*x + 2 v = polyval(p, 3) % 求 p(3) % v =
- 特征多项式
A = [[16, 2, 3, 13]; [5, 11, 10, 8]; [9, 7, 6, 12]; [4, 14, 15, 1]] p = poly(A); % 求方阵 A 的特征多项式系数向量 % p = 1.0e+03 * [0.0010, -0.0340, -0.0800, 2.7200, 0.0000]
lambda = [1, 2, -2, 0]; p = poly(lambda); % 求特征值对应的特征多项式 % p = [1, -1, -4, 4, 0]
- 乘法
p = [1, -3, 2]; % p(x) = x^2 - 3*x + 2 q = [2, -1]; % q(x) = 2*x - 1 pq = conv(p, q); % 系数向量的卷积就是多项式乘积的系数, p(x)*q(x) = 2*x^3 - 7*x^2 + 7*x - 2 % pq = [2 -7 7 -2]
- 除法
p = [1, -3, 2]; % p(x) = x^2 - 3*x + 2 q = [2, -1]; % q(x) = 2*x - 1 [d, r] = deconv(p, q); % 多项式除法,p(x) = d(x)*q(x) + r(x) % d = [0.5000, -1.2500], r = [0, 0, 0.7500]
- 求根
f = [1, -3, 2]; % f(x) = x^2 - 3*x + 2 r = roots(f); % 求 f(x) = 0 的根 % r = [2; 1] % 根以列向量形式给出
- 求导
f = [1, 2, -1, 4, 1]; % f(x) = x^4 + 2*x^3 - x^2 + 4*x + 1 der_f = polyder(f); % 对 f(x) 求导 % der_f = [4, 6, -2, 4]
- 拟合
x = [1, 3.51, 6.4, 9.92, 8.76]; y = [0.48, 1.03, 2.31, 6.48, 4.49]; p = polyfit(x, y, 2); % 用二次多项式拟合 % p = [0.0865, -0.3067, 0.8058]
- 求值
- 表示
- 微积分
- 极限
syms x; f = sin(x)/x; l = limit(f) % 默认求自变量为 x 时 f(x) 在 x = 0 的极限 % l = 1 l = limit(f, x, pi/2) % 求 f(x) 在 x = 1 的极限 % l = 2/pi
syms x; f = abs(x)/x; l = limit(f, x, 0, 'Left'); % 求左极限 % l = -1 l = limit(f, x, 0, 'Right'); % 求右极限 % l = 1
- 求导
syms x; f = sin(x); d1 = diff(f); % 默认以 x 为自变量求 f' % d1 = 2*x*cos(x^2) d2 = diff(f, x, 2); % 求 f''(x) d2 = 2*cos(x^2) - 4*x^2*sin(x^2)
- 积分
syms x; f = f = x^(1/2)/(1 + x^(1/3)); intf = int(f) % 求 f(x) 的不定积分 % intf = 6*atan(x^(1/6)) + 2*x^(1/2) - 6*x^(1/6) - (6*x^(5/6))/5 + (6*x^(7/6))/7 intf = int(f, 0, 1) % 求 f(x) 在 [0, 1] 上的定积分 % intf = (3*pi)/2 - 152/35
- 极限