C LANGUAGE TECHNOLOGY

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

2021年12月17日

悩んでいる人

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言語で一次方程式,二次方程式,三次方程式,四次方程式の解の公式を紹介します.

※五次以上の方程式の解の公式がないこと(代数的に解く方法がないこと)は,アーベル・ルフィニの定理により証明されています.

五次以上の方程式を代数的ではなく超越的に解く方法を知りたいあなたはこちらの動画を観ましょう.

本記事では複素数を理解していることを前提としています.

一次方程式の解の公式

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

\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*}

ニ次方程式の解の公式の実装で利用するsqrt関数を知りたいあなたはこちらからどうぞ.

ニ次方程式の判別式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言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

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

友だち追加

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

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