瞭解函數的圖形對於一個函數的學習非常有幫助,能夠形象的理解函數的意義。下面我就以三角函數爲例,逐一說明怎用通過控制函數的各個參數把函數圖像變成我們想變成的樣子,即通過改變函數的參數去擬合一個曲線。
函數圖形的變換主要包括瞭如下幾個方面,圖形的平移(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節 已有的事,後必再有;已行的事,後必再行。日光之下,並無新事。
*配圖與本文無關*