CATオリジナルのFAQです。Wolfram ResearchのFAQと合わせて活用してください。
このページは不定期に更新されています。
ページの閲覧時はReloadを忘れずに!

〜このFAQについての御質問は弊社Mathematica担当(math@catkk.co.jp)まで〜

[First]   [Second]

  1. パッケージをロードしても関数が使えません
  2. Mathematica で作成したグラフィックをBMPファイルで保存したいのですが
  3. = と :=の違いを教えてください
  4. Sqrt[3] を入力しても、1.73205... と計算されないのですが
  5. //MatrixForm などを使わずに、常に伝統的な数学の表記法で出力したいのですが
  6. Sin[x] = 0 という方程式が解けません
  7. 計算結果をファイルに出力するにはどうすればいいのですか?
  8. 200個の要素を持つリストを、20行10列くらいの形で表示するには?
  9. x, y が実数と仮定して Re[x + y*I] を評価したい。
  10. グラフィックスの線の色を変えたいのですが。
  11. グラフィックスにラベルを挿入したいのですが。
  12. X軸を Log で表示したいのですが、その方法がわかりません。
  13. Mathematica のプログラミングについて教えてください。
  14. Mathematica で利用可能なメモリサイズを変えたい。
  15. Mathematica でグレブナ基底を求めるには?
  16. グラフを eps 形式で保存したものを、GhostScriptなどで見ると日本語や括弧類が化けてしまう。
  17. TIFF形式のファイルを読み込むにはどうすればよいのですか?
  18. WindowsNTで計算を実行させようとしても、Out[*]が出力されません(Kernelが起動されません)
  19. セルの内容を変更できないようにしたいのですが
  20. グラフィックス中の点の軌跡を知ることはできますか?
  21. 3D画像をマウスでドラッグしながら回転させたいのですが
  22. MacOS 8.x を使っています。ときどきフォントが正しく表示されません
  23. たとえば Sqrt[3] を入力して、毎回その近似値を返すように出力を調整したい
  24. Simplify[ ( x^2 + Sqrt[2]*x^2 )^(1/2) ] を実行しても簡単化されません
  25. Mathematicaで作ったグラフィックスを Adobe Illustrator で編集したい


[Q] パッケージをロードしても関数が使えません。

[Answer]

パッケージをロードする前にパッケージの関数を使いませんでしたか? Mathematica は一度使われた関数の名前を保持します。したがって、改めて目的のパッケージをロードしようとしても同じ名前の定義が見つかり、新しい名前の関数が定義できないことに原因があります。対処方法は、まずあなたが使おうとした関数名を Remove[] で消去してください。その後もう一度パッケージをロードし直してください。

[戻る]


[Q] Mathematica で作成したグラフィックをBMPファイルで保存したいのですが。

[Answer]

作成したグラフィックスをマウスで選択し、[Edit] メニューから [Save Selection As...] を選択してください。BMP ファイル以外にも EPS ファイルや WMF(Windows Meta file)などの形式でも保存が可能です。また、GIF 形式で保存するには notebook そのものを HTML に変換すれば、notebook 内のグラフィックスは GIF 形式に自動的に変換されます。

[戻る]


[Q] = と :=の違いを教えてください。

[Answer]

Mathematica では、= と := は違う意味として定義されています。= は割り当てといい、 :=は遅延割り当てといいます。前者は、値の代入などに使い、後者は関数の定義のときなどに使います。 :=の右辺で定義された式は、定義された時点では計算されず、実際に引数に値を受け取ったときにはじめて計算されます。 たとえば、f[n_]:=Expand[(x+y)^n] で定義された関数 f は、その変数 n に何かしらの値を受け取ったときに Expand を実行します。もしも、f[n_]=Expand[(x+y)^n] と定義すれば、Mathematica は単に (x+y)^n を返すだけです(Expand は実行されない)。この二つの違いは Mathematica を使う上では大切なことです。

[戻る]


[Q] Sqrt[3] を入力しても、1.73205... と計算されないのですが。

[Answer]

3の平方根はあくまで Sqrt[3] です。なぜなら 1.73205... というのは Sqrt[3] の近似値だからです。Mathematica は特にユーザが指定しない限り数の近似はおこないません。もしも、Sqrt[3] の近似値を求めたいのならば、Sqrt[3.] と入力するか、もしくは関数 N を使います。関数 N は指定された桁数での近似値を返すことができます。この場合で、20 桁での近似値を求めたいのならば、N[Sqrt[3], 20] と入力します。

[戻る]


[Q] //MatrixForm などを使わずに、常に伝統的な数学の表記法で出力したいのですが。

[Answer]

Notebook の出力をすべて伝統的な数学形式で表示させるには、[Cell] メニューから [Default Output FormatType] を選び、Traditional Form を選択します。

[戻る]


[Q] Sin[x] = 0 という方程式が解けません。

[Answer]

Sin[x] や Exp[x] などの数学関数は一般に超越関数と言われています。Mathematica は超越関数を含む方程式に対して Solve などのコマンドを実行できません。なぜなら、これらの関数は代数的には解けないからです。 このような超越関数を含む方程式を解くには、何らかの数値的解法に頼るしかありません。数値的解法として Mathematica では FindRoot というコマンドが用意されています。これは、Newton 法(逐次近似)により方程式を解きます。 FindRoot を用いるときは、その初期値に十分注意してください。 初期値が違えば求まる答えが変わるときがあります。この場合は、まず一度問題となる方程式を図示し、 初期値になりうる適当な値から求めることが重要です。

[戻る]


[Q] 計算結果をファイルに出力するにはどうすればいいのですか?

[Answer]

Mathematica のファイルI/Oには、Put と Get という関数が用意されています。なお、これらは >> と << というシンボルでそれぞれ省略できます。以下に例を示します。

     In[1]:= data = Table[ Random[Real , { -1 , 1 } , 15] , { i , 20 } ] ; 
              (* 精度15桁で−1から1の範囲の実数を20個生成 *)

     In[2]:= data
>> "data.txt"  (* data を data.txt というファイルに出力  *)

     In[3]:= data2 << "data.txt"  (* data.txt のファイル内容を変数 data2 に割り当て *)

他にも、PutAppend(>>>)や Save などの関数も用意されていますので、適宜使い分けてください。

[戻る]


[Q] 200個の要素を持つリストを、20行10列くらいの形で表示するには?

[Answer]

data = Table[ i , { i , 200 } ] を表示するデータとします。これを 20 行 10 列の行列の形で表示するには、まず Partition という関数を使って、データを任意の個数のリストに分割してください。それから、MatrixForm で表示するようにすれば、この操作は可能です。例えばこの場合なら、

In[1]:= MatrixForm[ Partition[ dat , 10] ]

となります。

[戻る]


[Q] x, y が実数と仮定して Re[x + y*I] を評価したい。

[Answer]

関数 ComplexExpand を使ってみましょう。この関数は、式中の変数を実数と仮定して式を評価します。
たとえば、この場合なら

In[1]:=  ComplexExpand[ Re[x + y*I] , TargetFunctions->{ Re, Im } ]

Out[1]:= x

となります。

[戻る]


[Q] グラフィックスの線の色を変えたいのですが。

[Answer]

関数を Plot を用いて描くときに、Option として PlotStyle に RGBColor 値を指定してください。たとえば、Plot[{ Sin[x] , Sin[2x] , Sin[3x] } , { x , 0 , 2π} , PlotStyle -> {RGBColor[1,0,0] , RGBColor[0,1,0] , RGBColor[0,0,1] }] などとします。同様な Option として Hue[ ] というものもあります。

[戻る]


[Q] グラフィックスにラベルを挿入したいのですが。

[Answer]

ラベルといってもいろいろあります。まず、グラフィックスのタイトルとしてラベルを挿入したいのならば、Option の PlotLabel を指定してください。使い方は Plot[ Sin[ Cos[x] ] , {x,0,Pi} , PlotLabel->{グラフ1} ] となります。また、軸に関してのラベルをつけるには、AxesLabel -> { x 軸のラベル , y 軸のラベル , ・・・ } と指定します。さらには、パッケージとして Graphics`Legend` というのを読み込むことでより多彩なラベルが作成できます。

[戻る]


[Q] X軸を Log で表示したいのですが、その方法がわかりません。

[Answer]

Graphics`Graphics` パッケージを読み込んでください。これにより LogPlot という関数が使えます。使用法は通常の Plot と同じです。同様な関数として、LogLogPlot (X軸、Y軸ともに Log 表示) や LogLinearPlot というものもあります。

[戻る]


[Q] Mathematica のプログラミングについて教えてください。

[Answer]

Mathematica は強力な数式処理システムであると同時に、ひとつのプログラミング言語とも言えます。そして Mathematica でのプログラミングは従来の言語にはない、簡易性や柔軟性を備えています。まず、Mathematica のプログラミングには種類として大きく3つあります。

1.手続き型プログラミング :従来の言語(Basic , Pascal , C …)と同じプログラミング法
2.ルール型プログラミング :関数をパターンに応じて複数定義する方法
3.関数型プログラミング :組込み関数を入れ子にしていく方法(λ計算法に基づく)

これらは各々特性をもっていますが、そのすべてをここに書いていても時間をつぶすことになるので、代表的なメリットを述べることにしましょう。まず、手続き型はなんといっても従来覚えているプログラミングの経験をそのまま生かせることが大きな利点です。ルール型の特徴は、自分のやりたい計算に特化した関数を柔軟に定義できることです。そして、関数型は、煩雑な記号処理を至って簡単に定義できることです。したがって、各々のプログラミング法を独立に用いるよりも、これらのプログラミング法をうまく組合せることにより、大規模なソース量となるようなプログラムを簡潔に作成できます。(弊社デモノートブックなどをご参照ください)
   Mathematica でのプログラミング技法については、非常に多くの著書・参考書が出版されています。これらも多用しながら、さまざまな科学技術計算が Mathematica では行なえます。cf.『Mastering Mathematica』 John W. Gray 著

[戻る]


[Q] Mathematica で利用可能なメモリサイズを変えたい。

[Answer]

まず最初に Mathematica が独自にメモリ管理を行なっていないということに注意してください。つまり Mathematica もまたシステムのメモリ制御に依存しています。計算の途中でメモリ不足のエラーメッセージなどがでる場合は、御使いのシステムの仮想メモリなどを増加させてください。
Mathematica での計算に費やされる可能なメモリを動的に確保する目的であるならば、パッケージのUtilities`MemoryConserve` をロードしてください。その後、On[ MemoryConserve ] としてメモリの確保を動的な状態にすることで、メモリ不足などの障害を避けることができます。

[戻る]


[Q] Mathematica でグレブナ基底を求めるには?

[Answer]

Mathematica にはグレブナ基底を求める関数として、 GroebnerBasis いうのがあります。使い方は GroebnerBasis[ { 多項式のリスト } , { 変数のリスト } ] です。

[戻る]


[Q] グラフを eps 形式で保存したものを、GhostScriptなどで見ると日本語や括弧類が化けてしまう。

[Answer]

Mathematica 3.0 の初期バージョンのノートブックを使用した際、このような現象が起きることが報告されています。
まず、括弧類の文字化けに関しては、こちらに記されている通り、新しいリソースに置き換えることで修正できます。
しかしながら、日本語に関しては根本的に解決できません。さまざまな原因が考えられますが、基本的にMathematicaが日本語をフルサポートしない限り不可能な問題でしょう。

[戻る]


[Q] TIFF 形式のファイルを読み込むにはどうすればよいのですか?

[Answer]

MathSource には TIFF 形式のファイルを読み込むための Package として、ReadTIFFpackage というパッケージがあります。このパッケージを使って TIFF 形式のファイルを読み込むことができます。(ただし、モノクロのみ)

このパッケージを使うには、先に FastBinaryFiles という拡張プログラム(MathLink プログラム)が必要になります。このパッケージ(binary.zip)の中の binary**.exe を解凍して、Mathematica がインストールされているディレクトリにコピーしてください。( binary**.exe の ** 部分はお使いの Mathematica のバージョンによって異なります。)

次に、Mathematica を起動して、binary.exe を Insatll します。

In[1]:= Install[ "binary30.exe"]
(* 必要であれば、上記ファイルの場所はフルパスで指定してください *)

Out[1]:=  LinkObject["\".\\binary30.exe\"",2,2]

これで準備は整いました。ReadTIFF.zip の中にある ReadTIFFpackage.m ファイルを $Path で表示される path の中のAddOns/ExtraPackages にコピーしてください。
その後、

In[2]:=<<ReadTIFFpackage.m

とすれば、この package 用に定義される関数群が使用できます。
例えば、sample.tif というファイルを読み込んで表示するには、

In[3]:= img=ReadTIFFg["sample.tif"];
ListDensityPlot[ img, Mesh -> False ];

としてください。

<備考>Mathematicaの次期バージョンでは、ファイルの読み込みに関して大幅に改良される予定です。

[戻る]


[Q] WindowsNTで計算を実行させようとしても、Out[*]が出力されません(Kernelが起動されません)

[Answer]

WindowsNT 上で Mathematica をご使用になる場合、次の点に注意しなければなりません。

1) 各 User の home ディレクトリの設定がなされているか?

または、

2) 環境変数 MATHEMATICA_PREFERENCES に各個人情報が保存されるディレクトリが指定されているか?

このどちらかが設定されていませんと、Mathematica の mathpass ファイル(password情報)が正しく参照されず FrontEnd は起動しても Kernel が動かない、という現象が発生します。
したがってこの問題の対処方法は

a) 『ユーザマネージャ』を起動し、各 user の home ディレクトリを確認する。

b) コントロールパネルから、システム設定を開きます。各 user の環境変数に、MATHEMATICA_PREFERENCES として適切なディレクトリを指定します。

※以上の操作は Administrator 権限が与えられている user が行う必要があります。

※各 user の home ディレクトリ以下に対するファイルアクセス権限についてもご注意ください。

※この回答と同様のものが
http://www.wolfram.com/support/Systems/Windows/NT/StartupFails.html
に掲載されています。

[戻る]


[Q] セルの内容を変更できないようにしたいのですが

[Answer]

目的のセルを選択して、メニューから [Cell] -> [Cell Properties] を選択します。そのなかの [Cell Editable] のチェックマークをはずしてください。

[戻る]


[Q] グラフィックス中の点の軌跡を知ることはできますか?

[Answer]

読み込んだグラフィックスの点の軌跡などを調べるには、マウスを使うことで簡単に行うことができます。まず、マウスでグラフィックスを選択します。次に Controlキーを押下し続けるとカーソルが十字にかわります(ノートブックの右下の領域に座標が表示されます)。そのままマウスの左ボタンでドラッグしてみてください。ドラッグしている軌跡が点線で表示されます。ドラッグが終わったらマウスの右ボタンを一度クリックし [Copy] を選びます。
次のセルでペーストを選択すれば、いま辿った点の軌跡のリストがペーストされます。

[戻る]


[Q] 3D画像をマウスでドラッグしながら回転させたいのですが

[Answer]

現在の Ver 3.0.x の Mathematica では、ノートブック上で立体画像をダイナミックに回転させることはできません。次期バージョンでは、そのような操作を可能にするパッケージが開発されていますので、それを期待してください。
なお、Java を用いて Web ブラウザ上で回転することができるようにするためのサンプルが有志によって開発されています。弊社リンクページを参照してください。

[戻る]


[Q] MacOS 8.x を使っています。ときどきフォントが正しく表示されません。

[Answer]

MacOS 8.x 上の Mathematica 3.0.1 について、フォントに関するいくつかのバグが報告されています。現在では、フォント用の修正パッチが用意されていますので、ご利用ください。

http://www.wolfram.com/support/Systems/Macintosh/FE/index.html

http://www.wolfram.com/support/Systems/Macintosh/LatestFonts.html (修正パッチ)

[戻る]


[Q] たとえば Sqrt[3] を入力して、毎回その近似値を返すように出力を調整したい

[Answer]

Kernel からの出力式を調整するには、Mathematica の内部変数 $Post に制御する関数を与えてください。たとえばこの質問にあるような場合では、

In[1]:= $Post := N[#, 20]&  (* 20桁の近似値で出力 *)

としてください。これで、

In[2]:= Sqrt[3]

Out[2]:= 1.7320508075688772935

という形で出力されます。

[戻る]


[Q] Simplify[ ( x^2 + Sqrt[2]*x^2 )^(1/2) ] を実行しても簡単化されません

[Answer]

一般に、数式の簡単化には、式に対して何らかの複雑さを表す指標が必要となります。Mathematica の Simplify もまたそのような指標に基づいて簡単化を施します。

つまり、この場合は Mathematica が通常(デフォルト)で所持している指標に適さないパターンであるために簡単化が行えなかったのです。しかし、Simplify には複雑さの指標をユーザーが定義するためのオプションである ComplexityFunction が用意されています。次のようにこのオプションを与えて実行してみてください。

In[1]:= Simplify[ (x^2 + Sqrt[2]*x^2)^(1/2) , ComplexityFunction -> ( Count[ {#1}, a_*x_^n_ , Infinity ]& ) ]

Out[1]:= Sqrt[ 1 + Sqrt[2] ] * Sqrt[ x^2 ]

In[2]:= PowerExpand[ % ]

Out[2]:= Sqrt[ 1 + Sqrt[2] ] * x

[戻る]


[Q] Mathematicaで作ったグラフィックスを Adobe Illustrator で編集したい

[Answer]

Mathematica では、グラフィックスの保存をいろいろな形式でサポートしています。保存するには、Display 関数をを用いるか、[Edit]メニューから[Edit Selection As]を選択してください。

しかし、Adobe Illustrator 形式(拡張子 *.ai)で保存したファイルを Illustrator で開こうとすると失敗します。これは Mathematica 側のバグ(FrontEnd が出力するファイル中の改行コードが正しくない)です。また、このバグに対する修正パッチなどは現在ありません。代替手段としては、グラフィックスを EPS (Encapsulated Post Script) で保存してください。

または、下記の Mathematica 関数を定義して実行してください:

In[1]:= IllustratorPostprocess[infile_String,  outfile_String] :=
                 Module[{stream = OpenWrite[outfile],lines},
              lines=Map[#<>"\n"&, Map[StringReplace[#,{"\\012"->"\n","\\015"->"\n"}]&,
      ReadList[infile,Record]]];
              Scan[WriteString[stream,#]&,lines];
                   Close[stream]
              ]

しかしながら、この修正方法はまだ完全にテストされているわけではないので、中には対応できないものもあるかもしれません。

[戻る]


このFAQについての御質問は弊社Mathematica担当まで
  Copyrights (c) 1998-1999 CAT Inc., All rights reserved.