| 概念 | 數學意義 | C++ 實作 |
|---|---|---|
| 求冪 | ab(a 的 b 次方) | pow(a, b) ( |
| 求導 | 函數在某點的瞬間變化率 | 數值微分:(f(x+h)-f(x-h))/(2h) |
#include <cmath>
#include <iostream>
int main() {
double base = 2.0, exp = 3.5;
std::cout << "2^3.5 = " << std::pow(base, exp) << '\n'; // 11.3137
// 特殊情況
std::cout << "sqrt(2) = " << std::sqrt(2) << '\n'; // 等同 pow(2, 0.5)
std::cout << "cbrt(8) = " << std::cbrt(8) << '\n'; // 立方根
}
若只有離散資料點 (x, y),無解析式,用中心差分:
double derivative(const std::vector<double>& x,
const std::vector<double>& y,
size_t i) {
if (i == 0 || i + 1 >= x.size()) return NAN; // 邊界無法中心差分
double h = x[i+1] - x[i]; // 假設等距
return (y[i+1] - y[i-1]) / (2 * h);
}
// 若有解析式 f(x),直接用 lambda
auto f = [](double x) { return std::sin(x); };
double df = (f(x+h) - f(x-h)) / (2*h); // h=1e-6 適中
工程專案建議使用 Automatic Differentiation (AD) 庫(如 autodiff、Stan Math),編譯期計算精確導函數,避免數值誤差與步長調參。
std::pow、std::sqrt、std::cbrt,單一函數呼叫。pow。