結論: CFormを使うと楽になる場合が多い
$f(x)=x^2+2x+3$のとき、$f(f(f(t)+t)+f(f(t)))$をもとめよ。の式を展開したいとします。
(この問題では不要ですが)Alphaなどに投げて式を簡略化した後に式をコピペしたいことが稀にあります。
この時に結果をコピペしようとすると一工夫必要です。CFormを使いましょう。
AlphaではなくWolfram Cloudを使う
Wolfram Alphaは、例えば、f(x) = xのように、よく見る形式で書け、便利です。Wolfram言語だとこれはf[x_] := x
などになり、覚えるのが面倒です。
dでも、Mathematicaの機能をフルに活用したい場合、(また、Mathematicaの多大なナレッジを使えるという意味で)Wolfram Cloudは便利です。Wolfram Cloudは個人の一般的な範囲でしたら、無償で使うことができます。
https://support.wolfram.com/ja/49795
Wolfram Cloudのを使う
- https://www.wolframcloud.com/ からログインします。ユーザ登録が必要です
- 計算して結果を表示、はShift+Enterです。
- 言語上は
(
の代わりに[
が使われると思ってください(式自身を書くときはこの限りではないです)
今回の式を解く
-
f[x_]:= x ^2 +2x+3
で式を定義します -
Expand[f[f[f[t]+t]+f[f[t]]], t]
で式をtについて解きます。この結果、以下のようになり、良さそうに思えます。 - しかし、コピペすると、
1371+2960 t+3746 SuperscriptBox["t", "2"]+3060 ...
のように、そのままコピペできない形式になります。ここで、次の関数を使うとやりやすいです。 CFormを見ると、powがPowerになっていて、そのままコンパイルできません。define Power powしてもいいですが、今回は、FullSimplifyを併用するとそのままコピペできます。(%は前に実行した結果を参照する、です)
ただ、FullSimplifyしても、そのままコピペは無理なこともあります。defineしたり、しましょう。
なお、Powerなどは、Mathematicaに付属のmdefs.hをincludeすればそのまま使えます
投げる
t = int(input())
print(1371+t*(40+t*(29+2*t*(5+t)))*(74+t*(40+t*(29+2*t*(5+t)))))