C LANGUAGE TECHNOLOGY

【C言語】一次方程式,二次方程式,三次方程式,四次方程式の解の公式

悩んでいる人

C言語で一次方程式,二次方程式,三次方程式,四次方程式の解の公式を教えて!

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

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

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

C言語で一次方程式,二次方程式,三次方程式,四次方程式の解の公式

C言語で一次方程式,二次方程式,三次方程式,四次方程式の解の公式を紹介します.

※五次以上の方程式の解の公式が存在しないことは,アーベル・ルフィニの定理により証明されています.

一次方程式の解の公式

一次方程式の解の公式を紹介します.

\begin{eqnarray*} ax + b &=& 0\ (a \neq 0) \\ x &=& -\frac{b}{a} \end{eqnarray*}

一次方程式の解の公式のコードは以下になります.

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

こちらの結果と同じになることを確認しましょう.

ニ次方程式の解の公式

ニ次方程式の解の公式を紹介します.

\begin{eqnarray*} ax^2 + bx + c &=& 0\ (a \neq 0) \\ x &=& \frac{-b \pm{\sqrt{b^2 - 4ac}}}{2a} \end{eqnarray*}

ニ次方程式の判別式Dは以下になります.Dが負の場合は複素数の解を持ちます.

$$D = b^2 - 4ac$$

ニ次方程式の解の公式で実数解のみを持つ場合のコード

ニ次方程式の解の公式で実数解のみを持つ場合のコードは以下になります.

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

こちらと同じ結果になることを確認しましょう.(実数解のみを持つ場合は同じ結果になります.)

二次方程式の解の公式で複素数の解を持つ場合のコード

二次方程式の解の公式で複素数の解を持つ場合のコードは以下になります.

C99規格で採用されたcomplex型(複素数型)を利用しています.

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

複素数の解を持っていることがわかります.

こちらと同じ結果になることを確認しましょう.

三次方程式の解の公式(カルダノの公式)

三次方程式の解の公式(カルダノの公式)を紹介します.

\begin{eqnarray*} ax^3 + bx^2 + cx + d &=& 0\ (a \neq 0) \\ \end{eqnarray*}

ここで,\(A_1\),\(A_2\),\(A_3\),p,qを以下とします.

\begin{eqnarray*} A_1 &=& \frac{b}{3a} \\ A_2 &=& \frac{c}{a} \\ A_3 &=& \frac{d}{a} \\ p &=& A_1^2 - \frac{A_2}{3} \\ q &=& \frac{A_1(A_2 - 2A_1^2) - A_3}{2} \end{eqnarray*}

判別式Dは,p,qを利用すると以下になります.

\begin{eqnarray*} D = p * p * p - q * q \end{eqnarray*}

D > 0の場合,xの実数解\(x_1\),\(x_2\),\(x_3\)を\(A_1\),p,qを利用して表すと以下になります.

\begin{eqnarray*} x_1 &=& 2\sqrt{p} \cos(\frac{\arccos \frac{q}{p\sqrt{p}}}{3}) - A_1 \\ x_2 &=& 2\sqrt{p} \cos(\frac{\arccos \frac{q}{p\sqrt{p}} + 2\pi}{3}) - A_1 \\ x_3 &=& 2\sqrt{p} \cos(\frac{\arccos \frac{q}{p\sqrt{p}} + 4\pi}{3}) - A_1 \\ \end{eqnarray*}

D = 0の場合,xの実数解\(x_1\),\(x_2\),\(x_3\)を\(A_1\),qを利用して表すと以下になります.(\(x_2\)と\(x_3\)は重解です.)

\begin{eqnarray*} x_1 &=& 2\sqrt[3]{q} - A_1 \\ x_2 &=& -\sqrt[3]{q} - A_1 \\ x_3 &=& -\sqrt[3]{q} - A_1 \end{eqnarray*}

D < 0の場合,Qを以下のように定義します.

\begin{eqnarray*} Q &=& \left\{ \begin{array}{ll} \sqrt[3]{q + \sqrt{-D}} & (q \geq 0)\\ \sqrt[3]{q - \sqrt{-D}} & (q < 0) \end{array} \right. \end{eqnarray*}

そして,xの実数解\(x_1\),xの2つの複素数解\(x_2\)と\(x_3\)を\(A_1\),p,Qを利用して表すと以下になります.

\begin{eqnarray*} x_1 &=& Q + \frac{p}{Q} - A_1 \\ x_2 &=& -\frac{Q + \frac{p}{Q}}{2} - A_1 + \frac{|Q - \frac{p}{Q}| \sqrt{3})}{2}i \\ x_3 &=& -\frac{Q + \frac{p}{Q}}{2} - A_1 - \frac{|Q - \frac{p}{Q}| \sqrt{3})}{2}i \\ \end{eqnarray*}

三次方程式の解の公式で実数解のみを持つ場合のコード

三次方程式の解の公式で実数解のみを持つ場合のコードは以下になります.

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

こちらの結果と同じになることを確認しましょう.(実数解のみを持つ場合は同じ結果になります.)

三次方程式の解の公式で複素数の解を持つ場合のコード

三次方程式の解の公式で複素数の解を持つ場合のコードは以下になります.

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

こちらの結果と同じになることを確認しましょう.

四次方程式の解の公式(フェラーリの公式)

四次方程式の解の公式(フェラーリの公式)を紹介します.

\begin{eqnarray*} ax^4 + bx^3 + cx^2 + dx + e &=& 0\ (a \neq 0) \\ \end{eqnarray*}

ここで,\(A_1\),\(A_2\),\(A_3\),\(A_4\),p,q,rを以下とします.

\begin{eqnarray*} A_1 &=& \frac{b}{a} \\ A_2 &=& \frac{c}{a} \\ A_3 &=& \frac{d}{a} \\ A_4 &=& \frac{e}{a} \\ p &=& A_2 - 6\left(\frac{A_1}{4}\right)^2 \\ q &=& A_3 - 2A_2\left(\frac{A_1}{4}\right) + 8\left(\frac{A_1}{4}\right)^3 \\ r &=& A_4 - A_3 \left(\frac{A_1}{4}\right) + A_2 \left(\frac{A_1}{4}\right)^2 -3 \left(\frac{A_1}{4}\right)^3 \end{eqnarray*}

また,与えられた四次方程式に関するuの三次分解方程式は以下になります.

\begin{eqnarray*} u (p + u)^2 - 4ru = q^2 \end{eqnarray*}

\(m = \sqrt{u - p}\)とする場合,xの解は以下になります.

\begin{eqnarray*} x_1 &=& \frac{1}{2}\left(-m + \sqrt{- u - p + \frac{2q}{m}} \right) - \frac{A_1}{4} \\ x_2 &=& \frac{1}{2}\left(-m - \sqrt{- u - p + \frac{2q}{m}} \right) - \frac{A_1}{4} \\ x_3 &=& \frac{1}{2}\left(m + \sqrt{- u - p - \frac{2q}{m}} \right) - \frac{A_1}{4} \\ x_4 &=& \frac{1}{2}\left(m - \sqrt{- u - p - \frac{2q}{m}} \right) - \frac{A_1}{4} \\ \end{eqnarray*}

四次方程式の判別式はとても複雑なので,学びたいあなたは解の様子を読みましょう.

四次方程式の解の公式で実数解のみを持つ場合のコード

四次方程式の解の公式で実数解のみを持つ場合のコードは以下になります.

三次方程式の解の公式のコードのget_cubic_root関数やcubic_equation_formula関数を利用しています.

また,are_all_roots_real関数では,四次方程式の判別式で実数解を持つ場合のみを判定しています.

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

こちらの結果と同じになることを確認しましょう.(実数解のみを持つ場合は同じ結果になります.)

四次方程式の解の公式で複素数の解を持つ場合のコード

四次方程式の解の公式で複素数の解を持つ場合のコードは以下になります.

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

こちらの結果と同じになることを確認しましょう.

まとめ

C言語で一次方程式,二次方程式,三次方程式,四次方程式の解の公式を紹介しました.

一次方程式と二次方程式は簡単なコードですが,三次方程式と四次方程式はとても複雑で難しいので,理解できるまで何度も読み直しましょう!

連立一次方程式の解法を学びたいあなたはこちらからどうぞ.

C言語 連立一次方程式
【C言語】連立一次方程式の解法【ガウスの消去法(掃き出し法),クラメルの公式(クラメルの法則)】

こういった悩みにお答えします. こういった私から学べます. 本記事は行列を習得していることを前提とします. 目次1 C言語で連立一次方程式の解法2 ガウスの消去法(掃き出し法)3 クラメルの公式(クラ ...

続きを見る

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

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

友だち追加

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

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