🐥

134. 特に原始函数を求めることの演習

2023/03/22に公開

与えられた関数の原始関数を求める問題を指します。原始関数とは、与えられた関数の微分として元の関数と一致するような関数のことを言います。一般的に、微積分学の基礎となる重要な問題のひとつです。

【問題概要】
与えられた関数f(x)の原始関数F(x)を求めるアルゴリズムを設計する。ただし、f(x)は多項式関数、三角関数、指数関数、対数関数の合成関数の形で表される。

【解説】
この問題は、与えられた関数の原始関数を求める問題です。多項式関数、三角関数、指数関数、対数関数の合成関数で表された関数の原始関数は、それぞれの関数の微積分公式を用いて求めることができます。
ここでは例として、以下の関数の原始関数を求める方法を説明します。

f(x) = 3x^2 + 2sin(x) + e^x + ln(x)

この関数は、多項式関数、三角関数、指数関数、対数関数の合成関数で表されています。各関数の微積分公式を用いて、原始関数を求めます。

まずは、多項式関数 3x^2 の原始関数を求めます。多項式関数の原始関数は、各項を微分してから積分することで求めることができます。つまり、次のように計算します。

∫3x^2dx = x^3 + C1

次に、三角関数 2sin(x) の原始関数を求めます。三角関数の原始関数は、三角関数の積分公式を用いて求めることができます。具体的には、以下のように計算します。

∫2sin(x)dx = -2cos(x) + C2

次に、指数関数 e^x の原始関数を求めます。指数関数の原始関数は、指数関数の積分公式を用いて求めることができます。具体的には、以下のように計算します。

∫e^xdx = e^x + C3

最後に、対数関数 ln(x) の原始関数を求めます。対数関数の原始関数は、部分積分法を用いて求めることができます。具体的には、以下のように計算します。

∫ln(x)dx = xln(x) - x + C4

(C[1~4]は積分定数)

これらの原始関数を合わせて、与えられた関数f(x)の原始関数F(x)は以下のようになります。

F(x) = x^3 + 2sin(x) + e^x + xln(x) - x + C

Cは積分定数であり、任意の定数となります。

Atcoderから最も関連性の高い問題を例示すると、以下の問題が挙げられます。

「ABC174F」
https://atcoder.jp/contests/abc174/tasks/abc174_f
レーティング難易度(★): 2200
ACした回答者に絞った場合のレーティング帯の範囲(数値): 1955-2401
レーティング難易度(%): 6.4%
レーティング(数値): 2366
AC率(%): 6.4%
ACしたスコアの高い回答者: shira_mochi (解法: 初めに対数関数を用いた変数変換を行い、指数級数に展開することで多項式関数の形に帰着させている)
解説ブログ: https://blog.hamayanhamayan.com/entry/2020/07/12/170317 (作者: hamayanhamayan)

以下は、関連するLeetCodeの例題です。

「Different Ways to Add Parentheses」(https://leetcode.com/problems/different-ways-to-add-parentheses/) : 上級 : 40分:
この問題は、与えられた式を括弧で囲んで、すべての可能な式の値を計算することを目的としています。この問題は、式をパースする、トークン化する、数値を計算する、関数を適用するなどの問題に分けることができます。この問題を解くためには、数学の知識とアルゴリズムの実装能力が必要です。

「Evaluate Reverse Polish Notation」(https://leetcode.com/problems/evaluate-reverse-polish-notation/) : 中級 : 20分:
この問題は、逆ポーランド記法で表された式を評価することを目的としています。逆ポーランド記法は、演算子をオペランドの後に置くことによって、式を表現する方法です。この問題を解くためには、スタックを使用することで逆ポーランド記法の式を評価するアルゴリズムを実装する必要があります。

これらの問題は、原始関数を求める問題とは直接関係がありませんが、数学的な知識やアルゴリズムの理解を深めるためにも役立つ問題です。

Discussion