- ベストアンサー
数的処理システムのような計算について
初心者です。 C言語は数的処理システムのように計算結果を出力することは可能ですか? 可能ならば教えていただきたいのです。 例えば (x+y)^2を計算し、出力をx^2+2xy+y^2で表示させるようなものです。 おねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>C言語は数的処理システムのように計算結果を出力することは可能ですか? 「数的処理」じゃなくって,「数式処理」でしょう. まったく意味の違う言葉なので誤解を招きます. 「可能か?」と問われれば, 単なるCでは不可能だが,プログラムを組めば可能となります. ただし,生半可な知識ではできません. 現実的な手は既存のそういうアプリケーションを使うことです. フリーなら,Maximaあたりが十分な性能でしょう. ほかにも,RISA/Azirとか,McCauleyとかいろいろあります. 商品なら,Mathematica,Maple,Matlabとかいろいろ. 自作したい!というなら 数学的な知識としては, 大学生程度の代数,具体的には,「群」・「環」・「体」に, 多項式環の「グレブナー基底」の知識は最低限必要です. ちなみに,上にあげたMaximaってのは Common LISPという言語も使って書かれてますが, C以外の言語やアルゴリズムそのものの知識も必要でしょう.
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
Σa^{n^2} とだけ書かれても, Σ で足す n の範囲は分かりませんよ. 「nの範囲(-∞≦n≦∞)を指定して出力したい」と書かれていますが, n の上下限はどのように与えられるんですか? 1つの整数 N が与えられて -N ≦ n ≦ N で計算する? それとも, 2つの整数 L, U (L ≦ 0 ≦ U) が与えられて L ≦ n ≦ U の範囲になる? もしくはそれ以外の何か? あと, ある意味もっとも重要なんだけど, 本当にこれだけのことであれば「数式処理システムのようなもの」は不要.
補足
あるがとうござぃます。 一応、 -N ≦ n ≦ N の範囲でやりたいと思ってます。 できればどのようにすればよいのか教えていただきたいです。
- Tacosan
- ベストアンサー率23% (3656/15482)
ど~でもいいんですが, n=0のとき 1 |n|≦1のとき 1+2a |n|≦2のとき 1+2a+2a^{2} っていきなり矛盾してますよね. n=0 なら |n|≦1 も |n|≦2 も成り立ちます. ついでですが「Σa^{n} でnの範囲(-∞≦n≦∞)を指定して出力したい」 として上のようにわけているのですが, 例えば n=1.3 なんかは想定してますか? ということで, #3 とかぶるんだけど「数式処理」うんぬんの前に, やりたいことを明確にしてください.
補足
すみません。ミスです。 Σa^{n}ではなく、Σa^{n^2}です。 nは整数の範囲しか動きません。 本当に説明不足で申し訳ないです。
- kabaokaba
- ベストアンサー率51% (724/1416)
>具体的には,Σa^{n} でnの範囲(-∞≦n≦∞)を指定して出力したいんです. >n=0のとき 1 >|n|≦1のとき 1+2a >|n|≦2のとき 1+2a+2a^{2} そもそも数学的にこんな計算にはなりませんし, 等比数列の和の公式を使えばいいだけです. |n|<=1 なら (1/a)+1+a |n|<=2 なら (1/a^2)+(1/a)+1+a+a^2 です. 等比数列の和の公式を使えば整理できます. 一般の自然数kに対してなら (a^k-1)/a^{k-1}(a-1) + (1-a^k)/(1-a) -1 かな.
補足
自分のミスで理解不能な補足説明をしてしまい、すみません。 Σa^{n}ではなく、Σa^{n^2}です。
- Tacosan
- ベストアンサー率23% (3656/15482)
ちょっと意味がつかみかねるのですが, 言語としてはそのような機能を持っていないので不可能です. ただし, 当然ながら「そのような機能を持つプログラム」を作ることは可能.
補足
ありがとぅございます. 実際にmaximaのような計算をしたいんです. 具体的には,Σa^{n} でnの範囲(-∞≦n≦∞)を指定して出力したいんです. n=0のとき 1 |n|≦1のとき 1+2a |n|≦2のとき 1+2a+2a^{2} aには数字を代入せずそのまま出力さしたいです. お願いします.