【数式処理システム】 Maxima 【Common Lisp】
■ このスレッドは過去ログ倉庫に格納されています
0001132人目の素数さん
2010/10/17(日) 09:09:43MaximaはCommon Lispで書かれており、GNU GPLライセンスのもと
配布されています。各種UNIX、Windows、OSXで動作します。
■関連サイト
□Maxima, a Computer Algebra System (英語) - 公式サイト
ttp://maxima.sourceforge.net/
□Maxima Beginner's FAQ (英語) - 初心者向けのFAQ
ttp://beshenov.ru/maxima/faq.html
□Imaxima (英語) - Emacs用のGUIフロントエンド
ttp://members3.jcom.home.ne.jp/imaxima/Site/Welcome.html
□Maxima interest list (英語) - Maximaに関するメーリングリスト
ttp://www.ma.utexas.edu/mailman/listinfo/maxima
□Maximaで遊ぼう (日本語) - マニュアルの日本語訳や、インストールガイド等
ttp://www.bekkoame.ne.jp/~ponpoko/Math/maxima/MaximaMAIN.html
□数式処理システムMaximaで楽をしよう (日本語) - 初心者向けのMaxima導入編
ttp://www1.bbiq.jp/kougaku/maxima.html
0002132人目の素数さん
2010/10/17(日) 09:15:29【数式処理システム】 Maxima 【Common Lisp】
http://kamome.2ch.net/test/read.cgi/math/1220340695
ttp://www.unkar.org/read/kamome.2ch.net/math/1220340695 (ミラー)
■過去スレ
MAXIMA
http://science6.2ch.net/test/read.cgi/sim/1011102458/
ttp://www.unkar.org/read/science6.2ch.net/sim/1011102458 (ミラー)
Maxima part2
http://science6.2ch.net/test/read.cgi/sim/1218342679/
ttp://www.unkar.org/read/science6.2ch.net/sim/1218342679 (ミラー)
前スレは>>1に入れておくべきだったか? まぁいいか。
0003132人目の素数さん
2010/10/17(日) 09:22:54ttp://ryoma3.hp.infoseek.co.jp/maxima/GO_MAXIMA_coments.pdf
ttp://ryoma3.hp.infoseek.co.jp/maxima/GO_MAXIMA_coments.doc
日本語マニュアルは
ttp://www.h3.dion.ne.jp/~y.ich/Maxima/maxima.html
の方が新しいバージョンに対応してるのかな?
0004132人目の素数さん
2010/10/18(月) 07:40:42wxMaximaを使う際は「Shift+Enter」で式を評価するというのは
FAQとしてテンプレに書いてあっても良いかも
0006132人目の素数さん
2010/10/18(月) 20:58:45バージョンアップの際、これは絶対ひっかかりそう
他の言語等に比べてpdf情報が多いのは数式が綺麗に表示出来るからかな
よく知らないけど、Webでの数式表示って未だ制限が多いのかなぁ
0007132人目の素数さん
2010/10/20(水) 21:30:10>>6
IEはMathMLに対応してないですね(MathPlayerを入れればいいのだけど)。
数式を沢山使ってるWikipediaでも、画像にレンダリングしたものを返してきますし、
普及はまだ先かも。
0008132人目の素数さん
2010/10/21(木) 19:28:59久しぶりにVerUpしたらgensymが使えるようになっててこんなの作ってみた
genmat(a,b):=genmatrix(lambda([x,y],gensym(10*x+y)),a,b);
主に自習用にmaximaを使っているので
g以外の文字をくっつけたりアルファベット順に文字を出力させたり
色々カスタマイズしたいがgensymのインタフェースが中途半端なのが悲しい
Lisp層わからないし
0009132人目の素数さん
2010/10/23(土) 18:31:56ttp://abcl-dev.blogspot.com/2010/10/maxima-on-abcl-full-pass-on-test-suite.html
ABCL(Armed Bear Common Lisp)はJavaで実装されてるCommon Lisp処理系なんだけど、
他の処理系でMaximaを走らせた場合と比べてどうなんでしょう?
0010132人目の素数さん
2010/10/24(日) 11:25:14試したいのは何か(速度/安定度)
よくわからないけど、実際に試してみればいいのでは?
それより古い記事だけど、速度は通常のmaximaよりは遅いって書いてる
ttp://abcl-dev.blogspot.com/2009/11/maximal-performance.html
0011132人目の素数さん
2010/10/26(火) 23:46:480012132人目の素数さん
2010/11/01(月) 18:16:100013132人目の素数さん
2010/11/09(火) 23:59:44OSはwindows 7 home premium 64bit
wxMaxima0.8.6を使っています。
最近導入したばかりで基本的なことをいろいろ試していたところでしたが、ファイル出力がうまくいかないので教えていただきたいです。
(%i) stringout("test",input);
(%o) C:/Program Files (x86)/Maxima-5.22.1/wxmaxima/test
となるのですが、該当フォルダに出力ファイルが作られません。というかどこにも作られません。
(%i) save("test",all);
(%o) test
こっちでも出力されません。
どうすれば出力されるのでしょうか?いろいろ調べてみたのですがわかりませんでした。。。
0015132人目の素数さん
2010/11/10(水) 06:37:26とりあえず絶対パスにして、
stringout("d:/test",input);
とかで回避するとか。
WindowsでwxMaximaをショートカットから起動すると、作業フォルダーが
Maximaのインストールディレクトリになるみたいですね。
あんまりうれしくない…。
0016132人目の素数さん
2010/11/10(水) 09:55:18できました!ありがとうございます!!
なんで絶対パスじゃないと通らないのかは腑に落ちませんがとりあえずこれでやっていきます!
0017132人目の素数さん
2010/11/10(水) 10:02:04C:/Program Files (x86)/Maxima-5.22.1/wxmaxima/ が書込み禁止になってるからじゃないの?
0018132人目の素数さん
2010/11/19(金) 00:43:360019132人目の素数さん
2010/11/23(火) 11:09:32現象:以前は動いていたmaxima5.20.1が急に動かなくなった。
wxMaximaを動かすと「Not connected to maxima」と表示される。
コマンドラインから動かすと
「Error in SYSTEM::SET-UP-TOP-LEVEL [or a callee]: :ROOT is an illegal pathname name.」
などのメッセージが出る。
maxima-5.22.1に変えても現象は変わらず。
OSはWindowsXPとWindows7(64bit)両方。
回避策:最近、環境変数TMPとTEMPをRAMディスクのある
R:\ に設定したのだが、これをR:\tmpに変更したら動作するようになった。
ドライブ直下にTMPを設定してはいけないらしい。
ウイルスソフトとかDEPの他にも不具合を起こす原因があったので参考までに。
0020132人目の素数さん
2010/12/01(水) 22:38:060021132人目の素数さん
2010/12/02(木) 17:18:18gnuplotで出力したグラフをクリップボードに保存するのにはどうすれば良いですか?
winではボタンがあったのですが・・・
0022132人目の素数さん
2010/12/11(土) 20:14:24最近知ったがdraw_fileが5.20から追加されてたのな
未だに5.17使ってるけど新しいの入れないと
0023132人目の素数さん
2010/12/15(水) 23:16:59>>21
OSXならsbcl版の方が速いのでは?
0024132人目の素数さん
2010/12/17(金) 21:41:45> OSXならsbcl版の方が速いのでは?
本題は速い遅いではないでショ
0025132人目の素数さん
2011/01/03(月) 19:34:190026132人目の素数さん
2011/01/07(金) 02:05:330027132人目の素数さん
2011/01/09(日) 17:39:16http://kamome.2ch.net/test/read.cgi/math/1294561909/
0028132人目の素数さん
2011/01/12(水) 13:41:05えっと累乗和なんですけど、
Bin(n,r):=n!/(r!*(n-r)!);
s(p,n):=s(p,n):=((n+1)^(p+1)-1-sum(sum(Bin(p+1,a)*k^a,a,0,p-1),k,1,n))/(p+1);
とすると、s(0,n) = n , s(1,n) = n(n+1)/2 までは求まるんだけど、
n(2,n)が (n^3+3n^2+3n-Σ(k=1,n)(3k+1))/3 になっちゃって Σの中が展開されないんですけど、これを展開して Σk が s(1,n)であると maximaに認識してもらって
展開する方法ってありますでしょうか
ものすごく昔にmathematicaにやらせたときは、求められた記憶があるんですが…
わかる方いらっしゃいましたら、よろしくお願いします。
0029132人目の素数さん
2011/01/12(水) 18:26:21えっと累乗和なんですけど、
Bin(n,r):=n!/(r!*(n-r)!);
s(p,n):=((n+1)^(p+1)-1-sum(sum(Bin(p+1,a)*k^a,a,0,p-1),k,1,n))/(p+1);
とすると、s(0,n) = n , s(1,n) = n(n+1)/2 までは求まるんだけど、
s(2,n)が (n^3+3n^2+3n-Σ(k=1,n)(3k+1))/3 になっちゃって Σkの部分が展開されないんですけど、これを展開して Σk が s(1,n)であると maximaに認識してもらって 展開される方法ってありますでしょうか
ものすごく昔にmathematicaにやらせたときは、求められた記憶があるんですが…
わかる方いらっしゃいましたら、よろしくお願いします。
yacasでやってみたら、 s(0.n)で、なぜか後半部分に p=0が代入されずに残っちゃいました><
0030132人目の素数さん
2011/01/12(水) 19:12:15Σ[k=1,n] 1 =n
Σ[k=1,n] k =n(n+1)/2
Σ[k=1,n] k^2 =n(n+1)(2n+1)/6
が求められるのでしょうか?
記述を見ると、おそらく、それぞれ、
sum(1,k,1,n) sum(k,k,1,n) sum(k^2,k,1,n)
と、入力するとおもいます。
0031132人目の素数さん
2011/01/12(水) 20:29:22回答ありがとうございます えっと 値を求めたいんじゃなくて
Σ[k=1,n] 1 = n で表される 式そのものを求めたいんですよ。でこれで求まるはずなんですが
>>29のようなわけでして。
0032132人目の素数さん
2011/01/12(水) 20:33:55(とうじはアカデミックパックをもってて使えたもので)
たしか7乗くらいまではなんとか数時間で答えが出て 8乗くらいでギブアップだったかと
またやってみたくて、つかえる処理環境当たり出したんですよ。
0033132人目の素数さん
2011/01/12(水) 20:36:100034132人目の素数さん
2011/01/12(水) 20:57:02それで原因を特定するために、チェックをして欲しいと書いたのです。
例えば、お使いの処理系がs(3,n)をnだけの式として表示されるためには、
Σ[k=1,n] k^3 を、きちんと (n(2n+1)/2)^2 と表示させる能力を持っている
必要があります。
その基本能力を有していますか? と尋ねているのです。
それを持っているのに、思い通りの動作をしないというのであれば、別のところに原因がある
はずですが、まずは、その「基本能力」の有無をチェックして欲しいと書いたのです。
0035132人目の素数さん
2011/01/12(水) 21:29:19×:Σ[k=1,n] k^3 を、きちんと (n(2n+1)/2)^2 と表示させる能力を持っている
○:Σ[k=1,n] k^3 を、きちんと (n(n+1)/2)^2 と表示させる能力を持っている
0036132人目の素数さん
2011/01/13(木) 03:49:05wxMaxima 0.7.8
Maxima ver 5.23.0 っつーことらしいんですが
0037132人目の素数さん
2011/01/13(木) 11:29:02p=0の時は、内側のsumはsum(Bin(1,a)*k^a,a,0,-1)と、0から-1までの加算なので、何も行わず0となるでしょう。
外側のsumも何も行わずはずれ、((n+1)^(p+1)-1)/(p+1)に、p=0が入った、((n+1)^1-1)/1=nが表示されたのです。
p=1の時は、sum(Bin(2,a)*k^a,a,0,0)なので、0から0までの加算つまり、0の時の値そのものなので、
一端Bin(2,0)*k^0となり、1になります。
そして、外側のsumは、sum(1,k,1,n)となりますが、sumのインデックス変数kと無関係な量の加算なので、
sum関数の特殊処理として、(被和算関数)×(インデックス数)が行われ、1*nから、nとなり、
((n+1)^(1+1)-n-1)/(1+1)=((n+1)^2-n-1)/2となったと想像できるのです。
そして、p=2の時、内側のsumは、sum(Bin(3,a)*k^a,a,0,1)です。つまり、Bin(3,0)+Bin(3,1)*k=3k+1です。
これが、sumが本来の仕事を初めてですが、これはできて当然です。sumのインデックス変数に文字は
含まれてなく、展開しただけだからです。
そして、外側のsumはsum(3k+1,k,1,n)となりますが、文字nがあるため、計算されなかったのです。
つまり、お使いの処理系では、sum(k,k,1,n)=n(n+1)/2と処理する能力が無いのではと考えられるのです。
だから、最初から、言っているではありませんか。
sum(1,k,1,n)
sum(k,k,1,n)
sum(k^2,k,1,n)
これらを入力してみてください。そして、その結果をお知らせ下さい、と。上の疑いをはっきりさせるためです。
0038132人目の素数さん
2011/01/13(木) 11:45:210039132人目の素数さん
2011/01/13(木) 12:09:22勝手な想像になるかも知れなせんが、計算量から見て、「一つ手前のべきの累乗和の式をすでに持っている」のではなく
>>29でいったように 一つ手前のべきが出る式からまた再帰的に演算に入っていたと判断したのですが、
その判断が正しかったかは、いまは済みません検証できません。それ以上は私の頭がわるいようです。
いつか機会がありましたらまたきます。
0040132人目の素数さん
2011/01/13(木) 12:45:00大変失礼です 「w」はミスタッチです 謹んでお詫び申し上げます
0041132人目の素数さん
2011/01/13(木) 13:09:45すくなくとも、出来る出来ないみたいなことで 文句を言いにきたとかではないです
0042仙石60+x
2011/01/13(木) 16:17:25s(100,n)=1/101(1-2535301200456458802993406410650n +(1+n)^101)
になりますね
MAPLE、Maxima は カンがにぶってよくわからんけど
0043132人目の素数さん
2011/01/13(木) 16:20:280044132人目の素数さん
2011/01/13(木) 19:59:07s[p_]:=s[p]=Simplify[((n+1)^(p+1)-1-Sum[Binomial[p+1,a] s[a],{a,0,p-1}])/(p+1)]
となります。
関数Simplifyは、適当に括弧をはずし、適当に因数分解してくれるような感じの関数です。
何度も呼び出す可能性がある場合は、メモリに記憶させるとよく、途中に、“=s[p]”を入れておきます。
これで、s[100]を計算させると、
(-94598037819122125295227433069493721872702841533066936133385696204311395415197247711*n)/33330
+ 18674771685049011296614057325260991542019103825338734064995339343748060441015725*n^3
- (16293234618989521508515025064456465992824384487957638029599182473343901462949018943*n^5)/442
(中略)
(43232541100*n^91)/3 - 66698170*n^93 + 298760*n^95 - (2695*n^97)/2 + (25*n^99)/3 + n^100/2 + n^101/101
となりました。上の定義式が、希望されているものなのではないでしょうか?
以上、Mathematicaでの書式です。適当に記述をmaximaに変換してお試し下さい。
0045132人目の素数さん
2011/01/14(金) 02:39:150046132人目の素数さん
2011/01/14(金) 16:43:51>>44 わざわざありがとうございます そういうことだと思いまする
精読するのに ちょっと不足している知識があるようなんで ガンバつて読んでみますありがとうございます。
0047132人目の素数さん
2011/01/21(金) 20:45:050048132人目の素数さん
2011/01/23(日) 01:55:59sum,の代わりにnusumを使えば済む話だと思うがどうか
0049132人目の素数さん
2011/01/24(月) 18:23:15lbfgsの第一引数FOMは、ev(FOM, x:1)が実数になるものを用意する、
そこまではわかりましたが、
ev(FOM)とやったときにエラーやFconvertを返したりするFOMがまずい理由がわかりません。
具体的にはFOMがrkを含んでいると軽く死ねます。
curve : 'rk (..aが未束縛...
fom() := block([t], t: ev(curve), sum(...
このときev(fom())はFconvertを返します。おそらくこのために、
libfgs(fom(). [a], [1], ...
がZero divisorで失敗します。
ここまで来るのにも、Maximaの遅延評価の黒魔術の片鱗に触れましたが、
もっと深くハマらないとならんのでしょうか。
0050132人目の素数さん
2011/01/30(日) 11:46:20TI-89 Titaniumを買ってみた。
機能的にはMaximaのほうが上なのだろうけど、
CASでは何が出来るべきなのか?という所を理解するのに、
商品として販売されていた実績があるものを買ってみた。
(Mathematicaも、せめてphotoshopくらいの価格だったら良いのに)
その関係で、Maxima以外にもCASの選択肢があることに気付いた。
Debug4x HP 48/49 SDK 2.2 Build 153
http://www.hpcalc.org/hp49/pc/programming/debug4x_b153.exe
HPのCAS電卓HP50gのエミュレータが含まれている。
商用利用は不可らしいけど、無料で使えて販売されている実績のあるCAS。
(エミュレータで遊んでいるうちに実機も衝動買いしてしまったorz)
Giac/Xcas
http://www-fourier.ujf-grenoble.fr/~parisse/giac.html
もフリーのCAS。
日本語のドキュメントが無いけど、HP電卓のCAS開発者らしい。
0051132人目の素数さん
2011/02/11(金) 17:35:14ave:sum(x[i], i, 1, n)/n;
sqave:sum(x[i]^2, i, 1, n)/n;
var:sum((x[i]-ave)^2,i,1,n)/n;
var-(sqave-ave^2);
nを決めてratsimpしたらゼロになりましたが、
n未定のままゼロになるようにしたいときは、どうすればいいのでしょう?
0052132人目の素数さん
2011/02/11(金) 20:49:57(x+y)^n-sum(binomial(n,i)*(x^i)*(y^(n-i)),i,0,n);
005351=52
2011/02/11(金) 23:35:21xcasでは、nが未定のままでも
(x+y)^n-sum(((n!)/((k!)*(n-k)!))*(x^k)*(y^(n-k)),k,0,n)
が0になった。
CASが二項定理を知っているかどうかだけの違い?
0054132人目の素数さん
2011/02/12(土) 00:11:08005551
2011/02/12(土) 23:21:27これで望んだ結果が出ました。
declare(sum,additive);
sd:expand(sum((x[i]-ave)^2,i,1,n)/n);
subst(sum(x[i], i, 1, n)/n,ave,sd);
0056132人目の素数さん
2011/02/13(日) 14:22:04(%i1) is(a[i]^2>=0);
(%o1) true
(%i2) is(sum(a[i]^2,i,1,n)>=0);
(%o2) unknown
(%i3) n:6;
(%o3) 6
(%i4) is(sum(a[i]^2,i,1,n)>=0);
(%o4) true
0057132人目の素数さん
2011/02/13(日) 14:22:540058132人目の素数さん
2011/02/13(日) 15:43:49assume(a^2>=b^2);
assume(b>=0);
is(abs(a)>=b);
教科書の証明の中では、自明であるかのように使われているのに。
0059132人目の素数さん
2011/02/15(火) 23:07:430060132人目の素数さん
2011/02/16(水) 20:17:54無理かなという気もしていた。
そもそも、どの問題もderive(TI-89のCAS)では歯が立たなかったし。
(高校レベルの範囲であるのは間違いないのですが。)
『はじめてのMaxima』のネット公開版は書籍版の2倍近くに増えていて、
述語論理とか数学基礎論の話題も含まれるようになっていたので、
読んでみるとこのあたりの事情にも理解が深まるかもしれないですね。
TI-89は50ページほどの取扱説明書を読めば、使い方も限界も把握できる感じですが、
Maximaは1000ページくらいの本を読んでも、何が可能で何が不可能かよく分からない感じです。
0061132人目の素数さん
2011/02/17(木) 00:38:52分かってる人いるのか?w
0062132人目の素数さん
2011/02/18(金) 21:34:34それは、ゲーデルの不完全性定理みたいなもの?
0063132人目の素数さん
2011/02/19(土) 15:19:04diff(%e^x,x,n)
書店でmathematicaの本を立ち読みしたら、sumの使用例では項数が固定になっていた。
CASは任意の自然数nについての答えを出すのが苦手なのかな。
0064132人目の素数さん
2011/02/20(日) 00:05:44.53n
d x
--- (%e )
n
dx
って出るぞ?
0065132人目の素数さん
2011/02/20(日) 00:30:16.91x
%e
と出て欲しい。
exp(x)を何階微分してもexp(x)になるのだから。
0066132人目の素数さん
2011/02/20(日) 02:24:25.94ちなみにmathematicaでもn回微分と表示される
探せばそういう簡単化のオプションがあるのかもしれない
0067132人目の素数さん
2011/02/20(日) 09:08:46.49Mathematicaでも出来ないと言われるとホッとしてしまうorz
しかし、これも記号処理だから出来て欲しいとは思う。
教科書見ると普通に
a[1]*b[1]+a[2]*b[2]+...+a[n]*b[n]
なんて式が出てくる。
nを決めないと答えが出てこないのでは、CASの面白みが半減する。
0068132人目の素数さん
2011/02/20(日) 19:57:01.06なんか言ってることに違和感を感じるんだが
0069132人目の素数さん
2011/02/20(日) 21:25:25.71出来ないなら君が実装すればいい
0070132人目の素数さん
2011/02/20(日) 21:29:34.58そこまで抽象的な理解はしてないです。
diff(%e^x,x,1)
diff(%e^x,x,2)
diff(%e^x,x,3)
と続くのに
diff(%e^x,x,n)
だと答えが出ない。
また、高校レベルの統計の公式
E((x-E(x))^2)=E(x^2)-E(x)^2
も、ユーザーがサンプル数を決めないと
成り立つか成り立たないか判定できないところが不思議だと思うわけです。
前提を一つ加えてスンナリ判定できるようになるなら面白いのですが。
(仮に自明でないとすれば、欠けてる前提は何なのでしょう)
0071132人目の素数さん
2011/02/22(火) 21:30:33.98なんというか数式処理が出す形式的な回答に満足がいかない感じなのか
diff(%e^x,x,n) の評価が (d^n/dx^n)exp(x) というのは間違っていないし、
数式を処理する手順の表現として合っていると俺は思うんだが。
declare(n, integer)とかしても駄目みたいだな
0072132人目の素数さん
2011/02/23(水) 00:17:14.09ttp://news.dengeki.com/elem/000/000/345/345986/
0073132人目の素数さん
2011/02/23(水) 00:23:50.40もちろん、>>70で挙げたのも「形式的」な処理だとは思うのです。
しかし、xは式でOKなのに、nは数値でなければならない。
行列やベクトルの各要素は式でもOKだけど、要素数と次元数は数値でなければならない。
級数や数列の各項は式でもOKだけど、項数は数値でなければならない。
教科書の記述では上記のnも式であることが多いのに、
CASでは数値であることを要求されるのが不思議です。
Mathematicaもそうであるようですけど、学生など、これで不自由を感じないものなのか。
diff(%e^x,x,1))=%e^x
diff(%e^x,x,n-1)=%e^x
から、
diff(%e^x,x,n)=%e^x
が求まるのでも面白いですね。
diff(%e^x,x,1)=%e^x
は知識としてmaximaにコーディングされているだけだと思うのですが、それが
diff(%e^x,x,n)=%e^x
と実装されていれば良かったのか(再定義可能なのかも知れませんが)。
それとも
diff(%e^x,x,1)=%e^x
diff(%e^x,x,n)=%e^x
の2つの知識は、数学の専門家にとってはもう全然別の話題なのか。
0074132人目の素数さん
2011/02/23(水) 02:02:33.38>diff(%e^x,x,n)=%e^x
>の2つの知識は、数学の専門家にとってはもう全然別の話題なのか。
1段目は定義で2段目は1段目から数学的帰納法によって導かれる定理じゃないの?
defruleとか使ってみたらどうなんだろ
0075132人目の素数さん
2011/02/23(水) 21:37:41.47defrule(rec,recdiff(%e^x,x,n),%e^x);
apply1(recdiff(%e^x,x,n),rec);
とやると、一応OKだったんですけど、
今度は、
apply1(recdiff(%e^x,x,1),rec);
が置換されない。
まだまだMaximaの勉強をしなくてはならないと思いました。
> 1段目は定義で2段目は1段目から数学的帰納法によって導かれる定理じゃないの?
前者と後者は「同値」で、どちらを公理として採用しても残る一方は導出できますね。
でも一般的なCASはその導出を行わない。「自明」ではない。
「同値」と「自明」の違いは、単に直感的でものではなく、
計算理論に基づく厳密なものなのかも。
0076132人目の素数さん
2011/02/24(木) 00:13:57.67maximaの勉強じゃなくて用語の定義を勉強しなおせよw
0077132人目の素数さん
2011/02/24(木) 20:01:31.39自分が「同値」と「自明」の違いを整理しきれていないのはその通りだけど、
1+4や2+3が「命題」になるような体系も考え得るものなのですかね?
0078132人目の素数さん
2011/03/04(金) 08:03:16.12n要素のm番目が1の単位ベクトルを作る関数を書こうとしてるのですが
/* これの中身が評価されれば求まる */
f(n,m):=makelist(x=m,x,0,n-1);
あと少しだと思うのですがうまくいきません
どうすればいいでしょうか
0079132人目の素数さん
2011/03/04(金) 20:10:43.18g(n,m):=substpart("[",genmatrix(lambda([x,y],if y=m then 1 else 0),1,n),0)[1];
置換群の行列表現で計算するプログラムを書いたんですが
もう一箇所つまづいたのがリストのリストから行列を構成する所
buildq+spliceでうまくいきます。参考まで
0080132人目の素数さん
2011/03/04(金) 20:20:28.84f( n, m ) := makelist( (if i - 1 = m then 1 else 0), i, 1, n )
part が 1 からだから添え字 1 からの方が相性は良いかもしれないけど
008180
2011/03/04(金) 20:25:00.7880は忘れてくれ
0082132人目の素数さん
2011/03/04(金) 21:06:38.53数学板で言うとバカにされそうなやり方w
0083132人目の素数さん
2011/03/04(金) 21:34:13.84いやいや、こちらのほうが効率は良いので助かります。ありがとう。
0084132人目の素数さん
2011/03/12(土) 20:37:50.70sum(1,i,1,n)
sum(1/n,i,1,n)
しかし、
(%i1) is(product(i,i,1,n)=n!),n=10;
(%o1) true
(%i2) is(product(i,i,1,n)=n!);
(%o2) false
わからないならUnknownと表示すべきなのに……
0085132人目の素数さん
2011/03/13(日) 17:12:20.93が自然数であるとして、
自然数のいずれでもありうるとされる文字"n"は自然数ではないというのが、問題なのかな。
a[1]*x+a[0]
a[2]*x^2+a[1]*x+a[0]
は多項式に該当するけど、
a[n]*x^n+a[n-1]*x^(n-1)+...+a[1]*x+a[0]
は多項式ではないみたいな。
0086132人目の素数さん
2011/03/14(月) 20:10:20.30方程式60*2^p=50*2^q(p,q are integer)をmaximaに入力させたいのですが、
p,qの最小の(p*qが)整数解を得るにはどのような入力をするべきでしょうか。
0087132人目の素数さん
2011/03/20(日) 15:53:51.94declare(a,real)$
declare(b,real)$
declare(c,real)$
declare(x,real)$
assume(equal(a*x^2+b*x+c,0))$
is(b^2-4*a*c>=0);
> (%o6) unknown
0088132人目の素数さん
2011/03/22(火) 01:10:52.03Maximaは本当に推論は弱い(というか実装されていない)と思います。代わりに計算は強いので、
solve(a*x^2+b*x+c=0,x);
[x = -(sqrt(b^2-4*a*c)+b)/(2*a),x = (sqrt(b^2-4*a*c)-b)/(2*a)]
と答えてくれます。
ちなみにassume()って途中でpositiveかとか聞かれるのを抑制するのにはうまく使えるんです。
0089132人目の素数さん
2011/03/22(火) 20:32:08.00どうもありがとう。
もしかしてMaximaが自分の用途に向いていないのでしょうか?
当初は数理ファイナンスの教科書の記述を辿る予定で、
そのために必要な操作を『はじめてのMaxima』で摂取するつもりだったのですが、
正直歯が立たないです。
その基礎知識を摂取するつもりで手を付けた群論の教科書も、
最初の定理の証明をMaximaにやらせるにはどうすればよいのか途方に暮れる始末。
こういう用途にはprologかMLなのでしょうか?
0090132人目の素数さん
2011/03/22(火) 23:32:21.02数式変形ならMaximaでもできますから、まずは簡単な問題をMaximaで解いてみると良いです。
例えば、86の問題。
p,qの不定方程式60*2^p=50*2^q(p,q are integer)
をMaximaで解いてみると、どうなります?(一目瞭然ではありますが)。
0091132人目の素数さん
2011/03/23(水) 04:12:45.16もう少し「数学ソフト」と言うのはどういうのがあるかを調べた方がいいですよ。
0092132人目の素数さん
2011/03/23(水) 15:48:37.060093132人目の素数さん
2011/03/23(水) 22:30:40.48> 実用的な定理証明システムなんてまだ無いので、定理の証明をMaximaにやらせるのは無理です。
無理ですか……
ポリアとかサイモンとか、結構古いんですけど。
やっぱり、サイモン先生はうそつき?
> p,qの不定方程式60*2^p=50*2^q(p,q are integer)
> をMaximaで解いてみると、どうなります?(一目瞭然ではありますが)。
q:a+p$
solve(60*2^p=50*2^q,a)$
rhs(%[1])$
radcan(%);
integerp(%);
> (%o15) false
p-qは整数でないので、pとqが同時に整数とはなりえない。
もうちょっとコンピュータ任せに出来れば面白いのですが。
0094132人目の素数さん
2011/03/23(水) 22:55:55.86Rは数値処理ですね。(Maximaより先にR/APLのほうに触れています。)
(∀x (Px → Qx)) ∧ Pa → Qa
だって記号処理ですし、
everyやsomeという関数があったり、
『はじめてのMaxima』に外延/内包という記述もあったりで、期待はしていたのですが……
0095132人目の素数さん
2011/03/23(水) 22:59:27.41具体的なソフトウェア名の提示ありがとうございます。
ドキュメントが英語なのは難ですが、英語の情報だけから目的にあったソフトウェアを探すのはもっと大変だと思います。
さすが、数学板住民ですね。
0096132人目の素数さん
2011/03/24(木) 00:47:34.61私もRは数値処理って思ったんだけど、91さんが言いたいのは
数理ファイナンスならRの方が役に立つ、ということかも。違ってたら
ご指摘を。
93でやったような数式計算ならばMaximaは得意だと思うんです。数理
ファイナンスの数学の式計算(偏微分方程式のオンパレードみたいな
やつですよね)には使えないのかなあ。
>>92
CoqやAgda、普通の証明(ってなんだ?)にも使えそうでしょうか。
時代は進歩しているんですね。
0097132人目の素数さん
2011/03/24(木) 20:26:02.40> 数理ファイナンスならRの方が役に立つ、ということかも。違ってたら
なるほど、そういう意味でしたか。
教科書は記号で書かれていても、
実務の世界ではモンテカルロシミュレーションが幅を利かせるらしいですね。
> ファイナンスの数学の式計算(偏微分方程式のオンパレードみたいな
それが放送大学の教科書では、ベクトルと行列なんですよ。
著者がへそ曲がりなのかも知れません。
ただ教科書は、大きさ未定義の数列、ベクトル、行列について記載されているので、
イラついていました。
>>87の定理も、教科書中でコーシー=シュワルツの不等式を証明するのに使われていたものです。
0098132人目の素数さん
2011/04/02(土) 18:00:03.52CoqはOCaml、AgdaはHaskellで記述されているそうですね。
手元にSMLの入門書があるので、ML→Coqの順に攻略してみようかな。
あと、ちょっと気がついたのですが、
「新しい数学」の提唱者のケメニーとBASIC言語の開発者のケメニーって同一人物ですよね?
009998
2011/04/02(土) 21:35:41.58> 「新しい数学」の提唱者のケメニーとBASIC言語の開発者のケメニーって同一人物ですよね?
検索してみると、このケメニーがジョン・マッカーシーを助教授としてダートマス大学に招いて、
LISPの開発はマッカーシーがダートマス大学の助教授だった頃に行われたとか。
すごく偉い人みたい。
0100132人目の素数さん
2011/04/05(火) 02:08:43.33diff(exp(x),x,n)が簡約出来ない理由を調べました。comm-new.lispの中の
deriv(e)という関数が微分を行う関数群のentry pointです。この中でdiff
の第三引数の型をチェックしています。
この型がFIXNUM以外の場合には、名詞形を返す処理をしています。
ちなみにMaximaの機能拡張を使ってこの処理を実装するのは簡単でした。
matchdeclare([a,b],true);
tellsimpafter('diff(exp(a),a,b),exp(a));
でお終いです。これをmaxima-init.macにでもかいておけば所望の処理が
行われます。
最後になぜこいつが実装されていないのか、、、想像するに普通は欲張って
diff(exp(f(x)),x,n)を実装したくなりませんか?もちろんnが具体的な
数ならばちゃんと微分してくるのですが、変数の場合の一般的な公式が
よく分かりません。だからじゃないかな、、。
ちなみにdiff(exp(x),x,n)->exp(x) だけなら自明だし簡単に自分で
実装出来るのでわざわざ組み込まれてない気がします。
0101132人目の素数さん
2011/04/06(水) 17:40:41.88ありがとうございます。
LISPのプログラムを解読できるなんて、スゴイですね。
> matchdeclare([a,b],true);
こっちの記述が、理解できていません。
『はじめてのMaxima』には、a,b部分が項の羅列でtrue部分が述語だとありました。
記述は簡単でも、概念が自分の理解を超えて抽象的なようです。
> diff(exp(f(x)),x,n)を実装したくなりませんか?もちろんnが具体的な
単純に使う立場として、
diff(%e^(k*x),x,n);
を入力してしまいました。
一般性を求め始めると切りがないのですね。
今はMLの教科書を読み進めているのですが、
正直、何から手を付けたものかちょっと途方に暮れています。
CASや定理自動証明などのコンピュータ使用を前提として、
中学・高校レベルの数学の教育方法を全面的に見なおす流れにはなっていないみたいですね。
'60年代の「新しい数学」や'90〜'00のグラフ電卓の時には、教育者の方々も熱中していたみたいですが。
■ このスレッドは過去ログ倉庫に格納されています