C LANGUAGE TECHNOLOGY

【C言語】数値微分とは【前進差分,後退差分,中心差分,常微分方程式,オイラー法,3次テイラー展開,4次ルンゲクッタ法】

2021年9月12日

悩んでいる人

C言語の数値微分を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOS(Linuxカーネル)の授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
  • プログラミング歴15年以上,習得している言語: C/C++PythonSolidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開
  • 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
  • 最近は自然言語処理AIイーサリアムに関する有益な情報発信に従事.
    • (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
    • (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.

こういった私から学べます.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

数値微分

数値微分とは,数値解析の分野の一つで,与えられる関数の常微分の値を解析的にではなく数値的に求める手法のことです.

数値微分は,数学的な微分(アナログ)の解析手法をコンピュータ(デジタル)の数値解析に変換する手法とも言えます.

数値微分を利用することで,微分を解析的に求めることが困難な場合に,その近似値を数値的に求めることが可能になります.

数値微分のニュートン法と二分法を知りたいあなたはこちらからどうぞ.

C言語で数値微分:前進差分,後退差分,中心差分

C言語で数値微分の前進差分,後退差分,中心差分の解法を紹介していきます.

前進差分は,一つ前の値との差分を利用して下式になります.

$$f'(x) = \frac{f(x + h) - f(x)}{h}$$

後退差分は下式になります.

$$f'(x) = \frac{f(x) - f(x - h)}{h}$$

中心差分は下式になります.

$$f'(x) = \frac{f(x + h) - f(x - h)}{2h}$$

C言語で解く数式は下式になります.

\begin{eqnarray}
f(x) &=& x^2 \\
f'(x) &=& 2x
\end{eqnarray}

前進差分,後退差分,中心差分を利用するコードは以下になります.

実行結果は以下になります.

\(f'(x)\)で\(x = 3\)の時の真の値\(f'(3) = 2 * 3 = 6\)と比較すると,前進差分は6.000100,後退差分は5.999900と誤差が発生していますが,中心差分は6.000000と誤差がほとんどないことがわかります.

※Hの値(0.0001)を小さくすると,その誤差が小さくなります.

常微分方程式

常微分方程式とは,数学において未知関数とその導関数からなる等式で定義される方程式である微分方程式の一種で,未知関数が一つの変数を持つもののことを言います.

本記事では,常微分方程式の解法として,オイラー法3次テイラー展開4次ルンゲクッタ法を紹介していきます.

オイラー法と4次ルンゲクッタ法は,keisanの常微分方程式で解答を計算できますので,参考にして下さい.

各々のリンクは以下になります.

C言語で常微分方程式:オイラー法,3次テイラー展開,4次ルンゲクッタ法

C言語で常微分方程式のオイラー法,3次テイラー展開,4次ルンゲクッタ法を解法を紹介していきます.

解く常微分方程式は下式になります.

\begin{eqnarray*}
F(x, y) &=& 1 - y^2 \\
x_0 &=& 0 \\
y_0 &=& 0 \\
x_n &=& 1
\end{eqnarray*}

オイラー法,3次テイラー展開,4次ルンゲクッタ法を利用するコードは以下になります.

上式の常微分方程式の解答の\(y = f(x) = \tanh x\)と比較します.

実行結果は以下になります.

オイラー法が一番誤差が大きく,3次テイラー展開が中間,4次ルンゲクッタ法が一番誤差が小さいことがわかります.

まとめ

C言語の数値微分を紹介しました.

具体的には,前進差分,後退差分,中心差分,常微分方程式,オイラー法,3次テイラー展開,4次ルンゲクッタ法を解説しました.

数値積分を知りたいあなたはこちらからどうぞ.

数値解析した結果をグラフで表示する時は,gnuplotがおすすめです.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , , , , , , ,