Categories
Mathematica

ขำๆแก้ง่วง

ls =
  Table[
   img = CurrentImage[];
   HighlightImage[img,
    {Gray, Values@FacialFeatures[ CurrentImage[], "EyePoints"], Blue, 
     FindFaces[img]}]
   , {i, 30}];

Export["facial.gif", ls, AnimationRepetitions -> Infinity]
txt = "ไปไหนกันหมด";
THfontfam = Select[$FontFamilies, StringTake[#, 2] == "TH" &];

ls = Table[
   Text[Style[txt, RandomColor[30], 
     FontFamily -> RandomChoice[THfontfam], FontSize -> 48], 
    RandomReal[1, {2}], Automatic, RandomReal[{-1, 1}, {2}]], {50}];

Export["vru.gif", 
 Table[Graphics[ls[[1 ;; i]], PlotRange -> {{-1, 2}, {-2, 2}}], {i, 1,
    50}], AnimationRepetitions -> Infinity, "DisplayDurations" -> 0.5]
Categories
Mathematica

Metapopulation ของโรคไข้เลือดออก

พอดีว่าได้มีโอกาสไปร่วมทำงานวิจัยเรื่องการวางแผนการจัดการโรคไข้เลือดออกด้วยยุงติดเชื้อ Wolbachia ที่สถาบันข้อมูลขนาดใหญ่ (Big data institute) ที่มหาวิทยาลัยอ๊อกซ์ฟอร์ด โดยทางผมได้เสนอแบบจำลองคณิตศาสตร์ที่มีการใช้ข้อมูลแผนที่ต่างๆ อย่างเช่น การกระจายตัวของประชากร ที่อยู่อาศัยหรือการกระจายตัวของยุง แผนที่ที่คาดว่ายุงสามารถอยู่อาศัยได้ และแผนที่ของการเกิดโรคไข้เลือดออก เพื่อทำนายการกระจายตัวของโรคไข้เลือดออก และการวางแผนการปล่อยยุงที่ติดเชื้อ wolbachia รูปร่างหน้าตาของแบบจำลองคร่าวๆ ที่ให้ดูได้ก็จะประมาณนี้ครับ

ไอเดียก็ประมาณว่าถ้าในบริเวณไหนมียุงติดเชื้อ wolbachia บริเวณนั้น็จะไม่มีไข้เลือดออกเลย การกระจายของยุงและเชื้อไข้เลือดออกก็ขึ้นกับว่าบริเวณนั้นและบริเวณใกล้เคียงมียุง หรือยุงอาศัยได้หรือไม่ มีคนอาศัยอยู่หรือเปล่า จากงานนี้เราจะสามารถวางแผนได้ว่าจะปล่อยยุงติดเชื้อนี้อย่างไร ตรงไหนถึงจะคุ้มค่า ในช่วงระยะเวลาที่จำกัดได้

Categories
Mathematica

Wolfram animation in Jupyter

หลังๆมานี้ตั้งแต่ Wolfram Engine มันใช้ได้ฟรี ผมก็มักจะแนะนำให้คนโน่นคนนี้ใช้มันอยู่เรื่อยๆ หลายคนที่ก็ชอบ ส่วนอีกหลายคนก็ยังรู้สึกอึดอัดเพราะมันยังไม่ชินหรือไม่ก็เพราะ UI มันไม่มีไม่น่าใช้ ยิ่งแนะนำให้ใช้กับ Jupyter ยิ่งหนักเลยเพราะยังทำ Animation ไม่ได้หรือพวก 3D ทั้งหลายก็หมุนไม่ได้ zoom ก็ไม่ได้ ยิ่งคำสั่งพวก Manipulate ที่ถือได้ว่าเป็นสิ่งหลักที่ถูกใช้ในหลายๆงานก็ใช้ไม่ได้เลย

ส่วนตัวผมก็ยังถือว่ามันไม่ได้แย่ขนาดนั้น เพราะทางWolframเองก็คงเข้าใจว่าถ้าเอาWolfram engine ไปใช้โดยไม่มีUI ที่เหมือน Mathematica notebook คนคงมาใช้งานมันน้อยแน่ๆ เขาเลยเอา WolframPlayer ติดมาด้วยกับ Wolfram engine ซึ่งนั่นหมายความว่าผู้ใช้ก็ต้อง Export สิ่งที่ต้องการอย่าง 3D, Animation อื่น ๆมาอยู่ในรูปแบบ notebook (.nb) หรือ .cdf แล้วเปิดในตัว player แทน

ซึ่งถ้าใช้ตัว Jupyter กับ Wolfram ก็สามารถที่จใช้คำสั่ง RunProcess เรียกตัว Player มาเปิดไฟล์ที่ Exportได้ อย่างเช่น

outfile=FileNameJoin[{Directory[],outputfilename}];

RunProcess[{"C:\Program Files\Wolfram Research\Wolfram Engine\12.0\SystemFiles\FrontEnd\Binaries\Windows-x86-64\WolframPlayer.exe",outfile}]
Categories
Mathematica

หาขนาดของมุม CAD

เห็นมีคนถามคำถามนี้ที่ pantip (https://pantip.com/topic/39436894) เลยทำให้ดูเป็นตัวอย่างโดยการใช้ภาษา Wolfram ครับ ตาม link นี้ครับ https://www.wolframcloud.com/obj/sompob/Published/tri_pantip.nb

Categories
Mathematica

อ่านตัวเลขจากภาพ

มีคนถามคำถามนี้ใน Facebook ของสมาคมโปรแกรมเมอร์ไทย

คำถามนี้สามารถทำได้ง่ายๆด้วยภาษา Wolfram ครับ โดยใช้คำสั่ง TextRecognize ตามนี้ครับ

https://www.wolframcloud.com/obj/sompob/Published/demo_3Oct19.nb
Categories
Mathematica Uncategorized

จำกัดช่วงของเลขสุ่มใน Stan

ถ้าจะจำกัดช่วงของเลขที่สุ่มจาก distribution ใดๆสามารถที่จะช่วงที่ต้องการได้โดยใช้ truncation function T ตามนี้ อย่างเช่น ถ้าอยากให้ y สุ่มมาจาก normal ที่ค่าอยู่ในช่วง -0.2 ถึง 1.5 สามารถพิมพ์ได้ตามนี้ครับ

y ~ normal(0,1) T[-0.2,1.5];

หรือจะพิมพ์แบบนี้ก็ได้ครับ

y ~ normal(0,1);
if (y < -0.2 || y > 1.5)
   target += negative_infinity();
else
   target += -log_diff_exp(normal_lcdf(1.5|0,1),normal_lcdf(-0.2|0,1));

แต่ถ้าทำในภาษา Wolfram ก็พิมพ์แบบนี้ได้ครับ

DT = TruncatedDistribution[{-0.2, 1.5}, NormalDistribution[0, 1]]

ls = RandomVariate[DT, 100000];
Histogram[ls]
Categories
Mathematica Uncategorized

หาพื้นที่แรเงา วงกลม 2 วง

มีคนถามคำถามนี้ที่พันทิบครับ

https://pantip.com/topic/39161753

อันนี้ลองเขียนแก้ปัญหาด้วยภาษา Wolfram

Categories
Mathematica

เขาว่าโจทย์เลขป.4

มีคนแชร์โจทย์นี้ในpantip โดยจากโจทย์ก็ให้หาว่า อักษรแต่ล่ะตัวแทนด้วยเลขอะไรบ้าง

ดูแล้วเด็กก็คงต้องเขียนโปรแกรมช่วยแล้วล่ะครับ 555 ผมลองเขียนโปรแกรมด้วยภาษา Wolfram สำหรับปัญหานี้ตามนี้ครับ

ls = Permutations[Range[0, 9], {8}];

SetSharedFunction[ParallelSow]
ParallelSow[expr_] := Sow[expr]

output = (ParallelTable[
      If[(FromDigits@{a, f, b, f} + FromDigits@{c, g, h, b} + 
               FromDigits@{d, a, f, g} + FromDigits@{a, e, a, b} == 
              FromDigits@{b, c, d, c}) /. {a -> #1, b -> #2, c -> #3, 
             d -> #4, e -> #5, f -> #6, g -> #7, h -> #8} & @@ # &@
        ls[[i]]
       ,
       ParallelSow[ls[[i]]]
       ]
      , {i, 1, Length@ls}
      ] // Reap)[[2, 1]];

คำตอบที่ได้ก็จะประมาณนี้ครับ

หรือให้แสดงผลสวย ๆ

Table[
  #[[1]] <> "+" <> #[[2]] <> "+" <> #[[3]] <> "+" <> #[[4]] <> 
     "=" <> #[[5]] &@(
    ToString /@ ({FromDigits@{a, f, b, f}, FromDigits@{c, g, h, b}, 
            FromDigits@{d, a, f, g}, FromDigits@{a, e, a, b}, 
            FromDigits@{b, c, d, c}} /. {a -> #1, b -> #2, c -> #3, 
            d -> #4, e -> #5, f -> #6, g -> #7, h -> #8} & @@ # &@
       output[[i]])), {i, 1, Length@output}] // TableForm

ก็จะได้

Categories
Mathematica

train กันจนหลับ Zzzz

train กันจนหลับมาหลายรอบล่ะ Zzz

Categories
Mathematica

แสดงผลลัพธ์จาก wolfram script แบบกราฟฟิค

ตั้งแต่ Wolfram Engine สามารถใช้ได้ฟรีนี่ทำให้ผมมีอะไรได้ลองเล่นเยอะเลย ถึงแม้จะมี Wolfram Mathematica อยู่แล้วนะเนี้ย

ตัว Wolfram Engine ที่เราสามารถโหลดมาใช้ได้ฟรี(http://www.wolfram.com/engine/) นี้จะเป็นแบบ text mode ไม่มี UI มาให้ ก็อาจจะทำให้ลำบากหน่อยถ้าอยากจะดูผลลัพธ์ที่เป็นกราฟฟิค เพราะอาจต้อง Export เป็นไฟล์ไปก่อนแล้วค่อยเปิดดู แต่ถ้าอยากจะให้ตัว Wolfram Engine มันแสดงผลกราฟฟิคให้ดูเราก็สามารถที่จะใช้ตัวแพ็กเกจ JavaGraphics ช่วยได้ครับวิธีก็เพียงโหลด

<<JavaGraphics`

ก่อนที่จะให้มันแสดงผลลัพธ์กราฟฟิคของคำสั่งที่ต้องการ ตัวอย่างครับ

หรือถ้าใครสนใจจะใช้ผ่าน UI อย่าง jupyter ก็ลองดูที่ projects ตามนี้ดูนะครับ

สวนตัวแนะนำ WolframLanguageForJupyter ครับ

วิธการติดตั้งที่อยากแนะนำก็คือลง Anaconda พอลงเสร็จก็รัน Anaconda prompt แล้วรัน wolframscript

จากนั้นก็ติดตั้ง WolframLanguageForJupyter ตามวิธีที่เขาแนะนำไว้ครับ