MATLAB 中的高级数学运算:复数、微积分及相关应用
1. 复数相关知识
1.1 复数的表示与创建
复数通常写成 $z = a + bi$ 的形式,其中 $a$ 是实部,$b$ 是虚部,$i$ 为 $\sqrt{-1}$。在工程中,也常写成 $a + bj$ 的形式。在 MATLAB 里,
i
和
j
是内置函数,可用来创建复数,如
5 + 2i
或
3 - 4j
,且虚部值与
i
或
j
间无需乘号。
此外,MATLAB 还有
complex
函数用于创建复数,它可以接收两个数分别作为实部和虚部,或者只接收一个数作为实部,此时虚部为 0。示例代码如下:
>> z1 = 4 + 2i
z1 =
4.0000 + 2.0000i
>> z2 = sqrt(-5)
z2 =
0 + 2.2361i
>> z3 = complex(3,-3)
z3 =
3.0000 - 3.0000i
>> z4 = 2 + 3j
z4 =
2.0000 + 3.0000i
>> z5 = (-4) ^ (1/2)
ans =
0.0000 + 2.0000i
>> myz = input('Enter a complex number: ')
Enter a complex number: 3 + 4i
myz =
3.0000 + 4.0000i
1.2 复数的实部与虚部获取
MATLAB 提供了
real
和
imag
函数来分别获取复数的实部和虚部。示例如下:
>> real(z1)
ans =
4
>> imag(z3)
ans =
-3
1.3 复数的打印
使用
disp
函数可自动显示复数的实部和虚部;而
fprintf
函数默认只打印实部,若要打印完整复数,需分别打印实部和虚部。示例如下:
>> disp(z1)
4.0000 + 2.0000i
>> fprintf('%f\n', z1)
4.000000
>> fprintf('%f %f\n', real(z1), imag(z1))
4.000000 2.000000
>> fprintf('%f + %fi\n', real(z1), imag(z1))
4.000000 + 2.000000i
1.4 复数的判断
isreal
函数用于判断一个数是否为实数,若参数无虚部则返回逻辑真(1),否则返回逻辑假(0)。示例如下:
>> isreal(z1)
ans =
0
>> z5 = complex(3)
z5 =
3
>> isreal(z5)
ans =
0
>> isreal(3.3)
ans =
1
1.5 复数的运算
1.5.1 相等判断
两个复数相等的条件是它们的实部和虚部都相等,在 MATLAB 中可使用相等运算符进行判断。示例如下:
>> z1 == z2
ans =
0
>> complex(0,4) == sqrt(-16)
ans =
1
1.5.2 加减运算
对于两个复数 $z_1 = a + bi$ 和 $z_2 = c + di$,有 $z_1 + z_2 = (a + c) + (b + d)i$,$z_1 - z_2 = (a - c) + (b - d)i$。下面是实现复数相加的两种方法:
% 编程概念方法
addcomp.m
function outc = addcomp(z1, z2)
% Adds two complex numbers and returns the result
% Adds the real and imaginary parts separately
realpart = real(z1) + real(z2);
imagpart = imag(z1) + imag(z2);
outc = realpart + imagpart * i;
>> addcomp(3+4i, 2-3j)
ans =
5.0000 + 1.0000i
% 高效方法
addcomp2.m
function outc = addcomp2(z1,z2)
% Adds two complex numbers and returns the result
outc = z1 + z2;
>> addcomp2(3+4i, 2-3j)
ans =
5.0000 + 1.0000i
1.5.3 乘法运算
两个复数相乘的公式为 $z_1 * z_2 = (a + bi) * (c + di) = (a c - b d) + (a d + c b)i$。示例如下:
>> z1 = 3 + 4i
z1 =
3.0000 + 4.0000i
>> z2 = 1 - 2i
z2 =
1.0000 - 2.0000i
>> z1 * z2
ans =
11.0000 - 2.0000i
1.5.4 共轭与绝对值
复数 $z = a + bi$ 的共轭复数为 $\overline{z} = a - bi$,绝对值为 $|z| = \sqrt{a^2 + b^2}$。在 MATLAB 中,可使用
conj
函数求共轭复数,
abs
函数求绝对值。示例如下:
>> z1 = 3 + 4i
z1 =
3.0000 + 4.0000i
>> conj(z1)
ans =
3.0000 - 4.0000i
>> abs(z1)
ans =
5
1.6 复数方程表示为多项式
MATLAB 用系数行向量表示多项式,当表达式或方程涉及复数时也适用。例如,多项式 $z^2 + z - 3 + 2i$ 可用向量
[1 1 -3 + 2i]
表示。可使用
roots
函数求多项式方程的根,
polyval
函数求多项式在某点的值。示例如下:
>> roots([1 1 -3+2i])
ans =
-2.3796 + 0.5320i
1.3796 - 0.5320i
>> cp = [1 1 -3+2i]
cp =
1.0000
1.0000
-3.0000 + 2.0000i
>> polyval(cp,3)
ans =
9.0000 + 2.0000i
1.7 复数的极坐标形式
任何复数 $z = a + bi$ 可看作复平面上的点 $(a,b)$ 或向量,它也可用极坐标 $(r, \theta)$ 表示,其中 $r$ 是向量的模,$\theta$ 是角度。转换公式如下:
- 极坐标转直角坐标:$a = r \cos \theta$,$b = r \sin \theta$
- 直角坐标转极坐标:$r = \sqrt{a^2 + b^2}$,$\theta = \arctan(\frac{b}{a})$
在 MATLAB 中,可使用
abs
函数求 $r$,
angle
函数求 $\theta$。示例如下:
>> z1 = 3 + 4i;
r = abs(z1)
r =
5
>> theta = angle(z1)
theta =
0.9273
>> r*exp(i*theta)
ans =
3.0000 + 4.0000i
1.8 复数的绘图
常见的复数数据绘图方法有:
- 用
plot
函数绘制实部与虚部的关系
- 用
plot
函数只绘制实部
- 用
plot
函数在一个图中绘制实部和虚部并添加图例
- 用
polar
函数绘制模和角度
使用
plot
函数处理单个复数或复数向量时,会绘制实部与虚部的关系,例如
plot(z)
等同于
plot(real(z), imag(z))
。示例如下:
>> z1 = 3 + 4i;
>> plot(z1,'*', 'MarkerSize', 12)
>> xlabel('Real part')
>> ylabel('Imaginary part')
>> title('Complex number')
2. 微积分相关知识
2.1 积分
2.1.1 梯形法则
梯形法则是一种近似计算曲线下面积的简单方法,其公式为 $\frac{(f(a) + f(b))(b - a)}{2}$。在 MATLAB 中可通过自定义函数或使用内置的
trapz
函数实现。示例如下:
% 编程概念方法
trapint.m
function int = trapint(fnh, a, b)
% approximates area under a curve using a
% trapezoid
int = (b-a) * (fnh(a) + fnh(b))/2;
>> f = @ (x) 3 .* x .^ 2 - 1;
approxint = trapint(f, 2, 4)
approxint =
58
% 高效方法
>> x = [2 4];
>> y = f(x);
>> trapz(x,y)
ans =
58
若将区间 $[a, b]$ 划分为 $n$ 个小区间,对每个小区间应用梯形法则并求和,可提高计算精度。示例如下:
% 编程概念方法
trapintn.m
function intsum = trapintn(fnh, lowrange,highrange, n)
% implements trapezoidal rule using n intervals
intsum = 0;
increm = (highrange - lowrange)/n;
for a = lowrange: increm : highrange - increm
b = a + increm;
intsum = intsum + (b-a) * (fnh(a) + fnh(b))/2;
end
>> trapintn(f,2,4,2)
ans =
55
% 高效方法
>> x = 2:4;
>> y = f(x)
>> trapz(x,y)
ans =
55
此外,MATLAB 还有
quad
函数,它使用辛普森方法进行积分计算。示例如下:
>> quad(f,2,4)
ans =
54
2.2 微分
函数 $y = f(x)$ 的导数表示为 $\frac{dy}{dx}$ 或 $f’(x)$,定义为因变量 $y$ 相对于自变量 $x$ 的变化率,即函数在某点切线的斜率。
MATLAB 中的
polyder
函数可求多项式的导数,
polyval
函数可求导数在某些点的值。示例如下:
>> origp = [1 2 -4 3];
>> diffp = polyder(origp)
diffp =
3
4
-4
>> polyval(diffp, 1:3)
ans =
3
16
35
导数也可通过极限 $\lim_{h \to 0} \frac{f(x + h) - f(x)}{h}$ 定义,在 MATLAB 中可使用
diff
函数近似计算导数。示例如下:
>> f = @ (x) x .^ 3 + 2 .* x .^ 2 - 4 .* x + 3;
>> x = 1:3;
>> y = f(x)
y =
2
11
36
>> diff(y)
ans =
9 25
>> diff(x)
ans =
1 1
>> diff(y) ./ diff(x)
ans =
9
25
2.3 符号数学工具箱中的微积分运算
符号数学工具箱中有多个函数可进行符号微积分运算,如
diff
用于求导,
int
用于积分,
limit
用于求极限。示例如下:
% 求不定积分
>> syms x
>> int(3*x^2 - 1)
ans =
x^3-x
% 求定积分
>> int(3*x^2 - 1, 2, 4)
ans =
54
% 求极限
>> syms x h
>> f = @ (x) x .^3 + 2 .*x.^2 - 4 .* x + 3
>> limit((f(x+h)-f(x))/h,h,0)
ans =
3*x^2-4+4*x
% 符号求导
>> syms x f
>> f = x^3 + 2*x^2 - 4*x + 3
f =
x^3+2*x^2-4*x+3
>> diff(f)
ans =
3*x^2-4+4*x
3. 常见陷阱与编程风格指南
3.1 常见陷阱
-
忘记
fprintf函数默认只打印复数的实部。 - 外推距离数据集过远。
3.2 编程风格指南
曲线拟合效果越好,插值和外推的值就越精确。
4. 练习题
4.1 多项式相关
- 用系数行向量表示多项式 $2x^3 - 3x^2 + x + 5$ 和 $3x^4 + x^2 + 2x - 4$。
- 求函数 $f(x) = 3x^2 - 2x - 5$ 的根,并绘制该函数在 $[-3, 3]$ 区间的图像。
- 计算多项式 $3x^3 + 4x^2 + 2x - 2$ 在 $x = 4$,$x = 6$ 和 $x = 8$ 处的值。
-
对于多项式
pol = [3 6 5],用roots函数求根并绘图,然后将pol的最后一个数改为-7再次求根并绘图。
4.2 数据拟合相关
-
创建向量
x包含整数 1 到 20,向量y包含 20 个范围在 $[-2, 2]$ 的随机整数,拟合一条直线并绘图。 - 根据给定的肺压力 - 体积数据,编写脚本拟合直线并绘图,直线斜率为肺和胸壁的实际顺应性。
- 根据给定的电路电压 - 时间数据,拟合直线并确定电压为 5 时的时间。
- 生成 10 个范围在 $[0, 100]$ 的随机整数,拟合直线并绘图以检验其均匀分布性。
- 编写函数处理数据点向量,若向量长度不同则打印错误信息,否则拟合随机次数的多项式并绘图。
-
编写函数
halffit对温度数据进行二次插值,绘制原始数据、插值数据和插值曲线。 -
编写函数
fitsubs图形化显示不同次数多项式拟合数据的差异。 - 对四个点拟合直线和二次曲线并绘图。
- 根据给定的温度 - 时间数据,创建向量、绘图、拟合曲线并确定温度为 60 度和 65 度时的时间。
4.3 数据文件相关
- 对于汽车距离 - 速度数据,存储到文件中并读取,拟合直线并绘图。
- 编写函数处理数据点向量,在一个图中绘制数据点、二阶多项式和三阶多项式。
- 根据雪深数据文件,拟合二次曲线预测雪完全融化的周数并绘图。
- 根据公司成本 - 销售数据文件,绘制成本、销售和利润的柱状图并外推下一季度的成本。
4.4 复数相关
- 存储复数 $3 - 2i$ 和 $\sqrt{-3}$ 到变量中并以 $a + bi$ 的形式打印。
- 创建复数变量 $c_1 = 2 - 4i$ 和 $c_2 = 5 + 3i$,进行加减、乘法运算,求共轭复数和模,并转换为极坐标形式。
- 将表达式 $z^3 - 2z^2 + 3 - 5i$ 用系数行向量表示,求解方程 $z^3 - 2z^2 + 3 - 5i = 0$ 并求 $z = 2$ 时多项式的值。
-
确定如何使用
polar函数绘制复数的极坐标图。 - 将实部和虚部分别存储的变量合并为复数。
4.5 微积分相关
-
用符号函数
int求函数 $4x^2 + 3$ 的不定积分和从 $x = -1$ 到 $x = 3$ 的定积分,并用trapz函数近似计算。 -
用
quad函数近似计算曲线 $4x^2 + 3$ 在 $[-1, 3]$ 区间下的面积。 -
用
polyder函数求多项式 $2x^3 - x^2 + 4x - 5$ 的导数。
5. 总结
本文介绍了 MATLAB 中复数和微积分的相关知识,包括复数的表示、运算、极坐标形式和绘图,以及积分、微分的计算方法和符号数学工具箱中的微积分运算。同时,还给出了常见陷阱、编程风格指南和大量练习题,有助于读者深入理解和掌握这些知识。
通过学习这些内容,读者可以利用 MATLAB 解决各种高级数学问题,如复数方程求解、曲线积分和微分计算等。在实际应用中,应根据具体问题选择合适的方法和函数,以提高计算效率和精度。
希望本文能为读者在 MATLAB 高级数学运算方面提供有价值的参考,帮助读者更好地运用 MATLAB 进行科学计算和数据分析。
6. 知识梳理与对比
6.1 复数运算方法对比
| 运算类型 | 手动编程方法 | MATLAB 内置函数方法 |
|---|---|---|
| 加法 |
分离实部和虚部相加
matlab<br>function outc = addcomp(z1, z2)<br>realpart = real(z1) + real(z2);<br>imagpart = imag(z1) + imag(z2);<br>outc = realpart + imagpart * i;<br>end<br>
|
直接使用加法运算符
matlab<br>function outc = addcomp2(z1,z2)<br>outc = z1 + z2;<br>end<br>
|
| 乘法 | 按照公式 $(a + bi) * (c + di) = (a c - b d) + (a d + c b)i$ 手动计算 | 直接使用乘法运算符 |
| 共轭 | 手动编写函数改变虚部符号 |
使用
conj
函数
matlab<br>conj(z1)<br>
|
| 绝对值 | 手动编写函数计算 $\sqrt{a^2 + b^2}$ |
使用
abs
函数
matlab<br>abs(z1)<br>
|
6.2 积分方法对比
| 积分方法 | 原理 | MATLAB 实现 | 精度 |
|---|---|---|---|
| 梯形法则(单区间) | 用梯形面积近似曲线下面积 $\frac{(f(a) + f(b))(b - a)}{2}$ |
自定义函数或使用
trapz
函数(单区间)
matlab<br>function int = trapint(fnh, a, b)<br>int = (b-a) * (fnh(a) + fnh(b))/2;<br>end<br>
matlab<br>trapz(x,y)<br>
| 较低 |
| 梯形法则(多区间) | 将区间划分成多个小区间,每个小区间用梯形面积近似并求和 |
自定义函数或使用
trapz
函数(多区间)
matlab<br>function intsum = trapintn(fnh, lowrange,highrange, n)<br>intsum = 0;<br>increm = (highrange - lowrange)/n;<br>for a = lowrange: increm : highrange - increm<br> b = a + increm;<br> intsum = intsum + (b-a) * (fnh(a) + fnh(b))/2;<br>end<br>end<br>
matlab<br>trapz(x,y)<br>
| 中等 |
| 辛普森方法 | 使用更复杂的多项式近似曲线 |
使用
quad
函数
matlab<br>quad(f,2,4)<br>
| 较高 |
7. 操作流程总结
7.1 复数操作流程
graph TD;
A[创建复数] --> B[进行复数运算];
B --> C[获取实部和虚部];
C --> D[判断是否为实数];
D --> E[转换为极坐标形式];
E --> F[绘制复数图形];
7.2 微积分操作流程
graph TD;
A[定义函数] --> B[选择积分或微分方法];
B --> C{积分或微分};
C -- 积分 --> D[选择积分方法(梯形法则或辛普森方法)];
D --> E[计算积分值];
C -- 微分 --> F[选择微分方法(`polyder` 或 `diff`)];
F --> G[计算导数值];
8. 进一步拓展思考
8.1 复数在实际中的应用
复数在信号处理、电路分析、量子力学等领域有广泛应用。例如在电路分析中,交流电路的电压和电流可以用复数表示,通过复数运算可以方便地计算电路的阻抗、功率等参数。在信号处理中,复数常用于表示相位和幅度,进行滤波、调制等操作。
8.2 微积分在科学计算中的重要性
微积分是科学计算的基础,在物理学、工程学、经济学等领域都有重要应用。例如在物理学中,通过积分可以计算物体的位移、速度、加速度等物理量;通过微分可以研究物体的运动状态变化。在工程学中,微积分可以用于优化设计、控制理论等方面。
9. 回顾与展望
本文全面介绍了 MATLAB 中复数和微积分的相关知识,通过详细的代码示例和操作步骤,帮助读者掌握这些知识的实际应用。同时,通过知识梳理和对比,让读者更清晰地了解不同方法的优缺点。
在未来的学习和工作中,读者可以进一步深入研究这些知识,探索它们在更多领域的应用。例如,可以结合机器学习算法,利用微积分进行模型的优化;利用复数进行更复杂的信号处理和数据分析。希望读者能够不断实践和探索,将这些知识运用到实际问题中,发挥 MATLAB 的强大功能。
超级会员免费看
2078

被折叠的 条评论
为什么被折叠?



