2018年12月30日 星期日

C語言 例題3-1 計算微分近似解 (向前差 / 向後差 / 中央差)

C語言 例題3-1  計算微分近似解 (向前差 / 向後差 / 中央差)

以 f(x) = sin(x) ,取 h = 0.01,

以 C 語言計算在 x=1 之微分值為何,並與 cos(1) 做結果比較。





#include <stdio.h>
#include <math.h>

double func(double x) // 欲微分函數
{ return sin(x) ;}

double FordDiff(double x, double h, double (*fx)(double))
{ // 前差微分
    return ( fx(x+h) - fx(x) ) / h;
}

double BackDiff(double x, double h, double (*fx)(double))
{ // 後差微分
    return ( fx(x) - fx(x-h) ) / h;
}

double MidDiff(double x, double h,double (*fx)(double))
{ // 中差微分
    return 0.5 * ( fx(x+h) - fx(x-h) ) / h;
}

int main()
{
    double x = 1.0, h=0.01, delta;
    double ans = cos(x); // 答案
    double cal;

    cal = FordDiff(x, h, func), delta = cal - ans;
    printf("FordDiff : %lf, delta = %lf\n",cal,delta);
    cal = BackDiff(x, h, func), delta = cal - ans;
    printf("BackDiff : %lf, delta = %lf\n",cal,delta);
    cal = MidDiff(x, h, func), delta = cal - ans;
    printf("MidDiff  : %lf, delta = %lf\n",cal,delta);
    return 0;
}
輸出結果
FordDiff : 0.536086, delta = -0.004216
BackDiff : 0.544501, delta = 0.004198
MidDiff  : 0.540293, delta = -0.000009

沒有留言:

張貼留言

ESP32 微控制器 採集的環境數據,經由 MQTT 協定 轉換並寫入工業標準的 Modbus 暫存器 中

  一個典型的 IoT(物聯網)與工業自動化系統整合(SCADA/機台連線) 的架構圖。它透過 Node-RED 作為核心資料網關,將前端 ESP32 微控制器 採集的環境數據,經由 MQTT 協定 轉換並寫入工業標準的 Modbus 暫存器 中。 1. 各模組功能拆解...