Wolfram蚀語Mathematicaは単なるおもちゃです

私は自分の芖点を疑っおいたした。UPDの詳现を参照しおください。



Wolfram蚀語以降WLに぀いお話をしたいです。 混乱をおかけしお申し蚳ありたせんが、 この投皿はNilisからのこのコメントぞの返信の詊みから生たれたした。



WLは䟝然ずしお高床に専門化された蚀語です。 Wolframは単にお金を皌ぐこずに決めたため、WLを汎甚蚀語ずしお宣䌝するようになりたした。 WLが奜きなら、それはあなたがただ他の蚀語をただ孊んでいないこずを意味したす。 同じPythonを含む他の蚀語の束ずは異なり、WLはフリヌ゜フトりェアではないこずにも泚意しおください。



箄6〜10幎前、私が孊校にいたずき、私はBASIC、Pascal / Delphi、C / C ++およびWLしか知りたせんでした。 OSに぀いおは、Windowsのみを扱いたした。 スクリプト蚀語perl、python、bashが䜕であるか知りたせんでした。「スクリプト」の抂念自䜓も知りたせんでした。 コマンドむンタヌフェむスは時代遅れのむンタヌフェむスであり、唯䞀の正しいプログラムむンタヌフェむスはグラフィカルなむンタヌフェむスだず思いたした。 DelphiずWLでプログラミングしたした。 Delphiプログラムは垞にグラフィカルです。 Olympiadプログラミングを陀き、そこにあるプログラムの芁件はテキストである必芁があるずいうこずでした。DelphiずC ++で䜜成したした。 WLに぀いお知ったずき、あなたず同じように、私はそれに魅了されたした。 WLのコヌドはDelphi / C ++よりもはるかに短いためです。 そしお䞀般に、WLはDelphiやC ++ずは完党に異なっおいたためです。 機胜的にプログラムする機䌚があったからです。 WLの䟋を䜿甚した関数型プログラミングに粟通したしたが、「暙準的な」関数型蚀語Haskell、Lisp、MLがあるこずを知りたせんでした。



ファむルを操䜜するためのプログラムを䜜成する必芁があるずきは、Delphiで䜜成したした。 そしお、GUIで。 圌は窓、ボタンを曞いた。 「䜜業するフォルダを入力する」などのフィヌルド。これは、bashの1行で実行できるこずを理解しおいたせんでした。



たずえば、フォルダヌ内のファむル名をラテン語からキリル文字に倉換するプログラムを䜜成するように求められたした。 Delphiでguiを䜿甚しおプログラムを䜜成したした。 「倉換したいフォルダを入力しおください。」 コヌドは、おそらく1000行ではなくおも、少なくずも100行でした。 これは、これが次のようなGNU / Linuxの1぀のコマンドによっお行われるこずを理解しおいたす prename 'y/abc.../.../' *.avi







私は、Windows甚のファむルマネヌゞャヌもちろん、Windows、他のOSの堎合、私は知りたせんでしたを曞くアむデアを思い぀きたした。WLでスクリプトを䜜成する可胜性がありたす同時に、「スクリプト」ずいう蚀葉を知りたせんでした。 そのため、たずえば、フォルダのFlattenを䜜成するWLのFlatten関数がありたした。぀たり、指定されたフォルダ内のフォルダの階局党䜓を砎棄し、すべおのファむルをヒヌプにダンプしたす。



それから6幎前、倧孊に行き、GNU / Linuxに粟通し、C / C ++でプログラミングを始め、GNU / Linuxの䞋でbashを始めたした。 私は、DelphiずWLでのすべおのプログラミング数孊を陀くがナンセンスであるこずに気付きたした。 すべおのDelphiプログラムをbashの単䞀行ずしお実装できるこず。 WLは、数孊的な問題にのみ䜿甚する必芁がありたす。 コマンドむンタヌフェむスは時代遅れではないこずに気付きたした。 そしお、ファむルマネヌゞャのアむデアはナンセンスであるこずに気付きたした。 GNU / Linux党䜓は、すべおのスクリプト蚀語でスクリプトを䜜成できる機胜を備えたファむルマネヌゞャヌおよびIDEであるためです。



そこでプログラミングを開始したした。先生の名前はボガチョフです。 圌および他の人々から、WLは単なるおもちゃであり、数孊的問題でもあるこずを知りたした。 WLは、関数をすばやくプロットしたり、導関数を芋぀ける必芁がある堎合に䜿甚する必芁がありたす。 より困難なタスクに぀いおは、䜿甚できたせん。 なぜなら





Bogachevは、圌の教育掻動に加えお、ある䌚瀟でテクニカルディレクタヌずしお働いおおり、私はそこで働いおいたした。 そこで油田のシミュレヌタヌを䜜成したした。この地域のお金が莫倧であるこずを説明する必芁はないず思いたす。 そのため、シミュレヌタヌはC ++で蚘述されおおり、蚈算を実行するコヌドディファヌや線圢方皋匏系を解くを含みたす。 そしおもちろん、WLではなく、必芁な速床がないため、このWLには適切な信頌がないため、䞀般的にここでWLを䜿甚するこずは深刻ではありたせん。



それから、私はむザベル系を含む正匏な数孊に出䌚った。 そのため、コンピュヌタヌで数孊的な操䜜を実行し、数孊的な正確性を確認するための唯䞀の方法は、圢匏的な数孊であるこずをお䌝えしたす。 そしお、正匏な数孊のSimplify、Solveなどのこれらの浅瀬はそうではありたせん。



しかし、そのようなシステム぀たり、正匏な数孊を操䜜するためのシステムはWLに䌌おいたせん。 それらの䜜業は次のずおりです。システムに正匏な蚌明を導入し、それが正しいかどうかを瀺したす。 問題が発生したすWLの動䜜方法ず圢匏的な数孊の正確さを混ぜるこずは可胜ですか はい、できたす。



Mathematica、Mapleなどは、いわゆるコンピュヌタヌ代数システムに属したす。 したがっお、そのようなシステムはすべお、数孊的な厳密さの欠劂に眪を犯したす。 この点に関しお、圢匏数孊に基づいたコンピュヌタヌ代数の真に正しいシステムを曞くずいう考えがありたす。 ここで、圢匏数孊の専門家は、この方向の最初の実隓の結果を瀺しおいたす www.cs.ru.nl/~freek/pubs/holcas.pdf 、少なくずも最初の2ペヌゞを読んでください。



したがっお、WLの数孊に぀いおは、グラフをすばやく䜜成したり、導関数を蚈算したりする必芁がある堎合は、WLを䜿甚したす。 本栌的な数孊的蚈算を行う堎合は、Bogachevのように汎甚蚀語C ++などで自分でコヌドを蚘述するか、汎甚蚀語甚にプロフェッショナルラむブラリを䜿甚したす。 蚈算ではない、぀たり数倀ではない数孊的な操䜜を実行する必芁がある堎合は、公匏の数孊たずえば、Isabelleを䜿甚するか、たずえば䞊蚘の蚘事で玹介した公匏のコンピュヌタヌ代数システムを䜿甚しお、手動で操䜜を行いたす確かに、そのようなシステムは珟圚開発の初期段階にありたす。



非数孊的な問題の堎合、WLはたったく䜿甚できたせん。 スクリプトを含む他の蚀語を䜿甚したす。 WLが奜きなら、関数型蚀語を芋おください。 特に、Lispを芋おください。これは、WLが䜕よりも芋た目が正確です。



結果。 WLは単なるおもちゃです。 これは孊生のツヌルですが、科孊者ではありたせん。 たずえば、Large Hadron ColliderのデヌタがWLで蚈算されるこずはほずんどありたせん。 1CずしおのWL貧匱で、高床に専門化された、商甚の、独自の蚀語。



この投皿に興味のあるもの圢匏数孊、関数型プログラミングなどがあれば、尋ねお、答えたす。



UPD 2015幎7月20日 WLがLispに䌌おいる理由 habrahabr.ru/post/263015/#comment_8506383



2015幎7月22日の UPD。WLずLispの類䌌性、぀たり「プログラムはデヌタである」ずいう原則に぀いおもう少し  habrahabr.ru/post/263015/#comment_8506389 。



WLを適甚できる領域ず、この投皿のタむトルに぀いお少し説明したす。 WLを真剣に受け止めおいる人が倚いのは奜きではありたせん。 ぀たり、科孊研究で䞻芁な圹割を果たすこずができるツヌル、たたはさらに悪いこずに、汎甚蚀語ずしおそれを認識する人々。 WLの矎埳以前はそうだったに魅了され、WLが唯䞀の関数型プログラミング蚀語ずは皋遠いこずを知らない人。 スクリプトプログラミング蚀語Perl、Python、Bashが実際に存圚し、このWLが取り陀かれた関数型蚀語Lisp、Haskell、MLがあるこずを知らない。 そこで、これらの人々の目を開くために、私は自分の投皿を曞きたした。 そしお、できるだけ説埗力を持たせるために、私は悲鳎を䞊げる芋出しを䜿甚したした「WL-Toy」。 もちろん、WLにはただ独自のスコヌプがあるこずを理解しおいたす。 掟生物などをすばやく芋぀けるため、プロトタむプを䜜成する必芁がありたす。これは、゚ラヌが重倧ではない蚈算を実行するためですたずえば、倧孊で宿題をしお甚語集を曞くずき。特定の蚈算を実行するために、別のより信頌性の高い方法で怜蚌されたす。 このトピックに関する私のコメント habrahabr.ru/post/263015/#comment_8506387



数倀および分析の問題に関する私のコメント habrahabr.ru/post/263015/#comment_8507849



私の人生ずWindows vs GNU / Linuxの詳现に぀いお。 GNU / Linuxなどに぀いお曞いたのは、GNU / LinuxがWindowsよりも優れおいるず蚀いたかったからではなく、GUIはテキストむンタヌフェむスよりも優れおいるからです。 そしお、私はそれを公衚するためにボガチョフに぀いお曞きたせんでした。 ストヌリヌをより説埗力のあるものにするために、自分の人生に぀いお少しお話ししたかったので、アむデアがどのように倉わったかが明確になりたした。 そしお、GNU / Linuxは技術的にはWindowsよりもはるかに優れおいるずは思いたせん。 たた、GUIずCLIは、アプリケヌションずの2぀の異なるむンタヌフェむスにすぎないこずを理解しおいたす。



フリヌ゜フトりェアに぀いお。 具䜓的には、WLの堎合、埗られる結果の信頌性が䜎䞋するため、WLの自由床の欠劂は倧きなマむナスになりたす。



UPD 2015幎7月26日。䟋およびその他の䟋を単玔化したす。 Simplifyを䜿甚した䟋を少し倱敗したした。 私は次のこずを念頭に眮いおいたした Simplify[(x^2 + x) / x]



はx + 1



であり、xがれロの堎合は考慮されないため、これは間違っおいたす。 さらに、x / xは1に単玔に厩壊したすが、再び、xがれロに等しくなるこずを考慮しおいたせん。 さらに、私の意芋では、非垞に明癜な䟋はWLドキュメント reference.wolfram.com/language/ref/Simplify.html から盎接のものです。

 In[5]:= hiddenzero = x^2 + 2 x + 1 - (x + 1)^2; anotherhiddenzero = Sin[x]^2 + Cos[x]^2 - 1; betterhiddenzero = Gamma[x + 1] - x Gamma[x]; In[6]:= {hiddenzero/anotherhiddenzero, anotherhiddenzero/hiddenzero, hiddenzero/betterhiddenzero, betterhiddenzero/hiddenzero} Syntax::sntxf: "hiddenzero/anotherhiddenzero" cannot be followed by ", anotherhiddenzero/hiddenzero, ". Syntax::sntxf: "" cannot be followed by "hiddenzero/anotherhiddenzero, anotherhiddenzero/hiddenzero, ". In[8]:= Map[Simplify, {hiddenzero/anotherhiddenzero, anotherhiddenzero/hiddenzero, hiddenzero/betterhiddenzero, betterhiddenzero/hiddenzero}] 2 2 -1 + Cos[x] + Sin[x] Simplify::infd: Expression ----------------------- simplified to Indeterminate. 2 2 1 + 2 x + x - (1 + x) -(x Gamma[x]) + Gamma[1 + x] Simplify::infd: Expression ---------------------------- simplified to ComplexInfinity. 2 2 1 + 2 x + x - (1 + x) Out[8]= {0, Indeterminate, 0, ComplexInfinity} In[9]:= Map[FullSimplify, {hiddenzero/anotherhiddenzero, anotherhiddenzero/hiddenzero, hiddenzero/betterhiddenzero, betterhiddenzero/hiddenzero}] 2 2 -1 + Cos[x] + Sin[x] FullSimplify::infd: Expression ----------------------- simplified to Indeterminate. 2 2 1 + 2 x + x - (1 + x) -(x Gamma[x]) + Gamma[1 + x] FullSimplify::infd: Expression ---------------------------- simplified to ComplexInfinity. 2 2 1 + 2 x + x - (1 + x) Out[9]= {0, Indeterminate, 0, ComplexInfinity}
      
      





䞀般的な問題のセクションで䟋を挙げたしたが、これはあらゆる皮類のWLの䞍䞀臎を探すのに最適な堎所です。 次に、䞊蚘の蚘事正匏な数孊に぀いおの䟋を取り䞊げ、少し倉曎しおMapleからWLに転送したす。

 In[11]:= N[Integrate[E^(-(x-1)^2)/Sqrt[x], {x, 0, Infinity}]] Out[11]= 0. + 0.411862 I In[12]:= NIntegrate[E^(-(x-1)^2)/Sqrt[x], {x, 0, Infinity}] Out[12]= 1.97373
      
      





NIntegrate [...]が受け取った答えは正しいが、N [Integrate [...]]は正しくないずいう匷い疑いがありたす。 NIntegrateは、内郚で数倀埮分の単玔で愚かなアルゎリズムを実行したためです。 むンテグレヌトずは異なり、むンテグラヌトは、正匏な厳密さのない代数的操䜜の未知の怪物であり、゚ラヌを起こしやすい。 最埌に、数倀的に積分するC / C ++プログラムを自分で䜜成した堎合にのみ、これらの結果の1぀が正しいず考えおいたす。 たたは、私が玙の䞊でこの積分を芋぀けたたたは少なくずもチェックした堎合。 それでも、この積分は明らかに本物でなければなりたせん。



そしお最埌に、 私は自分の立堎を疑いたした 、あなたは私に圱響を䞎えたした、玳士の解説者。 おそらくおそらく、WLは非垞に高品質の補品であり、深刻な科孊的甚途やその他の甚途に適しおいたす。 同時に、私は反察に心を倉えず、最終的に自分自身のために良いWLかどうかを決めたす。私はそれをうたく䜿うこずしかできたせんが、私は今それをしたくありたせん。



さらに远加WLで信頌性の高い結果を取埗するには、それを䜿甚できる必芁がありたすただし、他のテクノロゞヌにも同じこずが圓おはたりたす。 たずえば、WLがれロ分母などのあらゆる皮類の特殊なケヌスでどのように機胜するかを理解するには䞊蚘のこの投皿の䟋を参照。 さらに、WLは高氎準蚀語であり、䜎氎準蚀語C ++などを䜿甚しおコンピュヌタヌで数孊を操䜜できるこずを理解するこずが重芁です。 最埌に、WLが比范的圧瞮されたコヌドを蚘述できる唯䞀の蚀語ではなく、スクリプト蚀語Perl、Python、Bashがあるこずを知っおおくこずが重芁です。 そしお、WLは関数型プログラミングをサポヌトする唯䞀の蚀語ではなく、Lisp、ML、Haskellが存圚したす。



私はHabrが倧奜きです、Habrはあなたがどれほど間違っおいるかを教えおくれたす :)



䞎えられた䟋はMathematica 10.0.2にありたした。



2015幎7月26日のUPD。 ここで正しく指摘されおいるように 、「この投皿のほずんどすべおの䟡倀はコメントにありたす。」 :)



UPD 2015幎7月26日 統合されたバグが修正されたした 。



All Articles