Categories
Mathematica

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

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

Categories
Uncategorized

เรียกใช้งาน Wolfram Engine จาก C#

ผมทำตัวอย่างง่ายๆสำหรับการเรียกใช้ภาษาวุลแฟลมซึ่งเป็นภาษาหลักของ wolfram engine หรือ Mathematica จากภาษา C# หรือ .Net ที่

https://github.com/slphyx/callWLfrom.NET

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
Uncategorized

CVODE Constants

ช่วงนี้ปวดหัวกับการ fit model ด้วย MCMC ที่ระบบมัน stiff มาก ในงานที่ทำนั้นใช้ตัว ode solver ที่เรียกว่า cvode ของ sundials ซึ่งมันก็ใช้ได้ดี แต่ chain มัน converge ช้ามากกกก แถมบางครั้ง cvode ก็จะมี flag แปลกๆ กลับมา ข้างล่างนี้เป็นความหมายของ flag ต่างๆ ซึ่งก็เอามาจาก cvode manual

Categories
Uncategorized

คิดก่อนทำ

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
Uncategorized

ตัวอย่าง code สำหรับsampling แบบขนานใน cmdstan

Mac OS/Linux

for i in {1..4} 
do 
    ./my_model sample random seed=12345 id=$i data file=my_data output file=samples$i.csv & 
done

Windows

for /l %x in (1, 1, 4) do start /b model sample random seed=12345 id=%x data file=my_data output file=samples%x.csv

เอามาจาก cmdstan-guide-2.20.0.pdf

Categories
Mathematica

train กันจนหลับ Zzzz

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