了解函数的图形对于一个函数的学习非常有帮助,能够形象的理解函数的意义。下面我就以三角函数为例,逐一说明怎用通过控制函数的各个参数把函数图像变成我们想变成的样子,即通过改变函数的参数去拟合一个曲线。
函数图形的变换主要包括了如下几个方面,图形的平移(shifting),图形的伸展(stretching),图形的压缩(compressing)和图形的反射(reflecting),现逐一说明。以一般函数为例,一般函数的及其各个调控参数可写为如下形式。众所周知,一个函数最简单的表示形式为:
y = f(x)
他表示的是从一组数据到另外一组数据的一个映射方式(注:函数即映射)。现在不论这个函数的原型是什么,要想对这个函数的图形进行有效的调整和改变,我们要对这个函数在四个不同的部位增加四个控制变量:
y = af(b(x+c))+d
这四个控制参数对函数图形的影响如下:
参数a影响的是:函数关于x轴的反射,即,图形在垂直方向伸展或压缩。
参数b影响的是:函数关于y轴的反射,即,图形在水平方向伸展压缩。
参数c影响的是:函数在水平方向的位移。
参数d影响的是:函数在垂直方向的位移。
三角函数图形的变换
这里我以三角函数为例举例说明,下面的等式是一个标准的三角函数公式:
f(x) = Asin(2π/B(x-C))+D
式中:|A| 为幅度(amplitude),|B|为周期(period),C为水平移动,D为垂直移动。下图给出该函数的图像的形象解释。
下面我用matlab来仿真,并逐一解释这四个参数的重要作用。
上图中:A = 1,B = 2π,C=0,D=0。定义域:x=(0 4π),值域:f(x)=(-1.5,1.5)
Matlab代码:
%% Transfonnations of Trigonometric Graphs
% The rules for shifting, stretching, compressing, and reflecting the
% graph of a trigonometric function.
% Author: Z.Zhu
% Date: 2018/06/08
close all
clear all
x = 0:0.01:4*pi;
A = 1; % amplitude
B = 2*pi; % period
C = 0; % Horizontal shift
D = 0; % Vertical shift
fx = A*sin(2*pi/B*(x-C)) + D;
figure('NumberTitle','off');
plot(x,fx,'k','LineWidth',3);
title('\fontsize{15}一个标准的正弦波');
legend('A=1,B=2*PI,C=0,D=0');
grid on;
axis([ -.5 13 -1.5 1.5])
1,修改A改变函数的幅值,这时函数关于x轴的反射,图形在垂直方向伸展和压缩。
Matlab代码:
%% A
figure;
subplot(1,2,1)
plot(x,fx,'--k','LineWidth',3);
hold on;
A = 0.5;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'g','LineWidth',3);
title('\fontsize{15}A=0.5在垂直方向压缩了原始的图形');
legend('A=1,B=2*PI,C=0,D=0','A=0.5,B=2*PI,C=0,D=0');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
subplot(1,2,2)
A = 1;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'--k','LineWidth',3);
hold on;
A = 1.5;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'g','LineWidth',3);
title('\fontsize{15}A=1.5在垂直方向伸展了原始的图形');
legend('A=1,B=2*PI,C=0,D=0','A=1.5,B=2*PI,C=0,D=0');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
2,修改B改变函数的频率,这时函数关于y轴的反射,图形在水平方向伸展和压缩。
Matlab代码:
%% B
figure;
subplot(1,2,1)
A = 1;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'--k','LineWidth',3);
hold on;
B = pi;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'r','LineWidth',3);
title('\fontsize{15}B=pi在水平方向压缩了原始的图形');
legend('A=1,B=2*PI,C=0,D=0','A=1,B=PI,C=0,D=0');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
subplot(1,2,2)
B = 2*pi;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'--k','LineWidth',3);
hold on;
B = 4*pi;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'r','LineWidth',3);
title('\fontsize{15}B=4*pi在水平方向伸展了原始的图形');
legend('A=1,B=2*PI,C=0,D=0','A=1,B=4*PI,C=0,D=0');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
3,修改C让函数图形在水平方向移动。(注意:原函数中的C有负号。)
Matlab代码:
%% C
figure;
subplot(1,2,1)
B = 2*pi;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'--k','LineWidth',3);
hold on;
C = 0.5;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'b','LineWidth',3);
title('\fontsize{15}C=0.5原始图形沿X轴向右移动');
legend('A=1,B=2*PI,C=0,D=0','A=1,B=2*PI,C=0.5,D=0');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
subplot(1,2,2)
C = 0;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'--k','LineWidth',3);
hold on;
C = -0.5;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'b','LineWidth',3);
title('\fontsize{15}C=0.5原始图形沿X轴向左移动');
legend('A=1,B=2*PI,C=0,D=0','A=1,B=2*PI,C=-0.5,D=0');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
4,现在我们通过修改D让函数图形在垂直方向移动。
Matlab代码:
%% D
figure;
subplot(1,2,1)
C = 0;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'--k','LineWidth',3);
hold on;
D = 0.5;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'m','LineWidth',3);
title('\fontsize{15}D=0.5原始图形沿Y轴向上移动');
legend('A=1,B=2*PI,C=0,D=0','A=1,B=2*PI,C=0,D=0.5');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
subplot(1,2,2)
D = 0;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'--k','LineWidth',3);
hold on;
D = -0.5;
fx = A*sin(2*pi/B*(x-C)) + D;
plot(x,fx,'m','LineWidth',3);
title('\fontsize{15}D=-0.5原始图形沿Y轴向下移动');
legend('A=1,B=2*PI,C=0,D=0','A=1,B=2*PI,C=0,D=-0.5');
grid on;
axis([ -.5 13 -1.5 1.5])
hold off;
最后给出一个通过调整正弦曲线的各个参数去拟合美国阿拉斯加温度曲线的实例,可以看得出来拟合的非常好。
按照文章开头给出的公式:f(x) = Asin(2π/B(x-C))+D
拟合曲线的参数值为:A = 37,B = 365,C = 101,D = 25.
(全文完)
鸣谢:
【1】托马斯微积分 第10版
【2】Matlab 2017a
谢谢收看!
再见!
《圣经》传道书第1章9节 已有的事,后必再有;已行的事,后必再行。日光之下,并无新事。
*配图与本文无关*