數學基礎:
(1)無窮小量
對函數 $f(x)$,假設$x$趨於$x_0$時函數$f(x)$的極限為0,則稱函數$f(x)$為$x$趨於$x_0$時的無窮小量,也叫無窮小。
(2)無窮大量
對函數 $f(x)$,假設$x$趨於$x_0$時函數$f(x)$的絕對值無限增大,則稱函數$f(x)$為$x$趨於$x_0$時的無窮大量,也叫無窮大,也可以說極限不存在。
(3)無窮小的比較
設$\alpha$、$\beta$為自變量的同一變化過程中的無窮小,且$\alpha\neq0$.
若$lim\frac{\beta}{\alpha}=0$,則稱$\beta$是比$\alpha$高階的無窮小,記作$\beta=0(\alpha)$;
若$lim\frac{\beta}{\alpha}=\infty$,則稱$\beta$是比$\alpha$低階的無窮小;
若$lim\frac{\beta}{\alpha}=C\neq0$,則稱$\beta$是$\alpha$的同階無窮小;
特別當$C=1$時,則稱$\beta$是$\alpha$的等價無窮小,記作$α~β$;
若$lim\frac{\beta}{\alpha^k}=C\neq0$,則稱$\beta$是$\alpha$的$k$階無窮小。
數學求解:
比較以下無窮小量的階。
(1)當$x\to2$時,$x-2$與$x^2-4$;
(2)當$x\to1$時,$x-1$與$x^2-x$;
(3)當$x\to\infty$時,$\frac{2}{x}$與$\frac{3}{x^2}$;
解:
(1)因為$x$趨於2時:
$$
\lim_{x\to2}\frac{x-2}{x^2-4}=\lim_{x\to2}\frac{x-2}{(x-2)(x+2)}=\lim_{x\to2}\frac{1}{x+2}=\frac{1}{4}
$$
所以$x$趨於2時,$x-2$與$x^2-4$同階無窮小。
(2)因為$x$趨於1時:
$$
\lim_{x\to1}\frac{x-1}{x^2-x}=\lim_{x\to1}\frac{x-1}{x(x-1)}=\lim_{x\to1}\frac{1}{x}=1
$$
所以$x$趨於1時,$x-1$與$x^2-x$同階無窮小。
(1)因為$x$趨於$\infty$時:
$$
\lim_{x\to\infty}\frac{\frac{2}{x}}{\frac{3}{x^2}}=\lim_{x\to\infty}\frac{2x}{3}=\infty
$$
所以$x$趨於$\infty$時,$\frac{2}{x}$是比$\frac{3}{x^2}$低階無窮小。
C++代碼:
1 /** 2 * @file program_2_11_3.cpp 3 * @brief 比較無窮小量的階(1)當x->2時,x-2與x^2-4;(2)當x->1時,x-1與x^2-x;(3)當->∞時,2/x與3/x^2 4 * @author 禪元天道 chanyuantiandao@126.com 5 * @version 1.0.0 6 * @date 2021-12-25 7 */ 8 #include <iostream> 9 #include <cmath> 10 #include <iomanip> 11 12 using namespace std; 13 14 /** 15 * @brief 設置允許的誤差值 16 */ 17 const double tininessValue = 0.000000001 * 0.000000001; 18 19 /** 20 * @brief 計算(x-2)/(x^2-4)的值 21 * @param x 因變量x的值 22 * @return 計算結果 23 */ 24 double getValue1(double x) 25 { 26 if(x == 2){ 27 cout << "分母值為0,計算失敗!" << endl; 28 return 0; 29 } 30 return (x-2)/(pow(x, 2) - 4); 31 } 32 33 /** 34 * @brief 計算(x-1)/(x^2-x)的值 35 * @param x 因變量x的值 36 * @return 計算結果 37 */ 38 double getValue2(double x) 39 { 40 if(x == 1){ 41 cout << "分母值為0,計算失敗!" << endl; 42 return 0; 43 } 44 return (x-1)/(pow(x, 2) - x); 45 } 46 47 /** 48 * @brief 計算(2/x)/(3/x^2)的值 49 * @param x 因變量x的值 50 * @return 計算結果 51 */ 52 double getValue3(double x) 53 { 54 if(x == 0){ 55 cout << "分母值為0,計算失敗!" << endl; 56 return 0; 57 } 58 return (2/x)/(3/pow(x, 2)); 59 } 60 61 void printLimValue(const double trend, const double incrementValue, double (*pf)(double)) 62 { 63 64 //開始求左極限 65 double tempIncrementValue = incrementValue; 66 double x = trend - tempIncrementValue; 67 double yPre = 0; 68 double yNow = (*pf)(x); 69 70 while(x < trend) 71 { 72 tempIncrementValue /= 2; 73 x += (tempIncrementValue); 74 yPre = yNow; 75 yNow = (*pf)(x); 76 if(abs(yNow - yPre) < tininessValue){ 77 cout << setprecision(20) << "當前遞歸循環的x值:" << x << endl; 78 cout << "左極限為" << yNow << endl; 79 break; 80 } 81 } 82 83 84 //開始求右極限 85 tempIncrementValue = incrementValue; 86 x = trend + tempIncrementValue; 87 yPre = 0; 88 yNow = (*pf)(x); 89 90 while(x > trend) 91 { 92 tempIncrementValue /= 2; 93 x -= (tempIncrementValue); 94 yPre = yNow; 95 yNow = (*pf)(x); 96 if(abs(yNow - yPre) < tininessValue){ 97 cout << setprecision(20) << "當前遞歸循環的x值:" << x << endl; 98 cout << "右極限為" << yNow << endl; 99 break; 100 } 101 } 102 103 cout<<endl; 104 } 105 106 int main() 107 { 108 //求極限時,x的趨向值 109 //const double trend = 2; 110 //求極限時,x的初始增量值: 111 //const double incrementValue = 0.1; 112 113 cout << "比較x趨於2時,x-2與x^2-4的無窮小量的階" << endl; 114 printLimValue(2, 0.1, getValue1); 115 116 cout << "比較x趨於1時,x-1與x^2-x的無窮小量的階" << endl; 117 printLimValue(1, 0.1, getValue2); 118 119 cout << "比較x趨於無窮時,2/x與3/(x^2)的無窮小量的階" << endl; 120 //注意在處理無窮大時,增量值不能設置的太小,否則會出現LLONG_MAX減去一個很小值后得到的結果在計算機表示還是LLONG_MAX的值,無法進入while循環 121 printLimValue(LLONG_MAX, 9999, getValue3); 122 123 return 0; 124 }
運行結果: