数学基础-常见数学函数图解

586 阅读8分钟

前言

兜兜转转,后端开发多年,随着LLM大模型带来的业务内容和工作方式转变,终究还是回到了数学专业上;然而很多基础早已淡忘,好在如今的学习方式不再如以往那般低效,谨以记录,砥砺前行!

说明

以下是基于函数自变量个数(一元、二元/多元)以及函数次数(一、二次、多次)的分类汇总,同时补充了相关的 GNU Octave 绘图代码示例。

一、 一元函数(二维绘图)

一元函数是指只有一个自变量的函数,其图形通常在平面内展示。下面按照函数“次数”或类型来分类说明:

1.1 一次函数(线性函数)

  • 典型代表:
    • y=xy = x
    • y=2x+1y = 2x+1
% 绘制 y = x
x = linspace(-10, 10, 200);
y = x;
figure;  % 新建图形窗口
plot(x, y, 'b');
title('y = x');
xlabel('x'); ylabel('y');

% 绘制 y = 2x+1
x = linspace(-10, 10, 200);
y = 2 * x + 1;
figure;
plot(x, y, 'r');
title('y = 2x + 1');
xlabel('x'); ylabel('y');

1.2 二次函数

  • 典型代表:
    • y=x2y = x^2
    • y=x24y = x^2-4
% 绘制 y = x^2
x = linspace(-10, 10, 200);
y = x.^2;
figure;
plot(x, y, 'g');
title('y = x^2');
xlabel('x'); ylabel('y');

% 绘制 y = x^2 - 4
x = linspace(-10, 10, 200);
y = x.^2 - 4;
figure;
plot(x, y, 'm');
title('y = x^2 - 4');
xlabel('x'); ylabel('y');

image.png

1.3 多次函数(高次多项式)

  • 典型代表:
    • y=x3y = x^3
% 绘制 y = x^3
x = linspace(-10, 10, 200);
y = x.^3;
figure;
plot(x, y, 'k');
title('y = x^3');
xlabel('x'); ylabel('y');

image.png

1.4 指数函数

  • 典型代表:
    • y=2xy = 2^x
    • y=3xy = 3^x
% 绘制 y = 2^x
x = linspace(-10, 10, 200);
y = 2 .^ x;
figure;
plot(x, y, 'b');
title('y = 2^x');
xlabel('x'); ylabel('y');

% 绘制 y = 3^x
x = linspace(-10, 10, 200);
y = 3 .^ x;
figure;
plot(x, y, 'r');
title('y = 3^x');
xlabel('x'); ylabel('y');

image.png

1.5 对数函数

(注意:定义域为 x>0x>0

  • 典型代表:
    • y=log2(x)y = \log_2(x)
    • y=ln(x)y = \ln(x)
% 绘制 y = log_2(x)
x = linspace(0.1, 10, 200);
y = log(x) / log(2);
figure;
plot(x, y, 'g');
title('y = log_2(x)');
xlabel('x'); ylabel('y');

% 绘制 y = ln(x)
x = linspace(0.1, 10, 200);
y = log(x);
figure;
plot(x, y, 'm');
title('y = ln(x)');
xlabel('x'); ylabel('y');

image.png

image.png

1.6 三角函数

  • y=sin(x)y = \sin(x)
  • y=cos(x)y = \cos(x)
  • y=tan(x)y = \tan(x) (注意:tan函数在 x=±π/2x=\pm\pi/2 附近有渐近线)
% 清除之前的图形和变量
clf;
clear;

% 定义 x 的范围和步长(避免 tan 的不连续点)
x = linspace(-2*pi, 2*pi, 1000);  % 生成 1000 个点,范围 [-2π, 2π]

% 计算三个三角函数的值
y_sin = sin(x);
y_cos = cos(x);
y_tan = tan(x);

% 处理 tan 的无穷大值(避免绘图异常)
y_tan(y_tan > 10) = NaN;  % 将大于 10 的值设为 NaN(不绘制)
y_tan(y_tan < -10) = NaN; % 将小于 -10 的值设为 NaN

% 创建图形窗口并绘制三个子图
figure;

% 绘制 sin(x)
subplot(3, 1, 1);  % 3 行 1 列,第 1 个子图
plot(x, y_sin, 'b-', 'LineWidth', 1.5);
title('正弦函数 y = sin(x)');
xlabel('x');
ylabel('sin(x)');
grid on;
xlim([-2*pi, 2*pi]);
set(gca, 'XTick', -2*pi:pi:2*pi);  % 设置 x 轴刻度为 π 的倍数
set(gca, 'XTickLabel', {'-2π', '-π', '0', 'π', '2π'});

% 绘制 cos(x)
subplot(3, 1, 2);
plot(x, y_cos, 'r-', 'LineWidth', 1.5);
title('余弦函数 y = cos(x)');
xlabel('x');
ylabel('cos(x)');
grid on;
xlim([-2*pi, 2*pi]);
set(gca, 'XTick', -2*pi:pi:2*pi);
set(gca, 'XTickLabel', {'-2π', '-π', '0', 'π', '2π'});

% 绘制 tan(x)
subplot(3, 1, 3);
plot(x, y_tan, 'g-', 'LineWidth', 1.5);
title('正切函数 y = tan(x)');
xlabel('x');
ylabel('tan(x)');
grid on;
xlim([-2*pi, 2*pi]);
ylim([-10, 10]);  % 限制 y 轴范围以显示主要区域
set(gca, 'XTick', -2*pi:pi:2*pi);
set(gca, 'XTickLabel', {'-2π', '-π', '0', 'π', '2π'});

% 调整子图间距
print -dpng trig_functions.png;  % 保存为图片(可选)

image.png

1.7 其他常见函数

  • 根函数: y=xy = \sqrt{x}(定义域 x0x\ge0
  • 绝对值函数: y=xy = |x|
  • 有理函数: y=1xy = \frac{1}{x}(注意:x=0处不连续)
% 绘制 y = sqrt(x)
x = linspace(0, 10, 200);
y = sqrt(x);
figure;
plot(x, y, 'b');
title('y = sqrt(x)');
xlabel('x'); ylabel('y');

% 绘制 y = |x|
x = linspace(-10, 10, 200);
y = abs(x);
figure;
plot(x, y, 'r');
title('y = |x|');
xlabel('x'); ylabel('y');

% 绘制 y = 1/x
% 为避免 x=0 的不连续性,将区间分为两部分绘制
x1 = linspace(-10, -0.1, 100);
x2 = linspace(0.1, 10, 100);
x = [x1, x2];
y = 1 ./ x;
figure;
plot(x, y, 'g');
title('y = 1/x');
xlabel('x'); ylabel('y');

image.png

1.8 综合绘图:一元函数合集

以下代码使用 subplot 将上述部分一元函数分别绘制在同一画板上,便于比较和观察。

figure('Name', '一元函数综合图');

% 1. y = x (一次函数)
subplot(4, 4, 1);
x = linspace(-10,10,200);
y = x;
plot(x, y);
title('y = x');
xlabel('x'); ylabel('y');

% 2. y = 2x+1 (一次函数)
subplot(4, 4, 2);
x = linspace(-10,10,200);
y = 2 * x + 1;
plot(x, y);
title('y = 2x+1');
xlabel('x'); ylabel('y');

% 3. y = x^2 (二次函数)
subplot(4, 4, 3);
x = linspace(-10,10,200);
y = x.^2;
plot(x, y);
title('y = x^2');
xlabel('x'); ylabel('y');

% 4. y = x^2-4 (二次函数)
subplot(4, 4, 4);
x = linspace(-10,10,200);
y = x.^2 - 4;
plot(x, y);
title('y = x^2-4');
xlabel('x'); ylabel('y');

% 5. y = x^3 (多次函数)
subplot(4, 4, 5);
x = linspace(-10,10,200);
y = x.^3;
plot(x, y);
title('y = x^3');
xlabel('x'); ylabel('y');

% 6. y = 2^x (指数函数)
subplot(4, 4, 6);
x = linspace(-10,10,200);
y = 2.^x;
plot(x, y);
title('y = 2^x');
xlabel('x'); ylabel('y');

% 7. y = 3^x (指数函数)
subplot(4, 4, 7);
x = linspace(-10,10,200);
y = 3.^x;
plot(x, y);
title('y = 3^x');
xlabel('x'); ylabel('y');

% 8. y = log_2(x) (对数函数)
subplot(4, 4, 8);
x = linspace(0.1,10,200);
y = log(x)/log(2);
plot(x, y);
title('y = log_2(x)');
xlabel('x'); ylabel('y');

% 9. y = ln(x) (对数函数)
subplot(4, 4, 9);
x = linspace(0.1,10,200);
y = log(x);
plot(x, y);
title('y = ln(x)');
xlabel('x'); ylabel('y');

% 10. y = sin(x) (三角函数)
subplot(4, 4, 10);
x = linspace(-2*pi,2*pi,200);
y = sin(x);
plot(x, y);
title('y = sin(x)');
xlabel('x'); ylabel('y');

% 11. y = cos(x) (三角函数)
subplot(4, 4, 11);
x = linspace(-2*pi,2*pi,200);
y = cos(x);
plot(x, y);
title('y = cos(x)');
xlabel('x'); ylabel('y');

% 12. y = tan(x) (三角函数)
subplot(4, 4, 12);
x = linspace(-pi/2+0.1, pi/2-0.1, 200);
y = tan(x);
plot(x, y);
title('y = tan(x)');
xlabel('x'); ylabel('y');

% 13. y = sqrt(x) (根函数)
subplot(4, 4, 13);
x = linspace(0,10,200);
y = sqrt(x);
plot(x, y);
title('y = sqrt(x)');
xlabel('x'); ylabel('y');

% 14. y = |x| (绝对值函数)
subplot(4, 4, 14);
x = linspace(-10,10,200);
y = abs(x);
plot(x, y);
title('y = |x|');
xlabel('x'); ylabel('y');

% 15. y = 1/x (有理函数)
subplot(4, 4, 15);
x1 = linspace(-10, -0.1, 100);
x2 = linspace(0.1, 10, 100);
x = [x1, x2];
y = 1 ./ x;
plot(x, y);
title('y = 1/x');
xlabel('x'); ylabel('y');

image.png

二、 二元/多元函数(通常采用三维绘图展示)

二元或多元函数是指自变量个数大于 1 的函数,其图形一般在三维空间中展示。下面按照函数次数(总体次数)来分类说明:

2.1 二次函数

通常指总体次数为 2 的多元函数

  • z=x2+y2z = x^2+y^2 —— 抛物面
    所有点到原点距离的平方和构成的函数。
% 绘制 z = x^2+y^2 (抛物面)
[x, y] = meshgrid(linspace(-10,10,50), linspace(-10,10,50));
z = x.^2 + y.^2;
figure;
surf(x, y, z);
title('z = x^2+y^2');
xlabel('x'); ylabel('y'); zlabel('z');

image.png

  • z=x2y2z = x^2-y^2 —— 双曲抛物面/马鞍面
    展示在 x 与 y 方向上的开口不同。
% 绘制 z = x^2-y^2 (马鞍面)
[x, y] = meshgrid(linspace(-10,10,50), linspace(-10,10,50));
z = x.^2 - y.^2;
figure;
surf(x, y, z);
title('z = x^2-y^2');
xlabel('x'); ylabel('y'); zlabel('z');

image.png

  • z=xyz = x \cdot y —— 双线性函数
    总次数为 1+1=21+1=2,也可看作一种特殊的二次形式。
% 绘制 z = x*y
[x, y] = meshgrid(linspace(-10,10,50), linspace(-10,10,50));
z = x .* y;
figure;
surf(x, y, z);
title('z = x*y');
xlabel('x'); ylabel('y'); zlabel('z');

image.png

2.2 多次函数(高次多项式)

总体次数大于 2 的多元函数

  • z=x3+y3z = x^3+y^3 —— 二元三次函数
    展示了较高次多项式在二维自变量下的复杂形态。
% 绘制 z = x^3+y^3
[x, y] = meshgrid(linspace(-5,5,50), linspace(-5,5,50));
z = x.^3 + y.^3;
figure;
surf(x, y, z);
title('z = x^3+y^3');
xlabel('x'); ylabel('y'); zlabel('z');

image.png

2.3 综合绘图:二元/多元函数合集

使用 subplot 将上述多元函数分别绘制在同一画板上,方便比较观察。

figure('Name', '二元/多元函数综合图');

% 1. z = x^2+y^2
subplot(2,2,1);
[x, y] = meshgrid(linspace(-10,10,50), linspace(-10,10,50));
z = x.^2 + y.^2;
surf(x, y, z);
title('z = x^2+y^2');
xlabel('x'); ylabel('y'); zlabel('z');

% 2. z = x^2-y^2
subplot(2,2,2);
[x, y] = meshgrid(linspace(-10,10,50), linspace(-10,10,50));
z = x.^2 - y.^2;
surf(x, y, z);
title('z = x^2-y^2');
xlabel('x'); ylabel('y'); zlabel('z');

% 3. z = x^3+y^3
subplot(2,2,3);
[x, y] = meshgrid(linspace(-5,5,50), linspace(-5,5,50));
z = x.^3 + y.^3;
surf(x, y, z);
title('z = x^3+y^3');
xlabel('x'); ylabel('y'); zlabel('z');

% 4. z = x*y
subplot(2,2,4);
[x, y] = meshgrid(linspace(-10,10,50), linspace(-10,10,50));
z = x .* y;
surf(x, y, z);
title('z = x*y');
xlabel('x'); ylabel('y'); zlabel('z');

image.png

总结

按照自变量个数与函数的次数,我们将常见的数学函数大致分为两大类:

  1. 一元函数(二维绘图):
    包括线性、二次、多次(如 x3x^3)、指数、对数、三角、根、绝对值、有理等函数。
    每类函数均给出独立的绘图代码,并提供了综合绘图的示例以便在同一画板上比较。

  2. 二元/多元函数(通常采用三维绘图):
    主要包括二次形式(如 x2+y2x^2+y^2x2y2x^2-y^2xyx\cdot y)以及更高次多项式(如 x3+y3x^3+y^3)等函数。
    同样提供了各自的独立绘图代码和综合绘图示例。

这些分类和代码示例不仅有助于掌握各类型函数的基本特性,还方便在 GNU Octave 环境下进行直观观察和比较。你可以根据需要单独运行各部分代码,也可以运行综合代码查看整体效果。