11月10日 第5回 Enjoy Mathematica
(* 定数の定義 *)
a = 3
(* 一度定義するとその定数はその値のまま *)
a + 8
(* 定数の再定義 *)
a = 5
a + 5
(* べき乗 *)
a^2
(* 式の足し算 *)
y1=x^2 + 4*x+1 ;
y2 = 8*x +1 ;
y1 + y2
(* 関数の定義 *)
f[x_] := x^2
(* 関数の利用 1 *)
f[5]
(* 関数の利用 2 ―文字数 1― *)
f[a+b]
(* 関数の利用 3 ―関数― *)
f[f[1+x]]
(* 微分 ―導関数を求める― *)
D[f[x], x]
(* 積分 *)
Integrate[f[x], x]
(* pを100桁表示 *)
Pi
N[Pi, 100]
(* 解を求める *)
Solve[x^2+x == a, x]
(* 多項式の因数分解 *)
Factor[x^99+y^99]
(* 式の展開 *)
Expand[%]
(* 式を簡単な形にする *)
Factor[%]
Simplify[%]
Integrate[1/(x^4-1), x]
D[%, x]
Simplify[%]
(* 微分方程式を解く *)
DSolve[ D[ x[t],t,t] + x[t]==0, x[t], t ]
(* グラフを描いてみよう (いろいろパラメーターを変えてみる)*)
(* 描画 *)
Plot[Sin[x], {x, -Pi, Pi}];
Plot[Sin[Tan[x]], {x, -Pi, Pi}];
Plot[Sin[Tan[x]-Tan[Sin[x]]], {x, -Pi, Pi}];
Plot[Tan[Sin[x]]-Sin[Tan[x]], {x, -Pi, Pi}];
Plot[(Tan[Sin[x]]-Sin[Tan[x]])/x, {x, -Pi, Pi}];
Plot[(Tan[Sin[x]]-Sin[Tan[x]])/x^7, {x, -Pi, Pi}];
(* ランダム関数 *)
m=Table[Random[ ], {5}, {2}]
ListPlot[m]
(* 再度上記命令の実行、Shift+Enter *)
(* リストの値が変化し、グラフも変化する *)
m=Table[Random[ ], {5}, {2}]
ListPlot[m]
(* mとおいた時点で行列になっている *)
m = Table[Random[ ], {10}, {10}]
ListPlot[Abs[Eigenvalues[m]]]
m = Table[Random[ ], {100}, {100}];
ListPlot[Abs[Eigenvalues[m]]]
(* どんな図形 ? *)
Plot3D[Sin[x y], {x, 0, 4}, {y, 0, 4}]; (* 注 xとyの間に スペース が必要 *)
ParametricPlot[{Cos[3t], Sin[5t]}, {t, 0, 2Pi}];
ParametricPlot3D[{r Cos[t], r Sin[t], 0.3 + r^2 Sin[4t+Sin[3 Pi r]]}, {r, 0, 0.5}, {t, 0, 2Pi}, PlotPoints -> {40, 80}, BoxRatios -> {1, 1, 0.3}];
(* ↓↓ rの値を大きくしてみると *)
ParametricPlot3D[{r Cos[t], r Sin[t], 0.3 + r^2 Sin[4t+Sin[3 Pi r]]}, {r, 0, 3}, {t, 0, 2Pi}, PlotPoints -> {40, 80}, BoxRatios -> {1, 1, 0.3}];
DensityPlot[Abs[Gamma[x+y I]], {x, -5, 4}, {y, -2, 2}, PlotPoints -> {100, 50}, Mesh -> False, PlotRange -> {0, 4}, AspectRatio -> Automatic];
(* 3Dアニメーション表示 *)
Animate[Plot3D[Sin[x y], {x, -n, n}, {y, -n, n}], {n, 1, 3, 0.2}];
Animate[ContourPlot[Sin[x^2+y^2] Cos[(x-n)^2+y^2], {x, -2, 2}, {y, -2, 2}, PlotRange -> {-1, 1}], {n, -2, 2, 0.2}]
(* 表示の色を変えてみる −RGBColorの値を変える− *)
Plot[Cos[x^2]-x Sin[x], {x, 0, 4}];
Show[Graphics[Table[{RGBColor[0, x/4., 1. - x/4.], Point[{x, Cos[x^2]-x Sin[x]}]}, {x, 0, 4, .01}]], Axes -> Automatic]
(* ヘルプの使い方 *)
? Plot
?? Plot
? *Plot*
(* 解いてみよう!
例1 微分方程式
y' = x^2 但しy(0) = 3 *)
DSolve[y'[x]==x^2, y[x], x]
DSolve[{y'[x]==x^2, y[0]==3}, y[x], x]
(* 例2 微分方程式
y'' + 3y' - 4y = 0 但しy(0) = 1, y'(0) = -1
y'' + 4y' + 20y = 0 但しy(0) = 1, y'(0) = 0 *)
DSolve[{y''[x]+3y'[x]-4y[x]==0, y'[0]==-1, y[0]==1}, y[x], x]
Simplify[%]
DSolve[{y''[x]+4y'[x]+20y[x]==0, y'[0]==1, y[0]==1}, y[x], x]
(* 例3 バネの運動 その1 *)
図のように質量mの小物体aがx軸上にあり、バネ定数k、自然長lの軽いバネで壁に結びつけられて静止している。そこへ、同じ質量mの小物体bがx軸上左側から速度vでaと完全弾性衝突をする。衝突した時刻をt = 0、衝突した場所をx = 0として以下の問いに答えよ。ただし、摩擦は無視し、運動はx方向に限られ、またバネの伸び縮みの大きさはlに比べて十分小さいものとする。(簡便のため単位は略す。)
DSolve[{m x''[t] == -k x[t], x'[0]==v, x[0]==0}, x[t], t]
sol=NDSolve[{2 x''[t] == -4 x[t], x'[0]==5, x[0]==0}, x[t], {t, 0, 10}]
Plot[Evaluate[x[t] /. sol], {t, 0, 10}]
(* 例4 バネの運動 その2 *)
図のように質量mの小物体a、bがx軸上にあり、バネ定数k、自然長lの軽いバネで結びつけられて釣り合いの位置に静止している。そこへ、同じ質量mの小物体cがx軸上左側から速度vでbと完全弾性衝突をする。衝突した時刻をt = 0、衝突した場所をx = 0として以下の問いに答えよ。ただし、摩擦は無視し、運動はx方向に限られ、またバネの伸び縮みの大きさはlに比べて十分小さいものとする。(簡便のため単位は略す。)
DSolve[{ m xa''[t] == -k (xa[t] - xb[t] -l), m xb''[t] == -k (xb[t] - xa[t] +l), xa'[0]==0, xb'[0]==v, xa[0]==l, xb[0]==0}, {xa[t], xb[t]}, t]
(* differential equations *)
eqr= m D[xa[t], t, t] + k (xa[t] - xb[t] -l);
eql = m D[xb[t], t, t] + k (xb[t] - xa[t] +l);
(* solving the differential equations *)
generalsol = DSolve[{eqr==0, eql==0}, {xa[t], xb[t]}, t]
(* definition *)
tosincos[ x_] := Simplify[x /. {Exp[ I*t_ ] -> ( Cos[t] +I*Sin[t]), Exp[ -I*t_ ] -> ( Cos[t] -I*Sin[t]) } ];
x1gn = tosincos[ xb[t] /. generalsol[[1]] ]
x2gn = tosincos[ xa[t] /. generalsol[[1]] ]
(* initial conditions *)
consts = Solve[ { ( x1gn /. { t ->0 } )==0, ( x2gn /. { t ->0 } )==l, ( D[ x1gn, t] /. { t ->0 } )==v, ( D[ x2gn, t] /. { t ->0 } )==0 }, { C[1], C[2], C[3], C[4]}] ;
(* solutions with initial conditions *)
x1sol = Simplify[ x1gn /. consts[[1]] ]
x2sol = Simplify[ x2gn /. consts[[1]] ]
(* motion of center of mass *)
( x1sol + x2sol )/ 2
(* relative motion *)
Simplify[ x2sol - x1sol ]
(* plot *)
values := { m ->2, k->4, l ->3, v ->5 } ;
Plot[ { ( x1sol + x2sol )/ 2 /. values, x2sol - x1sol /. values} , {t, 0, 10}]
Plot[ { x1sol /. values, x2sol /. values} , {t, 0, 10} ]
Last updated on Nov. 16 1999