Ngo Van Thanh, IOP 11/2011
Phần II. Tin học ứng dụng
Chương 2: Sử dụng phần mềm Mathematica (LT: 10, TH:10) Cấu trúc lệnh cơ bản Xử lý đồ họa Các phương pháp tính số Lập trình trên Mathematica Các gói chương trình chuyên dụng
Website:
http://www.iop.vast.ac.vn/~nvthanh/cours/comp/math/ Wolfram website
http://reference.wolfram.com/mathematica/guide/Mathematica.html
The University of North Carolina
http://facstaff.unca.edu/mcmcclur/Mathematica/
Salisbury University
http://facultyfp.salisbury.edu/despickler/personal/ClassroomResourcesMath.asp
2.1 Cấu trúc lệnh cơ bản File văn bản : được chia thành các cell
Kiểu của cell : Title, subtitle, …, text, Input (ngầm định) … Nhiều câu lệnh trên cùng một cell; gộp các cell thành một nhóm Double-Click trên nhóm celll để mở rộng hoặc đóng nhóm.
Có thể chọn nhiều Cell để chạy đồng thời. Kết quả thực hiện cho mỗi câu lệnh được ghi ra trong cell Output : Out[n], số thứ tự n trong Out[…] tương ứng với cell Input In[n]. Tất cả kết quả tính toán được ghi lại trên bộ nhớ của máy tính cho đến khi tắt chương trình Mathematica, hoặc sử dụng lệnh Clear[…] Sau khi sửa câu lệnh, phải chạy lại câu lệnh đó bằng “SHIFT+ Enter”
Thực hiện các câu lệnh trong cell : SHIFT+ Enter
Phân biệt chữ hoa và chữ thường, không được dùng ký tự gạch dưới : “_” Tên Hàm được ghép nhiều từ với nhau, chữ cái đầu tiên của mỗi từ được viết hoa
Vd:
Quy tắc tên biến, hàm…:
ListPlot[…], Solve[…], FindRoot[…]
(…) : nhóm biểu thức – tương tự như các ngôn ngữ lập trình khác
a*(b+c)
[…] : đối số của hàm số :
Sin[x]; Plot[5 x – 2,{x,1,2}] {…} : tập hợp các phần tử; nhóm các câu lệnh; mảng/ma trận…
{1,2,3}; {a1 x+b1 y==0, a2 x+b2 y==0}
[[…]] : chỉ số mảng :
a[[1]]; b[[1]][[2]]
Quy tắc móc, ngoặc (…) , […], {…}, [[…]]
Ký hiệu TT. Quan hệ Ký hiệu TT. Logic Ký hiệu
EQ NOT + == !
NEQ AND != &&
GT OR > ||
GEQ - * or “space” / >=
LT ^ <
LEQ >=
Pi hoặc π ~ 3.14159 E : cơ số e ~ 2.71828 EulerGamma : hằng số Euler γ ~ 0.577216 Degree : radian của 1 độ = π/180
Toán tử: Phép toán Cộng Trừ Nhân Chia Luỹ thừa Hằng số:
Sin[x]
Exp[x]
KroneckerDelta[a,b]
Cos[x]
Log[x]
Tan[x]
Log[x,b]
Cot[x]
Log10[x]
Hàm số cơ bản:
DiracDelta[a,b] HeavisideTheta[a,b] Gamma
Erf
Sinh[x]
Abs[x] Min[x] Max[x] Im[z] Re[z]
BesselJ Prime[n] Factorial[N] ~ N! RandomInteger[imin,imax]
Cosh[x]
Conjugate[z]
RandomReal[x
min,x
max]
Tanh[x]
Coth[x]
ArcSinh[x]
Arg[z] Abs[z] Plus[a,b,…]
NormalDistribution [ µ,σ] Mean[list] Variance[dist]
ArcCosh[x]
Times[a,b,…]
ArcTanh[x]
Power[a,b,…]
ArcCoth[x]
Mod[a,b]
ArcSin[x] ArcCos[x] ArcTan[x] ArcCot[x]
Palettes:
Vd:
InputForm : {{1, 2}, {3, 4}}
Palettes
2.2 Xử lý đồ họa Vẽ đồ thị theo hàm số
min, x
max},
Đồ thị hàm 1 biến : Plot[{expr1, expr1, … }, {x, x Opt1->{Values of Opt1}] exprN : các biểu thức toán học là một hàm theo x {x, x
max} : khoảng giá trị của biến số x
min, x
20
10
4
3
2
1
1
2
3
10
20
30
Plot[x^3 + 3 x^2 + x - 9, {x, -4, 3}]
Export đồ thị ra file
Nên chọn EPS hoặc WMF
Chọn hình vẽ Click chuột phải -> “Save Graphics As” Chọn EPS -> Save
Export đồ thị ra file
Copy trực tiếp sang Winword hoặc PowerPoint
Chọn hình vẽ Vào menu “Edit” -> “Copy As” -> Chọn “Metafile”
Trên Winword hoặc PowerPoint nhấn Ctrl + v
1.0
0.5
2
10
4
6
8
0.5
1.0
Options :
AxesLabel -> {“x_label”, “y_label”}
y
20
10
x
4
3
2
1
1
2
3
10
20
30
Plot[x^3 + 3 x^2 + x - 9, {x, -4, 3}, AxesLabel -> {“x”, “y”}]
PlotLabel -> {“plot label”}
Plot[x^3 + 3 x^2 + x - 9, {x, -4, 3}, PlotLabel -> f[x]]
LabelStyle -> {FontFamily -> "Times", FontSize -> 18}
Plot[x^3 + 3 x^2 + x - 9, {x, -4, 3}, PlotLabel -> f[x], AxesLabel -> {Style[“x”,Italic], “y”} LabelStyle -> {FontFamily -> "Times", FontSize -> 16}]
AxesOrigin -> {xO, yO}
20
20
10
10
4
3
2
1
1
2
3
0
10
20
10
30
20
3
2
1
0
1
2
3
Plot[x^3 + 3 x^2 + x - 9, {x, -4, 3}, AxesOrigin -> {-4, -30}]
Mesh -> 30; MeshStyle -> {Red,PointSize[Medium]}
Plot[x^3 + 3 x^2 + x - 9, {x, -4, 3},
20
10
4
3
2
1
1
2
3
10
20
30
Mesh -> 20, MeshStyle -> {Red, PointSize[Medium]]
max},{y
min, y
min, x
max}}
50
25
40
20
15
30
10
5
20
0.5
1.0
1.5
2.0
10
0.0
0.5
1.0
1.5
2.0
PlotRange -> {Full, Automatic} hoặc {{x Plot[Exp[x^2] + x -4, {x, 0, 2}, PlotRange -> {0, 50}]
,Ticks -> None]
Ticks -> None / {t1, t2, t3, …} Plot[Sin[x], {x, 0, 10}
1
2
3
1
Plot[Sin[x], {x,0,10}, Ticks -> {{0,Pi,2 Pi,3 Pi},{-1,1}}]
1.0
1.0
0.5
0.5
10
4
2
6
8
0.5
2
4
6
8
10
1.0
0.5
AspectRatio -> 1/2]
1.0
AspectRatio -> Automatic hoặc y/x Plot[Sin[x], {x, 0, 10}, Plot[Sin[x], {x, 0, 10}, AspectRatio -> 2/1]
Epilog -> {obj1, obj2,… } : phía trước hình Prolog -> {obj1, obj2,… } : phía sau hình Plot[Sin[x],{x, 0, 10}, Epilog -> { {Dashed, Blue, Line[{{Pi/2,Sin[Pi/2]}, {Pi/2,0}}]}, Text[Sin[x], {Pi,0.5}]}]
Drawing Tools
Drawing Tools : chỉ dùng cho đồ thị 2 chiều
Vẽ nhiều hàm trên một đồ thị
1.0
PlotStyle -> {Red,{Blue, Dashed}}]
0.5
8
2
4
6
10
0.5
1.0
Plot[{Sin[x], Sin[2 x]},{x, 0, 10},
1.0
0.5
1
2
3
4
5
6
0.5
1.0
Show[graph1,graph2, … , Options -> Values] vd. Hàm
min, x
max}, {y, y
min, y
max},
Đồ thị 3 chiều
Plot3D[{exprs.}, {x, x Opt1 -> {Values of Opt1}]
Plot3D[Sin[2 x + y^2], {x, -3, 3}, {y, -2, 2}]
BoxRatios -> {x, y, z}
Plot3D[Sin[2 x + y^2], {x, -3, 3}, {y, -2, 2}, BoxRatios -> {1, 1, 1/2}]
ColorFunction -> (White &)
Plot3D[Sin[2 x + y^2], {x, -3, 3}, {y, -2, 2}, ColorFunction -> (White)]
MeshShading -> {{None, None}} MeshStyle -> Thick
1.0
0.5
2
0.0
1
0.5
1.0
0
2
1
0
2
2
Plot3D[Sin[x + y], {x, -3, 3}, {y, -2, 2}, MeshShading -> {{None, None}}, MeshStyle -> Thick]
Vẽ đồ thị các điểm từ bảng dữ liệu
ListPlot[{list1, list2}, Opts -> Options] List : {{x1, y1}, {x2, y2}, … } ListPlot[Table[{n, Sin[n]},{n, 0, 10, 0.5}]]
Table[{n, Sin[n]},{n, 0, 10, 0.5}]
1.0
0.5
2
4
6
8
10
0.5
1.0
{{0.,0.}, {0.5, 0.479426}, {1., 0.841471}, {1.5, 0.997495}, {2., 0.909297}, {2.5, 0.598472}, {3., 0.14112}, {3.5, -0.350783}, {4., -0.756802}, {4.5, -0.97753}, {5., -0.958924}, {5.5, -0.70554}, {6., -0.279415}, {6.5, 0.21512}, {7., 0.656987}, {7.5, 0.938}, {8.,0.989358}, {8.5, 0.798487}, {9., 0.412118}, {9.5, -0.0751511}, {10., -0.544021}}
1.0
0.5
2
4
6
8
10
0.5
1.0
Joined -> True ; Mesh -> Full; ListPlot[Table[{n, Sin[n]},{n, 0, 10, 0.5}], Joined -> True, Mesh -> Full]
MeshStyle -> {PointSize[Large], Red} PlotStyle -> {Thick, Green}
1.0
0.5
2
4
6
8
10
0.5
1.0
ListPlot[Table[{n, Sin[n]},{n, 0, 10, 0.5}], Joined -> True, Mesh -> Full, PlotStyle -> {Thick, Green}, MeshStyle -> {PointSize[Large], Red}]
1.0
0.5
2
4
6
8
10
0.5
1.0
InterpolationOrder -> 3 ListPlot[Table[{n, Sin[n]},{n, 0, 10, 0.5}], Joined -> True, Mesh -> Full, InterpolationOrder -> 3]
Đọc từ file dữ liệu
Import[“file","Table"]
li1 = Import[“D:/math/data.dat","Table"]
{{0.,0.},{0.5,0.479426},{1.,0.841471},{1.5,0.997495}, {2.,0.909297},{2.5,0.598472},{3.,0.14112}, {3.5,-0.350783},{4.,-0.756802},{4.5,-0.97753}, {5.,-0.958924},{5.5,-0.70554},{6.,-0.279415}, {6.5,0.21512},{7.,0.656987},{7.5,0.938},{8.,0.989358}, {8.5,0.798487},{9.,0.412118},{9.5,-0.0751511}, {10.,-0.544021}}
ListLinePlot[{list1, list2}, Opts -> Options]
1.0
10
6
4
2
8
0.5
2
4
6
10
8
0.5
1.0
PlotMarkers -> Automatic, InterpolationOrder -> 2]
Vẽ đồ thị các đoạn thẳng từ bảng dữ liệu ListLinePlot[{l1,l2}, Mesh -> Full, 1.0 0.5 0.5 1.0 ListPlot[{l1,l2}, Mesh -> Full, PlotMarkers -> Automatic,
Joined -> True, InterpolationOrder -> 2]
Các loại đồ thị khác:
ListPlot3D[{list1, list2}, Opts -> Options]
List : {{x1, y1, z1}, {x2, y2, z2}, … }
data = Table[Sin[j^2+i],{i,0,Pi,Pi/5},{j,0,Pi,Pi/5}]; ListPlot3D[data, InterpolationOrder -> 3]
ListPointPlot3D[{list1, list2}, Opts -> Options]
List : {{x1, y1, z1}, {x2, y2, z2}, … }
1.0
0.5
30
0.0 0.5 1.0
20
10
10
20
30
data = Table[Sin[j^2+i],{i,0,Pi,0.1},{j,0,Pi,0.1}]; ListPointPlot3D[data]
min, x
max},{y, y
min, y
max}]
DensityPlot[f, {x, x
1},{x2, y
2}, …}]
1, f
2, f
Giá trị càng lớn thì có màu càng sáng ListDensityPlot[{{x1, y DensityPlot3D[…] và ListDensityPlot3D[…] DensityPlot[Sin[x]Sin[y],{x,-4,4},{y,-3,3}]
Plot3D[Sin[x]Sin[y],{x,-4,4},{y,-3,3}]
min, x
max},{y, y
min, y
max}]
ContourPlot[f, {x, x
min,x
max},{y,y
min,y
max}]
1},{x2, y
2}, …}]
2, f
1, f
ContourPlot[{{f1 == g1},{f2 == g2}},{x,x Giá trị càng lớn thì có màu càng sáng ListContourPlot[{{x1, y ContourPlot[Sin[x]Sin[y],{x,-4,4},{y,-3,3}]
ContourPlot[Sin[x]Sin[y]==0.5,{x,-4,4},{y,-3,3}]
3
2
1
0
1
2
3
4
2
2
4
0
Plot3D[Sin[x]Sin[y],{x,-4,4},{y,-3,3},PlotRange->{0,0.5}, ClippingStyle->None, BoundaryStyle->{Thick,Blue}]
min, x
VectorPlot[{vx, vy}, {x, x
max},{y, y max},{y,y
max}] max},{z,z
min,x
min,z
max}]
min, y VectorPlot3D[{vx,vy,vz},{x,x min,y ListVectorPlot[{{{x1, y1},{vx1, vy1}},… }] ListVectorPlot3D[{{{x1, y1, z1},{vx1, vy1, vz1}},… }]
3
2
1
0
1
2
3
3
2
1
0
1
2
3
VectorPlot[{x,-y},{x,-3,3}, {y,-3,3}]
min, x
max},{y, y
min, y
max}]
StreamPlot[{vx, vy}, {x, x
ListStreamPlot[{{{x1, y1},{vx1, vy1}},… }]
3
2
1
0
1
2
3
3
2
1
0
1
2
3
StreamPlot[{x,-y},{x,-3,3},{y,-3,3}]
2.3 Các phương pháp tính số Tính toán trên các biểu thức
--> kết quả :
Phép gán f = a x^2 + b x + c hoặc f = a x2 + b x + c f (x + d) --> kết quả : (d + x) (c + b x + a x2) Tính số (1/2) Sin[20] x
--> kết quả : 0.456473 x --> kết quả : 0.45647263 x
(1/2) Sin[20] x//N N[(1/2) Sin[20] x, 8] Các số hạng trong biểu thức
--> kết quả : y --> kết quả : z --> kết quả : g[a]
(x+y+z)[[2]] (x+y+z)[[-1]] f[g[a],g[b]][[1]] f[g[a],g[b]][[1,1]] --> kết quả : a
ReplacePart[a+b+c+d , 3 -> x^2] --> kết quả : a+b+x2+d
Khai triển biểu thức : Expand/ExpandAll
f = (1+x)^3 + Sin[(1+x)^3]
Expand[f]
TrigExpand[Sin[x+y]]
ExpandAll[f] Biểu thức lượng giác: --> Sin[x] Cos[y] + Cos[x] Sin[y]
Số phức : ComplexExpand[Sin[x],x]
--> Cosh[Im[x]] Sin[Re[x]] + i Cos[Re[x]] Sinh[Im[x]]
Đơn giản hoá : Simplify/FullSimplify
f = 1 + 3 x + 3 x^2 + x^3 + Sin[1 + 3 x + 3 x^2 + x^3]
-->
--> (1 + x)2
Simplify[f] Phân tích thừa số : Factor[] Factor[1 + 2x + x^2] Extension
Factor[2+2Sqrt[2]x+x^2] --> Factor[2+2Sqrt[2]x+x^2, Extension -> Sqrt[2]]
Biểu thức lượng giác:
Factor[Sin[x]^2+Tan[x]^2, Trig -> True] TrigFactor[Sin[x]^2+Tan[x]^2]
Đạo hàm riêng
n là bậc của đạo hàm
D[f, {x, n}] : D[f, {x, nx},{y, ny},…] : đạo hàm nhiều biến
D[Sin[x]/(a + x^2),x] D[Sin[x]/(a + x^2),{x,2}] NonConstants D[ a x^2, x, NonConstants -> {a}]
--> 2 a x + x2 D[a, x, NonConstants -> {a}]
Đạo hàm toàn phần
Dt[f, {x, n}] : n là bậc của đạo hàm Dt[f, {x, nx},{y, ny},…] : đạo hàm nhiều biến
--> a + x Dt[a,x] + Dt[b,x]
Dt[ a x + b,x] Dt[x^2 y, x, y] --> 2 x + 2y Dt[x,y] + 2x Dt[x,y] Dt[y,x] Constants Dt[ a x + b, x, Constants -> {b}]
--> a + x Dt[a, x, Constants ->{b}]
Derivative
--> Cos[x]
Sin’[x] : Derivative[1][Sin][x]
--> -Sin[x]
Sin’’[x] : Derivative[2][Sin][x]
f[x_, y_] := Sin[x] Cos[y];
Derivative[n1, n2,…][f] --> -Cos[x] Cos[y] Derivative[1, 2][f][x, y]
Giới hạn (Limit)
0] 0, Direction -> 1] 0, Direction -> -1]
Limit[expr., x -> x Limit[expr., x -> x Limit[expr., x -> x
--> ex
Limit[(1 + x/n)^n, n -> Infinity]
--> ∞ --> − ∞ Limit[Tan[x], x -> Pi/2, Direction -> 1] Limit[Tan[x], x -> Pi/2, Direction -> -1]
Direction
Assumptions Limit[ x^a,x ->Infinity, Assumptions -> a < 0] --> 0 Limit[ x^a,x ->Infinity, Assumptions -> a > 0] --> ∞
Tích Phân (Integrate) Integrate[f, x] Integrate[f, {x, xmin, xmax},{y, ymin, ymax},…]
Integrate[1/(x^3+1),x] -->
Integrate[1/(x^3+1),{x,0,1}] PrincipalValue
Phương pháp Riemann Integrate[Tan[x],{x,0,Pi}] --> Không hội tụ Phương pháp Cauchy Integrate[Tan[x],{x,0,Pi}, PrincipalValue -> True]
Tích Phân số (NIntegrate)
NIntegrate[f, {x, xmin, xmax}] NIntegrate[f, {x, xmin, xmax},{y, ymin, ymax},…]
--> 0.835649 NIntegrate[1/(x^3+1), {x, 0, 1}]
Integrate[1/(x^3 + 1), {x, 0, 1}] //Timing --> ??s NIntegrate[1/(x^3 + 1),{x, 0, 1}] //Timing --> ??s
Cận tích phân không phải là hằng số
NIntegrate[Sin[5x y+y^2] + 1,{x, -1, 1}, {y,-Sqrt[1-x^2], Sqrt[1-x^2]}]
NIntegrate[Sin[5x y+y^2] + 1,{y,-Sqrt[1-x^2], Sqrt[1-x^2]} ,{x, -1, 1}]
Exclusions
NIntegrate[1/Sqrt[x2+y],{x,-2,4},{y,-2,4}] NIntegrate[1/Sqrt[x2+y],{x,-2,4},{y,-2,4}, Exclusions -> (x2 + y == 0)]
--> 0.0
Số vòng lặp đệ quy (Recursive) • MinRecursion -> 0 • MaxRecursion -> Automatic NIntegrate[Exp[-100(x2+y2)],{x,-50,60},{y,-50,60}] NIntegrate[Exp[-100(x2+y2)],{x,-50,60},{y,-50,60}, MinRecursion -> 4] --> 0.0314159
Method -> "MonteCarlo"] Method NIntegrate[1/Sqrt[x2+y],{x,-2,4},{y,-2,4},
Tổng (Tích) Sum/NSum (Product/NProduct)
Sum[f, {i, imax}] Sum[f, {i, imin, imax},{j, jmin, jmax ,dj},…]
--> Sum[i^2,{i,1,n}]
--> Sum[i^3,i]
--> 3.09286 NSum[1/((k-20)^2+1),{k,0,∞}]
NSum[f, {i, imax, imax}] NSum[f, {i, imin, imax,di}] NSumTerms (NProductFactors) -> 15 NSum[1/((k-20)^2+1),{k,0,∞}, NSumTerms -> 30] --> 3.10462
Khai triển chuỗi luỹ thừa
Series[f, {x, x0, n}] Series[f, {x, x0, nx},{y, y0, ny},…]
--> Series[ Cos[x]/x,{x,0,10}]
--> Normal[%]
Series[ArcCos[x],{x,1,1},Assumptions->(x > 1)]
Assumptions Series[ArcCos[x],{x,1,1}]
Hệ số của số hạng bậc n trong chuỗi luỹ thừa
Series[ Cos[x]/x,{x,0,10}]
SeriesCoefficient[f, {x, x0, n}] SeriesCoefficient[f, {x, x0, nx},{y, y0, ny},…] SeriesCoefficient[ Cos[x]/x,{x,0,9}] -->
SeriesCoefficient[Cos[x]/x,{x,0,8}] --> ???
SeriesCoefficient[ Exp[-x],{x, 0, n}] -->
Assumptions
SeriesCoefficient[ Exp[-x],{x, 0, n}, Assumptions -> (n ≥ 0)]
Khai triển chuỗi Fourier FourierSeries[f, x, n}] FourierSeries[f, {x1, x2 , …},{n1, n2, …}]
với
FourierSeries[t/2, t, 3]
FourierParameters
{1,1}
{1,-2π}
{a, b}
Hệ số của số hạng bậc n trong chuỗi Fourier
FourierCoefficient[f, x, n}] FourierCoefficient[f, {x1, x2 , …},{n1, n2, …}]
FourierSeries[t/2, t, 3]
FourierCoefficient[t/2, t, 2] -->
FourierCoefficient[t/2, t, 3] --> ???
FourierParameters
--> {1,1}
{1,-2π} -->
--> {a, b}
Giải phương trình /hệ phương trình - (bất phương trình)
Solve[expr., vars, domain] domain : Reals, Integers, Complexes
sol = Solve[a x2 + b x + c == 0, x]
--> sol[[2]]
Hệ phương trình
x/.sol[[2]] -->
Solve[{expr1., expr1.,…}, {var1, var2, …}] Solve[{3x + 8y == 5, 5x + 2y == 7},{x,y}]
sol2 = Solve[{x2 + y2 == 1, x + y == a}, {x, y}]
sol2[[1]] x/.sol2[[2]] x/.sol2[[2, 1]] --> ??? --> ??? --> ???
Cách viết khác khi expr. có nhiều biểu thức logic
Solve[x2 + y2 == 1 && x + y == a, {x, y}] sol3 = Solve[{2x+3y == 4,3x-4y ≤ 5,x-2y > -21} ,{x,y},Integers]
x/.sol3 --> ???
Giải số các phương trình
NSolve[expr., vars, domain]
domain : Reals sol = NSolve[x^3 - 2x + 3 == 0,x]
--> x : Reals ; y : Complex
0},{y,y
0}}]
1
, f
2}, {{x,x 0}] 0, x 0, x
1}] min, x
max}]
Phương pháp Newton Phương pháp Secant --> -->
sol = NSolve[x^3 - 2x + 3 == 0,x,Reals] --> ??? NSolve[x^2+y^2==1 && x^4+y^4==2 && Element[x,Reals],{x,y}] FindRoot[{f FindRoot[f, {x, x FindRoot[f, {x, x FindRoot[f, {x, x
Kết thúc tính toán khi giá trị x vượt ra ngoài khoảng
Plot[Sin[x]+Exp[x],{x,-10,1}]
3
2
1
10 8 6 4 2
1
--> {x -> -0.588533}
FindRoot[Sin[x]+Exp[x]==0, {x,10}] FindRoot[Sin[x]+Exp[x]==0, {x,-10}] --> {x -> -9.4247}
FindRoot[Sin[x]+Exp[x]==0, {x,-3,-4,-2}] --> {x -> -3.09636}
ContourPlot[{x == 2y + 3Cos[x],y == x-4}, {x,0,15},{y,-5,15}, Frame -> False, Axes -> True,
15
10
5
2
4
6
8 10 12 14
5
LabelStyle -> Large, ContourStyle -> Thick]
FindRoot[{x == 2y + 3 Cos[x],y == x-4},{x,6},{y,2}] --> {x -> 5.6256, y -> 1.6256}
Giải phương trình (hệ pt) vi phân
DSolve[eqn., y, x] DSolve[{eqn1.,eqn2,…}, {y1,y2,…}, x] DSolve[eqn., y, {x1,x2,…}]
DSolve[y'[x] + y[x] == a Sin[x], y[x], x]
Phương trình vi phân có điều kiện biên
Phương trình vi phân bậc 2
DSolve[{y'[x] + y[x] == a Sin[x], y[0]==0}, y[x], x]
DSolve[y''[x] + 4y'[x] + 5y[x] == 0, y[x],x]
Phương trình vi phân phi tuyến
Hệ phương trình vi phân
DSolve[ y'[x] + x y'[x]^2 == 1, y[x], x]
Hệ phương trình vi phân có điều kiện biên
DSolve[{y'[x]== x^2y[x],z'[x]==5z[x]}, {y[x],z[x]},x]
DSolve[{y'[x]-4z[x]==Cos[x], y[x]+z[x]==1/2, y[Pi/2]==1/2},{y[x],z[x]},x]
Đạo hàm riêng
DSolve[3D[y[x1,x2],x1]+5D[y[x1,x2],x2]==x1 , y[x1,x2],{x1,x2}]
Đạo hàm riêng bậc 2
Đạo hàm riêng có điều kiện đầu
DSolve[3D[y[x1,x2],{x1,2}]-12D[y[x1,x2],{x2,2}]==1, y[x1,x2],{x1,x2}]
DSolve[{2D[y[x1,x2],x1] + 7D[y[x1,x2],x2]==3, y[x1,0]==x1},y[x1,x2],{x1, x2}]
Giải số phương trình (hệ pt) vi phân NDSolve[eqns., y, {x,xmin,xmax}] NDSolve[eqns., y, {x,xmin,xmax},{t,tmin,tmax}] NDSolve[eqns., {y1,y2}, {x,xmin,xmax}]
Bắt buộc phải có điều kiện đầu hoặc điều kiện biên
nsol = NDSolve[{y'[x]-y[x]Cos[x+y[x]]==0,y[0]==1} ,y,{x,0,30}] y -> InterpolatingFunction[{{0.,30.}},<>]
1.0 0.8 0.6 0.4 0.2
5
10 15 20 25 30
Plot[y[x]/.nsol,{x,0,30}, PlotRange->All, LabelStyle->Large, PlotStyle->Thick] Plot[y[x]/.nsol,{x,-10,10}] --> ???
Phương trình vi phân bậc 2
NDSolve[{y''[x]+y[x]==0,y[0]==1,y'[0]==0},y,{x,10}]
Hệ phương trình vi phân
{x, y},{t,0,10}]
NDSolve[{x'[t]==y[t], y'[t]==-x[t], x[0]==1,y[0]==0}, x -> InterpolatingFunction[{{0.,10.}},<>] y -> InterpolatingFunction[{{0.,10.}},<>]
Plot[???] Plot[???]
Phương trình đạo hàm riêng
điều kiện biên:
dsol = NDSolve[{D[u[t,x], t] == 0.5 D[u[t,x],x,x]+ u[t,x]D[u[t,x],x], u[t,-Pi] == u[t, Pi]==0, u[0,x] == Sin[x]}, u, {t,0,2},{x,-Pi, Pi}]
u -> InterpolatingFunction[{{0.,2.},{-3.14,3.14}},<>]
Plot3D[???]
v = {x, y, z}
v[[2]] = ??? ; v + a = ???
Vector – Ma trận Vector/mảng 1 chiều : v2={x2,y2,z2};
--> {x1 x2,y1 y2,z1 z2} v1={x1,y1,z1}; v1*v2
m = {{x1, y1},{x2,y2}}
m//MatrixForm
m[[2,1]] = ???
Tích vector
Mảng 2 chiều/Ma trận : MatrixForm Tích vô hướng a*b -->
a.b -->
Table
Table[i^2, {i,10}] --> {1,4,9,16,25,36,49,64,81,100} Table[i+2 j,{i,4},{j,3}]//MatrixForm
Table[expr., {i,imax}] Table[expr., {i,imin,imax}] Table[expr., {i,imin,imax, di}] Table[expr., {i,imin,imax},{j,jmin,jmax}]
Table[ai,j,{i,2},{j,2}]//MatrixForm
Array
--> f[i] --> f[i,j]
Array[f,{3,2}] {{f[1,1],f[1,2]},{f[2,1],f[2,2]},{f[3,1],f[3,2]}}
Array[f, n] Array[f, {n1,n2}]
Table[???] Array[b##&, {3,3}]
Table[???]
Các hàm liên quan đến ma trận
Dimensions[] --> kích thước của một ma trận
; Dimensions[B] --> {?,?}
Inverse[A] --> A-1 Dimensions[A] --> {3,3} Inverse --> Nghịch đảo ma trận
Det --> Định thức
Det[A] --> 21
Tr[A] --> 13
--> Vết của ma trận tác dụng bởi hàm f
--> {1,5,7}
--> Luỹ thừa bậc n của ma trận m
--> MatrixPower[A, 2]
--> Ma trận chuyển vị
Tr[list] --> Vết của một ma trận Tr[list, f] Tr[A,Times] --> ??? Tr[A,List] MatrixPower[m, n] Transpose[m]
Transpose[A] -->
{0.656382, 0.0181093, 0.000509145}
--> {0.656382, 0.0181093}
Eigenvalues[m, 2] Eigenvalues[m, -2] --> ???
Eigenvalues[m] --> liệt kê trị riêng của ma trận Eigenvalues[m] Eigenvalues[m, k] --> chỉ in ra k trị riêng của ma trận Eigenvectors[m] --> liệt kê vector riêng của ma trận Eigenvectors[m, k] --> chỉ in ra k vector riêng của ma trận
Eigenvectors[m, 2] -->
Eigensystem[m]
{0.656382, 0.0181093, 0.000509145}
Eigensystem[m, 1]
Eigensystem[m] --> liệt kê trị riêng và vector riêng của ma trận Trị riêng : Eigensystem[m][[1]] Vector riêng : Eigensystem[m][[2]] Eigensystem[m, k] --> liệt kê k trị riêng và k vector riêng của ma trận {{0.656382},{{-0.703526,-0.549364,-0.450832}}}
DiagonalMatrix[list]
Tạo ma trận với các phần tử của list sắp xếp trên đường chéo
DiagonalMatrix[list,k]
Tạo ma trận với các phần tử của list sắp xếp trên đường chéo thứ k
--> DiagonalMatrix[{a,b,c}]
DiagonalMatrix[{a,b,c},2]
IdentityMatrix[n]
--> Ma trận đơn vị bậc n
--> IdentityMatrix[4]
2.4 Lập trình trên Mathematica Định nghĩa hàm
x, y : đối số hình thức exprs. : liệt kê các biểu thức, các câu lệnh của Mathematica.
f[x_,y_,…]:=(exprs.)
--> --> ???
f[a] f[Pi] f[x]*Sin[x] -->
f[x_]:= Sin[x] + Cos[x] f[a_,b_]:= x/.Solve[a x^4+ b x == 0,x]
-->
f[1,1] {-1., 0., 0.5+ i 0.866025, 0.5- i 0.866025}
f[a_,b_,c_]:= x/.Solve[a x^2 + b x + c == 0,x] f[0] f[0,1] f[0,1,1] --> --> --> ??? ??? ???
Biến cục bộ
u, v : biến cục bộ exprs. : liệt kê các biểu thức, các câu lệnh của Mathematica.
f[x_,y_,…]:=Module[{u,v,…},expr1;expr2;…]
g[a_]:= Module[{b}, b = Sin[a]*Cos[a]; a2 b] --> --> ??? g[x] g[b]
SetOptions
SetOptions[function, option->value,…]
Plot[Sin[x],{x,0,30}, PlotRange->All, LabelStyle->Large, PlotStyle->Thick]
SetOptions[Plot,PlotRange->All, LabelStyle->Large, PlotStyle->Thick] Plot[Sin[x],{x,0,30}]; Plot[Cos[x],{x,0,30}]…
max] min,i
max,di]
Cấu trúc lặp Do[expr, {i,i Do[expr, {i,i
t = 2; Do[t = t^2; Print[t] ,{3}] --> {4, 16, 256} t = 2; Do[Print[t]; t = t^2 ,{3}] --> ??? For[start, test, incr, body] t = 2; For[i=1, i<4, i++, t = t^2; Print[t]] --> {4, 16, 256}
While[test, body] t = 2; i = 1; While[i<4, t = t^2; Print[t];i++] Nest[f, expr, n] Nest[(#^2)&, 2, 3] --> 256 Module[{x = 2}, Nest[(#^2)& , x, 3]]
If[condition, T, F] If[condition, Then , Else]
Cấu trúc rẽ nhánh
f[x_]:= If[x > 0, 1, -1]
Điều kiện (Condition)
<==> f[x_]:= 1/;x > 0
f[x_/;x > 0]:= 1 f[x_/;x <= 0]:= -1 <==> f[x_]:= -1/;x <= 0
Switch[expr.,form1, val1, form2, val2,…] f[x_]:= Switch[Mod[x,3], 0, a, 1, b, 2, c] f[4] --> “b” Which[test1, val1, test2, val2,…] f[x_]:= Which[x > 0, 1, x <= 0, -1] Piecewise[val1, cond1, val2, cond2, …] f[x_]:= Piecewise[{{1, x > 0},{-1, x < 0}}, -1] f[x_]:= Piecewise[{1, x > 0}, -1]
Quy tắc thay thế
Các quy tắc thay thế
->
/.{var1 -> value1, var1 -> value2,…}
--> -->
/.{var1 :> value1, var1 :> value2,…}
{0.262002,0.18452,0.695246,0.302918}
list = {t,t,t,t}/.t :> RandomReal[] Bước 1 : thay thế {t,t,t,t} --> {RandomReal[],RandomReal[],RandomReal[],RandomReal[]} Bước 2 : tính các giá trị list[[1]] = 0.262002 list[[2]] = 0.18452 …
f[x_]:= a Sin[x] + b Cos[a x] f[t] f[t]/.a -> 1 Quy tắc thay thế :> So sánh hai quy tắc
{t,t,t,t}/.t -> RandomReal[] {0.640703, 0.640703, 0.640703, 0.640703}
2.5 Các gói chương trình chuyên dụng Gọi package để sử dụng
hoặc Get[PackageName`]
<< PackageName` Needs[“PackageName`”,“file”]
Package :
VectorAnalysis: < Cartesian : Xx, Yy, Zz
Cylindrical: Rr, Ttheta, Zz
Spherical : Rr, Ttheta, Pphi -> x, y, z
-> r, θ, z
-> r, θ, ϕ SetCoordinates[system[names]]
system/names :
--> gradient
Grad[f, coordsys]
--> divergence
Div[f, coordsys]
--> curl/rot
Curl[f, coordsys]
Các toán tử dùng trong các hệ toạ độ trụ/cầu
http://en.wikipedia.org/wiki/Nabla_in_cylindrical_and_spherical_coordinates
Phương trình Euler–Lagrange : EulerEquations[f, u[x],x] Phương pháp biến thiên hằng số: << VariationalMethods` ele = EulerEquations[Sqrt[1+y'[x]^2],y[x],x] DSolve[ele,y[x],x] --> VariationalD[Sqrt[1+y'[x]^2],y[x],x] VariationalD[f, u[x],x] Thư viện: http://library.wolfram.com/
http://library.wolfram.com/infocenter/MathSource/ Physics :
http://library.wolfram.com/infocenter/MathSource/Science/Physics/