LoginSignup
3
0

More than 1 year has passed since last update.

Wolfram Cloudの結果をコードに貼り付けたい - AtCoder ABC A234 - Weird Function

Posted at

結論: 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について解きます。この結果、以下のようになり、良さそうに思えます。 image.png
  • しかし、コピペすると、 1371+2960 t+3746 SuperscriptBox["t", "2"]+3060 ...のように、そのままコピペできない形式になります。ここで、次の関数を使うとやりやすいです。
    • FullSimplify: よく見る式の形にします
    • CForm: C言語の形にします image.png
  • CFormを見ると、powがPowerになっていて、そのままコンパイルできません。define Power powしてもいいですが、今回は、FullSimplifyを併用するとそのままコピペできます。(%は前に実行した結果を参照する、です)
    image.png

  • ただ、FullSimplifyしても、そのままコピペは無理なこともあります。defineしたり、しましょう。
    image.png
    なお、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)))))
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0