数学函数
TianYuan 提供了丰富的数学函数库,支持三角函数、双曲函数、指数对数函数、舍入函数等。所有数学函数都支持标量和矩阵操作,对矩阵进行逐元素计算。
三角函数
| 函数 |
说明 |
示例 |
sin(x) |
正弦函数 |
sin(pi/2) → 1 |
cos(x) |
余弦函数 |
cos(0) → 1 |
tan(x) |
正切函数 |
tan(pi/4) → 1 |
cot(x) |
余切函数 |
cot(pi/4) → 1 |
sec(x) |
正割函数 (1/cos) |
sec(0) → 1 |
csc(x) |
余割函数 (1/sin) |
csc(pi/2) → 1 |
三角函数示例
# 计算多个角度的正弦值
angles = [0, pi/6, pi/4, pi/3, pi/2]
values = sin(angles)
# 输出: [0, 0.5, 0.707, 0.866, 1.0]
# 绘制正弦和余弦曲线
x = linspace(0, 2*pi, 100)
y1 = sin(x)
y2 = cos(x)
plot(x, y1)
hold('on')
plot(x, y2)
legend(['sin(x)', 'cos(x)'])
title('三角函数图像')
反三角函数
| 函数 |
说明 |
返回范围 |
示例 |
asin(x) |
反正弦函数 |
[-π/2, π/2] |
asin(1) → π/2 |
acos(x) |
反余弦函数 |
[0, π] |
acos(0) → π/2 |
atan(x) |
反正切函数 |
(-π/2, π/2) |
atan(1) → π/4 |
atan2(y, x) |
四象限反正切(双参数) |
(-π, π] |
atan2(1, 1) → π/4 |
acot(x) |
反余切函数 |
(0, π) |
acot(1) → π/4 |
asec(x) |
反正割函数 |
[0, π], x≠π/2 |
asec(2) → π/3 |
acsc(x) |
反余割函数 |
[-π/2, π/2], x≠0 |
acsc(2) → π/6 |
反三角函数示例
# 将角度转换为反三角函数值
x = [-1, -0.5, 0, 0.5, 1]
angles_rad = asin(x)
angles_deg = rad2deg(angles_rad)
disp('反正弦值(弧度):')
disp(angles_rad)
disp('反正弦值(角度):')
disp(angles_deg)
# 验证反三角函数的性质
x = 0.7
result = sin(asin(x)) # 应该等于 x
disp(['sin(asin(', num2str(x), ')) = ', num2str(result)])
双曲函数
| 函数 |
说明 |
定义 |
示例 |
sinh(x) |
双曲正弦 |
(e^x - e^(-x))/2 |
sinh(0) → 0 |
cosh(x) |
双曲余弦 |
(e^x + e^(-x))/2 |
cosh(0) → 1 |
tanh(x) |
双曲正切 |
sinh(x)/cosh(x) |
tanh(0) → 0 |
coth(x) |
双曲余切 |
cosh(x)/sinh(x) |
coth(1) → 1.313 |
sech(x) |
双曲正割 |
1/cosh(x) |
sech(0) → 1 |
csch(x) |
双曲余割 |
1/sinh(x) |
csch(1) → 0.851 |
双曲函数示例
# 绘制双曲函数图像
x = linspace(-3, 3, 100)
figure(1)
plot(x, sinh(x))
hold('on')
plot(x, cosh(x))
plot(x, tanh(x))
legend(['sinh(x)', 'cosh(x)', 'tanh(x)'])
title('双曲函数图像')
grid('on')
# 验证双曲函数恒等式
# cosh^2(x) - sinh^2(x) = 1
x = 2.5
result = cosh(x)^2 - sinh(x)^2
disp(['cosh^2(x) - sinh^2(x) = ', num2str(result)])
反双曲函数
| 函数 |
说明 |
定义域 |
示例 |
asinh(x) |
反双曲正弦 |
全体实数 |
asinh(0) → 0 |
acosh(x) |
反双曲余弦 |
x ≥ 1 |
acosh(1) → 0 |
atanh(x) |
反双曲正切 |
-1 < x < 1 |
atanh(0) → 0 |
acoth(x) |
反双曲余切 |
|x| > 1 |
acoth(2) → 0.549 |
asech(x) |
反双曲正割 |
0 < x ≤ 1 |
asech(0.5) → 1.317 |
acsch(x) |
反双曲余割 |
x ≠ 0 |
acsch(1) → 0.881 |
反双曲函数示例
# 验证反双曲函数
x = 1.5
y = sinh(x)
x_recovered = asinh(y)
disp(['原始值: ', num2str(x)])
disp(['恢复值: ', num2str(x_recovered)])
# 绘制反双曲函数
x1 = linspace(-5, 5, 100)
y1 = asinh(x1)
x2 = linspace(1, 5, 100)
y2 = acosh(x2)
x3 = linspace(-0.99, 0.99, 100)
y3 = atanh(x3)
figure(2)
plot(x1, y1)
hold('on')
plot(x2, y2)
plot(x3, y3)
legend(['asinh(x)', 'acosh(x)', 'atanh(x)'])
title('反双曲函数图像')
grid('on')
指数和对数函数
| 函数 |
说明 |
参数 |
返回值 |
exp(x) |
指数函数 e^x |
x: 标量或矩阵 |
e 的 x 次方 |
log(x) |
自然对数 ln(x) |
x: 正数标量或矩阵 |
以 e 为底的对数 |
log10(x) |
常用对数 |
x: 正数标量或矩阵 |
以 10 为底的对数 |
log2(x) |
二进制对数 |
x: 正数标量或矩阵 |
以 2 为底的对数 |
sqrt(x) |
平方根 |
x: 非负标量或矩阵 |
x 的平方根 |
指数函数示例
# 指数增长模型
t = 0:0.1:5
k = 0.5
y = exp(k * t)
plot(t, y)
xlabel('时间')
ylabel('数量')
title('指数增长曲线')
grid('on')
# 计算 e 的近似值
e_approx = exp(1)
disp(['e ≈ ', num2str(e_approx)])
对数函数示例
# 对数变换
x = [1, 10, 100, 1000, 10000]
y_log = log10(x)
disp('原始值:')
disp(x)
disp('log10 值:')
disp(y_log)
# 对数坐标绘图
x = linspace(0.1, 100, 1000)
y = log(x)
plot(x, y)
xlabel('x')
ylabel('ln(x)')
title('自然对数函数')
grid('on')
# 对数运算性质验证
a = 5
b = 3
# log(a*b) = log(a) + log(b)
result1 = log(a * b)
result2 = log(a) + log(b)
disp(['log(', num2str(a*b), ') = ', num2str(result1)])
disp(['log(', num2str(a), ') + log(', num2str(b), ') = ', num2str(result2)])
平方根示例
# 计算平方根
numbers = [4, 9, 16, 25, 36]
roots = sqrt(numbers)
disp('平方根:')
disp(roots)
# 验证: sqrt(x)^2 = x
x = 7
result = sqrt(x)^2
disp(['sqrt(', num2str(x), ')^2 = ', num2str(result)])
# 矩阵的逐元素平方根
A = [1 4 9; 16 25 36]
B = sqrt(A)
disp('矩阵 A:')
disp(A)
disp('sqrt(A):')
disp(B)
绝对值函数
| 函数 |
说明 |
参数 |
返回值 |
abs(x) |
绝对值或模 |
x: 标量或矩阵 |
非负数 |
绝对值示例
# 标量绝对值
x = -5.7
y = abs(x)
disp(['abs(', num2str(x), ') = ', num2str(y)])
# 矩阵绝对值
A = [-3, 2, -7; 4, -1, 6]
B = abs(A)
disp('原始矩阵:')
disp(A)
disp('绝对值矩阵:')
disp(B)
# 应用:计算向量的欧几里得范数
v = [-3, 4]
norm_v = sqrt(sum(abs(v).^2))
disp(['向量 ', mat2str(v), ' 的模长: ', num2str(norm_v)])
舍入函数
| 函数 |
说明 |
规则 |
示例 |
floor(x) |
向下取整 |
不大于 x 的最大整数 |
floor(3.7) → 3
floor(-2.3) → -3 |
ceil(x) |
向上取整 |
不小于 x 的最小整数 |
ceil(3.2) → 4
ceil(-2.7) → -2 |
round(x) |
四舍五入 |
最接近的整数 |
round(3.5) → 4
round(3.4) → 3 |
舍入函数示例
# 比较不同的舍入方法
x = [-2.7, -2.3, 2.3, 2.7]
disp('原始值:')
disp(x)
disp('floor (向下取整):')
disp(floor(x))
disp('ceil (向上取整):')
disp(ceil(x))
disp('round (四舍五入):')
disp(round(x))
# 应用:将连续值离散化
temperature = [18.3, 22.7, 19.1, 25.9]
temp_rounded = round(temperature)
disp('原始温度:')
disp(temperature)
disp('四舍五入后:')
disp(temp_rounded)
# 生成整数坐标
x = rand(1, 5) * 10
y = rand(1, 5) * 10
x_int = floor(x)
y_int = floor(y)
disp('浮点坐标:')
disp([x; y]')
disp('整数坐标:')
disp([x_int; y_int]')
角度转换函数
| 函数 |
说明 |
转换 |
示例 |
deg2rad(x) |
角度转弧度 |
弧度 = 角度 × π/180 |
deg2rad(180) → π
deg2rad(90) → π/2 |
rad2deg(x) |
弧度转角度 |
角度 = 弧度 × 180/π |
rad2deg(pi) → 180
rad2deg(pi/2) → 90 |
角度转换示例
# 常用角度转换
angles_deg = [0, 30, 45, 60, 90, 180, 270, 360]
angles_rad = deg2rad(angles_deg)
disp('角度值:')
disp(angles_deg)
disp('对应弧度值:')
disp(angles_rad)
# 弧度转角度
rad_values = [0, pi/6, pi/4, pi/3, pi/2, pi]
deg_values = rad2deg(rad_values)
disp('弧度值:')
disp(rad_values)
disp('对应角度值:')
disp(deg_values)
# 三角函数计算(使用角度输入)
angle_deg = 30
angle_rad = deg2rad(angle_deg)
sine_value = sin(angle_rad)
disp(['sin(', num2str(angle_deg), '°) = ', num2str(sine_value)])
# 计算圆周上的点
n = 8 # 8个点
angles = linspace(0, 360, n+1)
angles = angles(1:n) # 去掉最后一个重复点
angles_rad = deg2rad(angles)
x = cos(angles_rad)
y = sin(angles_rad)
plot(x, y, 'o')
title('单位圆上均匀分布的8个点')
grid('on')
复数函数
TianYuan 支持复数类型,以下函数用于操作复数:
| 函数 | 说明 | 示例 |
complex(re, im) | 创建复数 | complex(3, 4) → 3+4i |
real(z) | 取实部 | real(3+4i) → 3 |
imag(z) | 取虚部 | imag(3+4i) → 4 |
abs(z) | 模(对复数为 |z|) | abs(3+4i) → 5 |
conj(z) | 共轭 | conj(3+4i) → 3-4i |
angle(z) | 辐角(弧度) | angle(1+1i) → pi/4 |
示例
% 创建复数
z1 = 3 + 4i # 字面量
z2 = complex(1, -2) # complex(re, im)
# 基本运算
z3 = z1 + z2 # 4+2i
z4 = z1 * z2 # (3+4i)(1-2i) = 11-2i
# 复数属性
r1 = real(z1) # 3
i1 = imag(z1) # 4
m1 = abs(z1) # 5.0(模)
a1 = angle(z1) # atan2(4, 3)(辐角)
c1 = conj(z1) # 3-4i(共轭)
# 极坐标形式:z = r * exp(i * theta)
r = 5
theta = pi / 4
z = r * (cos(theta) + sin(theta) * 1i) # 等价复数
# 转置:' 对复数取共轭转置,.' 取普通转置
v = [1+1i, 2+2i]
v_herm = v' # [1-1i; 2-2i](共轭转置)
综合应用示例
示例1:傅里叶级数近似
# 使用傅里叶级数近似方波
x = linspace(-pi, pi, 1000)
y = zeros(size(x))
# 计算前10项
n_terms = 10
for n = 1:n_terms
y = y + (4/pi) * sin((2*n-1)*x) / (2*n-1)
end
plot(x, y)
xlabel('x')
ylabel('f(x)')
title(['方波的傅里叶级数近似 (', num2str(n_terms), ' 项)'])
grid('on')
示例2:数值微分
# 使用中心差分法计算导数
function df = numerical_derivative(f, x, h)
df = (f(x + h) - f(x - h)) / (2 * h)
end
# 计算 sin(x) 在 x=pi/4 处的导数
x0 = pi/4
h = 0.0001
f = @(x) sin(x)
df_numerical = numerical_derivative(f, x0, h)
df_analytical = cos(x0)
disp(['数值导数: ', num2str(df_numerical)])
disp(['解析导数: ', num2str(df_analytical)])
disp(['误差: ', num2str(abs(df_numerical - df_analytical))])
示例3:极坐标绘图
# 绘制玫瑰线 r = sin(k*θ)
theta = linspace(0, 2*pi, 1000)
k = 4
r = abs(sin(k * theta))
# 转换为笛卡尔坐标
x = r .* cos(theta)
y = r .* sin(theta)
plot(x, y)
title(['玫瑰线: r = |sin(', num2str(k), 'θ)|'])
xlabel('x')
ylabel('y')
grid('on')
示例4:泰勒级数展开
# e^x 的泰勒级数展开
# e^x = 1 + x + x^2/2! + x^3/3! + ...
function y = exp_taylor(x, n_terms)
y = zeros(size(x))
for n = 0:(n_terms-1)
y = y + x.^n / factorial(n)
end
end
x = linspace(-2, 2, 100)
y_exact = exp(x)
y_approx5 = exp_taylor(x, 5)
y_approx10 = exp_taylor(x, 10)
plot(x, y_exact, 'k-')
hold('on')
plot(x, y_approx5, 'r--')
plot(x, y_approx10, 'b--')
legend(['精确值', '5项近似', '10项近似'])
title('e^x 的泰勒级数展开')
grid('on')
注意事项
定义域限制
- 对数函数要求输入为正数
- 反三角函数有特定的定义域(如 asin/acos 要求 |x| ≤ 1)
- sqrt 要求输入非负
- 某些反双曲函数有定义域限制(如 acosh 要求 x ≥ 1)
矩阵运算
- 所有数学函数都支持逐元素操作
- 输入矩阵时,函数会对每个元素独立计算
- 输出矩阵的尺寸与输入相同
数值精度
- TianYuan 使用双精度浮点数(64位)
- 三角函数在特定点(如 sin(π))可能有微小误差
- 避免对接近零的数取对数
- 大数运算时注意溢出
角度单位
- 所有三角函数使用弧度制
- 使用 deg2rad 和 rad2deg 进行角度转换
- π 可通过
pi 常量或 acos(-1) 获得