ปัญหา cuTexRefSetAddress2D_v3

พอดีว่าลงWindows 7 64bit กับ Mathematica 11.1.1 ใหม่ แล้วเจอปัญหา  ตามภาพด้านล่างตอนใช้ CUDALink พอเช็คดูเวอร์ชั่นของ nvidia driver ที่ใช้กับการ์ดจอ (Quadro 2000)ด้วยคำสั่ง CUDADriverVersion[] พบว่าเป็นรุ่นเก่ามากคือ27x.x  เลยทำการ update เป็นตัวใหม่กว่าคือ 377.55จากนั้นก็ลองใช้ QUDAQ[] ใหม่เช็คดูปรากฎว่าไม่มีปัญหาแล้วสามาถใช้งานได้ตามปกติ

ปัญหาเข็มของบึฟฟองBuffon’s Needle

เห็นมีคนพูดถึงปัญหานี้ในกลุ่มผู้ใช้ R ของไทยเราเลยเอามาเขียนโปรแกรมทำบ้างแต่ใช้ภาษา Wolfram แทนเพราะจะเขียนได้สั้นมาก

โปรแกรมที่เขียนนี้จะวาดเส้นแนวนอนที่มีระยะห่างตามที่กำหนดและก็สุ่มวางเข็มตามขนาดและจำนวนที่ต้องการลงไปแล้วนับดูว่าที่กี่เล่มที่ทับเส้น จากนั้นก็คำนวณประมาณค่า pi จากสูตรที่เขียนไว้ที่ https://en.wikipedia.org/wiki/Buffon%27s_needle ซึ่งก็คือ

โดย l คือความยาวเข็ม, n  คือจำนวนเข็ม, t คือระยะห่างระหว่างเส้นบรรทัด และ h คือจำนวนเข็มที่ทับเส้นบรรทัด

สำหรับวาดเส้นของเข็มและเส้นบรรทัด


genNeedle[{x_, y_}, θ_, len_] :=
Line[{{(x + 0.5 len Cos[θ]), (y + 0.5 Sin[θ])}, {(x –
0.5 len Cos[θ]), (y – 0.5 len Sin[θ])}}]

horizontalLine[diff_, len_, {x0_, y0_}, n_] :=
Table[Line[{{x0, y0 + (i diff)}, {len, y0 + (i diff)}}], {i, n}]

สำหรับประมาณค่า pi


estimatedPi[needlelength_, nneedles_, linespace_, ncross_] :=
2.*needlelength*nneedles /(linespace*ncross)

สำหรับ simulation


run[nl_, nfl_, ll_, diff_] :=
Module[{fls, ls, outls, pnts, ncross},
fls = horizontalLine[diff, 10, {0, 0}, nfl];
ls = Table[
genNeedle[{RandomReal[{0, 10}], RandomReal[{0, nfl*diff}]},
RandomReal[π], ll], {nl}];
outls =
Table[Solve[{x, y} ∈ RegionIntersection[fls[[i]], #], {x,
y}] & /@ ls, {i, Length@fls}];
pnts = Point[{x, y}] /. Flatten[outls, 2];
ncross = Length@Flatten[outls, 2];
Graphics[{fls, ls, Red, PointSize[Medium],
If[Length@Flatten[outls, 2] > 0, pnts]},
PlotLabel ->
Style["จำนวนเข็มที่ทับเส้น:" <> ToString@ncross <>
" π≈" <>
ToString@estimatedPi[ll, nl, diff, ncross], FontSize -> 20,
Bold]]];

ทดลองเล่นดู โดยใช้เข็ม 100 เล่ม และกำหนดให้มีเส้นบรรทัด 10 เส้น โดยระยะห่างระหว่างบรรทัดกับความยาวเข็มเท่ากัน


nlines = 10;
nneedles = 100;
linelength = 1;
linespace = 1;
run[nneedles, nlines, linelength, linespace]

สำหรับmathematica notebook สามารถdownloadได้จากhttps://github.com/slphyx/Buffon-s-Needle

ตัวอย่างการใช้ InputField ใน Manipulate

ตัวอย่างการใช้ InputField ใน Manipulate ของ Mathematica ครับ

ใน Manipulate นอกเหนือจาก พวก Slider และ Menu ต่าง ๆแล้ว เราสามารถที่จะใช้ InputField เพื่อรับค่าจาก users ได้โดยตรงครับ รายละเอียดการใช้งานต่างๆ สามารถดูเพิ่มเติมได้ที่ http://reference.wolfram.com/language/ref/InputField.html ครับ

 

 

โปรแกรม Draw เขียนด้วยภาษา Wolfram

เจ๋งมาก Wolfram Research ปล่อย source code บางโปรแกรมที่ใช้กันภายในบริษัท

https://github.com/WolframResearch/

ที่ผมสนใจเป็นพิเศษคือ Draw ครับ เป็นโปรแกรมที่ถูกเขียนขึ้นสำหรับวาดไดอะแกรมหรือกราฟต่างๆใน Mathematica โดย Tim Shedelbower ลองเล่นดูครับ โหลดไฟล์ draw.nb จาก github ได้เลย แล้วก็เปิดจาก Mathematica จากนั้นก็เริ่มโปรแกรมได้โดย ไปที่ Evaluation->Evaluate Notebook

draw

ไม่น่าเชื่อว่าทั้งหมดนี้เขียนจากภาษา Wolfram

โมเดลหมอกควัน

เมื่อปีที่แล้ว(2558)ผมได้มีโอกาสเป็นที่ปรึกษาโครงงานวิทยาศาสตร์ของนักเรียนกลุ่มหนึ่งจากโรงเรียนมหิดลวิทยานุสรณ์ที่สนใจใช้ทำแบบจำลองของการแพร่กระจายของหมอกควัน วิธีที่เด็กทำน่าสนใจมากคือใช้ข้อมูลจริงอย่างเรื่องทิศทางของลมมาช่วยบวกกับโมเดลที่คิดกันเองอัพเดทตามข้อมูลจริง โดยเด็กกลุ่มนี้ใช้ข้อมูลความเร็วและทิศทางลมที่ตำแหน่งต่างๆของบริเวณและช่วงเวลาที่สนใจซึ่งสามารถโหลดได้จากตัวโปรแกรม Mathematica ซึ่งหน้าตาของข้อมูลและบริเวณที่สนใจทำโมเดลก็ประมาณนี้ครับ

map-air

ในโมเดลที่เด็กคิดกันก็คือจะแบ่งกริดของแผนที่เป็นตารางเล็กๆ โดยที่หมอกควันที่เกิดขึ้นในตารางนี้จะแพร่กระจายไปบริเวณตารางเพื่อนบ้านได้ 4 ทิศทางคือบนล่างและซ้ายขวา ขึ้นกับทิศทางและความเร็วลมที่วัดได้ในตารางนั้นๆ

map-grid

ผลลัพท์จากโมเดลที่ได้ก็ประมาณนี้ครับ

map-air-xผลที่ได้จากโมเดลแสดงให้เห็นว่าในช่วงเวลาที่เกิดไฟไหม้ป่าที่อินโดนีเซีย ทางภาคใต้ของไทยเราก็จะได้รับผลกระทบเช่นกัน

map-results

beeswarm plot ใน Mathematica/R

ผมถูกถามว่า strain ขอเชื้อมาลาเรียจากข้อมูลที่ใช้ในโมเดลที่ทำอยู่มีอิทธิพลอย่างไรกับการเพิ่มขึ้นหรือลดลงของเชื้อที่นับได้ในคนไข้  คำถามนี้ทำให้คิดอยู่นานทีเดียวว่าจะตอบหรือแสดงกราฟอย่างไรดี เนื่องจากว่ากราฟของพารามิเตอร์ตัวหนึ่งในโมเดลแสดงการกระจายตัวเป็นแบบ bimodal ซึ่งมันอาจเกี่ยวข้องกับ strain ของเชื้อหรือเปล่าที่ทำให้มีการกระจายอย่างนั้น

bimodal1เพื่อที่จะตอบคำถามนี้ผมได้plot กราฟที่เรียกว่า bee swarm ครับ มันเป็นกราฟที่คล้ายๆ กับ scatter plot กับ density plot รวมกัน โดยที่เราสามารถเห็นได้ว่าจุดข้อมูลของเรานั้นมีส่วนช่วยในการสร้างกราฟอย่างไร มีการกระจายตัวอย่างไร ตามนี้ครับ

beeswarm1ซึ่งจากกราฟผมสามารถเห็นได้ว่าข้อมูล strain จากเชื้อมาลาเรียชนิดต่างๆไม่ได้กระจุกตัวอยู่ที่ได้ที่หนึ่งนั่นก็หมายความว่าโมเดลทำนายว่า strain ไม่ได้มีอิทธิพลเกี่ยวข้องกับการการเพิ่มขึ้นหรือลดลงของเชื้อที่นับได้ในคนไข้กลุ่มนี้

กราฟลักษณะนี้สามารถ plot ได้ในโปรแกรม R โดยอาศัย library ที่ชื่อ beeswarm ครับ หรือถ้าอยากจะทำใน Mathematica สามารถดูได้ที่นี่ครับ http://mathematica.stackexchange.com/questions/42585/implementing-a-beeswarm-plot-in-mathematica

 

 

สมการดอกกุหลาบ

Rose[x_,theta_]:=Module[{phi=(Pi/2)Exp[-theta/(8 Pi)],X=1-(1/2)((5/4)(1-Mod[3.6 theta,2 Pi]/Pi)^2-1/4)^2},
y=1.95653 x^2 (1.27689 x-1)^2 Sin[phi];
r=X(x Sin[phi]+y Cos[phi]);
{r Sin[theta],r Cos[theta],X(x Cos[phi]-y Sin[phi])}
];

ParametricPlot3D[Rose[x,theta],{x,0,1},{theta,-2 Pi,15 Pi},PlotPoints->{25,576},PlotStyle->Red,Mesh->None,Axes->False,Boxed->False]

rose

ลอกมาจาก www.bugman123.com

 

Mathematica : equivalent point

มีคนโพสท์ถามที่พันทิป http://pantip.com/topic/34236148

pt1

pt1

pt1

pt1

ผมได้ลองใช้ Mathematica เขียนแบบง่ายๆได้ตามนี้ครับ

pantipPlot

โดย code ที่เขียนก็ประมาณนี้ครับ



data={{0.,4.04},{1.,4.6},{2.,5.01},{3.,5.38},{4.,5.84},{4.5,6.31},{5.,9.99},{5.5,10.7},{6.,10.97},{6.5,11.12},{7.,11.22},{8.,11.35},{9.,11.44},{10.,11.51},{11.,11.57},{12.,11.62}};

SplitDat[np1_List,np2_List]:=Module[{dat1,dat2},
dat1=data[[np1[[1]];;np1[[2]]]];
dat2=data[[np2[[1]];;np2[[2]]]];
{dat1,dat2}
];

genLineEq[datsplitted_,x_]:=Module[{dat1,dat2,lm1,lm2},
dat1=datsplitted[[1]];
dat2=datsplitted[[2]];
lm1=LinearModelFit[dat1,x,x];
lm2=LinearModelFit[dat2,x,x];
{lm1,lm2}
];

pantipPlot1[pospnts1_List,pospnts2_List,verpos1_,verpos2_,wantx_]:=Module[{x,eq1,eq2,eq3,xx,wanty},
{eq1,eq2}=genLineEq[SplitDat[pospnts1,pospnts2],x];
eq3=Fit[{{verpos1,((eq2[verpos1]-eq1[verpos1])0.5)+eq1[verpos1]},{verpos2,((eq2[verpos2]-eq1[verpos2])0.5)+eq1[verpos2]}},{1,xx},xx];
wanty=eq3/.{xx->wantx};

Show[Plot[{eq1[x],eq2[x]},{x,0,14},PlotRange->{0,13},PlotLabel->Style["Standardization NaOH with KHP",Bold,Medium],Frame->True,FrameLabel->{"V of NaOH (ml)","pH of KHP"},GridLines->Automatic,GridLinesStyle->Directive[Dotted, Gray],PlotStyle->{{Dashed,Gray},{Dashed,Gray}}],ListPlot[data,Joined->True,PlotStyle->Blue,PlotMarkers->Automatic],
Graphics[{Dashed,Line[{{verpos1,eq1[verpos1]},{verpos1,eq2[verpos1]}}]}],
Graphics[{Dashed,Line[{{verpos2,eq1[verpos2]},{verpos2,eq2[verpos2]}}]}],
Graphics[{Red,Dashed,Line[{{verpos1,((eq2[verpos1]-eq1[verpos1])0.5)+eq1[verpos1]},{verpos2,((eq2[verpos2]-eq1[verpos2])0.5)+eq1[verpos2]}}]}],
Graphics[{{Red,Line[{{wantx,0},{wantx,wanty}}]},Text[wanty,{wantx,wanty},{-1,0}]}]
]
];

Manipulate[pantipPlot1[{1,endLine1},{begLine2,16},begVerLeft,begVerRight,xwant],
{{endLine1,6},2,8,1,Appearance->"Labeled"},{{begLine2,8},8,16,1,Appearance->"Labeled"},
{{begVerLeft,3},1,6,Appearance->"Labeled"},
{{begVerRight,5},4.5,13,Appearance->"Labeled"},
{xwant,0,12,Appearance->"Labeled"}
] 

เปลี่ยนเลขอาราบิกเป็นเลขไทย(เขมร)ในMathematica

สงสัยเป็นการบ้าน 🙂 มีเมล์มาถามว่าจะเขียนโปรแกรมเปลี่ยนเลขอาราบิกเป็นเลขไทยได้อย่างไรใน Mathematica

วิธีง่ายๆเลยก็ตามนี้ arb2th