• ベストアンサー

Mathematicaで条件を変えてプロット

Mathematicaで y(x) = ax + b といった式をaとbの条件を変えて同じグラフにプロットするにはどうしたらいいのでしょうか? 例えば、a=1 b=2、a=2 b=3についてそれぞれプロットするには y1(x) = x + 2 y2(x) = 2x + 3 とそれぞれ定義して同じグラフにプロットすることは出来るのですが、 条件が多い場合、また式が煩雑な場合となると大変になるので 簡単にする方法があれば教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

次のような,プログラムを作れば良いでしょう。 まず,定数部分(a,bなど)を変数として,式を作り, その後,xを変数とする式を作れば良いのです。 例えば,y=ax+bについて考えて見ましょう。 y=2x+3 y=4x+5 y=6x+7 という3つの関数を考え,それぞれに3つのx(x=1,2,3)を代入したとき, yの値を返すプログラムを作ります。 私はMaximaを利用していますので,Lispを使って,プログラムを示しました。 しかし,考え方はMathematicaでも,他の数式ソフトでも同様です。 その例を以下に示しました。 for i:1 thru 3 do( M1 : matrix ( [2, 3], [4, 5], [6, 7] ), [a,b]: [M1[i, 1], M1[i, 2]], define (f(x), a*x+b), y:f(x), display(y), for j:1 thru 3 do( lst:[1,2,3], x:lst[j], y:f(x), display([x,y]), kill(x,y) ) ); ここでは,まず [2,3] [4,5] [6,7] というデータ行列Mを,a,bに読み込ませています。 それぞれのa,bについて,define文で,関数f(x)を定義します。 ここで,必須ではありませんが,結果が見やすいように, y=f(x) の定義をして,display文で出力します。 それぞれのy=f(x) について,lst(リスト)文で, データ [1,2,3] をxに読み込ませて,最終結果を出力します。 これは3行1列のmatrix文 [1] [2] [3] でも可能です。 a,bについて,3回の繰り返し計算(最初の行のfor i:1 thru 3)を行い,その1回ごとに,xの代入計算(真ん中のfor j:1 thru 3 )行います。 このプログラムではデータ行列をプログラムの中に組み込みましたが,別のファイルから読み込ませることもできるでしょう。 最終的にグラフにプロットが目的のようですが,こうして(x,y)が求まれば,それをプロットすればよいのでは? Maximaによる出力結果は以下のようなものです。 y=2x+3 [x,y]=[1,5] [x,y]=[2,7] [x,y]=[3,9] y=4x+5 [x,y]=[1,9] [x,y]=[2,13] [x,y]=[3,17] y=6x+7 [x,y]=[1,13] [x,y]=[2,19] [x,y]=[3,25] (%o2) done

panacafe
質問者

お礼

解決しました。 ありがとうございます。