SakNgoi

Category: Uncategorized

ซูมกราฟใน Mathematica

กราฟที่ได้จากคำสั่ง Plot ใน Mathematica นี่จะ click ซูมเข้าไปดูในบริเวณที่สนใจไม่ได้ ต้องคอยมากำหนด Range ที่จะ plot เอาเองเพื่อดูบริเวณที่สนใจ แต่ล่าสุดก็มีคนเขียนเป็น Function สำหรับทำให้เราสามารถที่จะเลือกซูมดูบริเวณที่สนใจในกราฟได้ครับ ลองไปดูได้ที่ https://resources.wolframcloud.com/FunctionRepository/resources/DragZoomPlot ผมลองโหลดมาเล่นแล้วนี่สะดวกมากๆครับ

ตัวอย่างใช้งาน notebook ของ Mathematica

ผมเขียน code เพื่อสร้างกราฟเพื่อดูว่าผลลัพธ์จากโมเดลที่ผมสร้างขึ้นมานั้นมันเหมือนหรือต่างข้อมูลจริงจากคนไข้อย่างไร โดยเขียนให้มันสร้าง notebook ขึ้นมาพร้อมกับรัน code สำหรับสร้างกราฟเลย โดยที่ในแต่ล่ะ notebook จะมีข้อมูลของคนไข้ประมาณ 300 คน ตามตัวอย่างนี้ครับ ทีนี่ผมอยากจะ save กราฟที่สร้างขึ้นในแต่ล่ะ cell เป็น pdf จากไฟล์ notebook แต่ล่ะไฟล์ ซึ่งในแต่ล่ะ notebook จะมีประมาณ 5-10 cells ได้ ถ้าไปมัวเลือก save ในแต่ล่ะ cells คงต้องเสียเวลามาก เพราะมันมีหลายไฟล์ และผมก็มีหลายโมเดล วิธีที่ผมทำก็คือเขียน code มาเปิด notebook แต่ล่ะไฟล์แล้วก็ให้มันเลือกเซฟเฉพาะ กราฟของแต่ล่ะ cell ที่ต้องการโดย code ที่เขียนก็จะประมาณนี้ครับ โดยคำสั่งหลักที่ใช้ก็คือ NotebookOpen, SelectionMove และ NotebookRead ครับ NotebookOpen ก็เปิดไฟล์ notebook […]

คำแนะนำการใช้งาน Mathematica notebook

Notebooks จาก Mathematica นี่ปฏิวัติเรื่อง workflow ของงานด้านการคำนวณเลยที่เดียวครับ ไอเดียที่แสดงผลลัพธ์ต่อท้ายคำสั่ง สามารถที่เซฟและส่งต่อผลลัพธ์ในลักษณะเหมือนสมุดรายงานมีทั้งภาพ เสียง การเคลื่อนไหว แถมมีความสามารถเหมือน ms word กับ ms power point รวมกัน บวกกับสามารถที่จะ export เป็นได้หลายformat มาก และความสามารถอื่นๆอีกมากมาย ไม่แปลกใจที่ไอเดียจะถูกลอกไปในภาษาอื่นๆ โดยเฉพาะ R กับ Python แต่ความสามารถของ notebooks จากทั้งสองภาษายังห่างไกลจากของ Mathematica มาก Video ที่ผมแชร์มานี้ก็เป็นเพียงตัวอย่างการใช้งาน notebook ของ Mathematica ให้เกิดประสิทธิภาพสูงสุด แต่ก็ยังมีอีกหลายความสามารถที่ไม่ได้พูดถึงครับ

ปัญหา Path ของ Rtools

rtools มันจำเป็นสำหรับ r package ที่มี code จากภาษาอื่น อย่าง c/c++ หรือ fortran ในที่จะต้องมีการ compile ระหว่างการติดตั้ง โดยปกติแล้วมัน จะถูกลงไว้ที่ PATH=”C:\Rtools\bin;${PATH}” ถ้าลงไว้ที่อื่นและต้องการเรียกใช้ใน R ตัวแปรชื่อ BINPREF จะเป็นตัวแปรที่ R จะเรียกหา path ของ rtools ฉะนั้นถ้าจะเรียกใช้ rtools ที่ลงไว้ที่อื่นก็ต้องเซ็ต path ให้กับตัวแปรนี้ เช่น BINPREF=”X:/R/Rtools-3.5/mingw_$(WIN)/bin/” ** สังเกตว่า BINPREF ใช้ forward slash นะครับ

OpenCLFunctionLoad

กำลังทำโปรเจคที่ใช้ OpenCL ใน Mathematica มันก็เร็วใช้ได้เลย แต่อาจจะงงๆกับ types https://reference.wolfram.com/language/OpenCLLink/ref/OpenCLFunctionLoad.html

R 3.5.1 กับ RLink

ดูเหมือนวิธีเรียกใช้งาน RLink (Mathematica < 11.3) กับ R เวอร์ชั่นใหม่ 3.5.1 จะมีปัญหา วิธีที่เริ่มจะมีการแชร์ก็คือให้เปลี่ยนไปใช้ JAVA ตัวที่มากับ rJava แทน แทนที่จะใช้ตัวที่ Mathematica มีมาให้ ดูตัวอย่างข้างล่างนี้ครับ ที่มา https://community.wolfram.com/groups/-/m/t/1381936

วาดกราฟ exponential sums

พอดีว่าไปเห็นกราฟที่วาดจาก Exponential sums จากเวบ https://www.maths.unsw.edu.au/about/exponential-sums แล้วดูว่าสวยดีเลยอยากลองทำดูบ้างด้วย Mathematica การวาดกราฟจาก exponential sums หรือที่เขียนอยู่ในรูปแบบ ที่ทำนี้ก็คือถ้าเราค่อยๆบวกเข้าไปทีละเทอมและเอาค่าที่ได้มาพล็อตกราฟใน complex plane โดยที่แกนนอนคือจำนวนจริงและแกนตั้งคือจำนวนจินตภาพ ลองดูที่โค้ดน่าจะเข้าใจมากขึ้นครับ fn[n_] := Log[n]^4 NP = 5000; ls = Accumulate[Table[Exp[2 \[Pi] I fn[n]] // N, {n, 1, NP}]]; Manipulate[ ListPlot[{Re@#, Im@#}\[Transpose] &@(ls[[1 ;; np]]), Joined -> True, AspectRatio -> Full, PlotStyle -> Black, PlotRange -> {{-5, 70}, {-60, 20}}] , {np, […]

mingw64 libdatrie-libthai-thpronun

ผมเอา code ของ libdatrie 0.2.9 , libthai 0.1.28 และ thpronun 0.2.0 มาคอมไพล์โดยใช้ msys2, mingw64 ครับ เผื่อมีประโยชน์ประหยัดเวลากันบ้างครับ libdatrie 0.2.9 libthai 0.1.28 thpronun 0.2.0 การเอาไปใช้งานก็จะต้องติดตั้ง msys2 ก่อนนะครับ จากนั้นก็เพิ่ม PATH ของ mingw เข้าไป เช่น c:\msys64\ming64\bin

ใช้ OpenMP กับ Rcpp

ที่มา https://github.com/RcppCore/Rcpp/blob/master/inst/examples/OpenMP/OpenMPandInline.r ตัวอย่าง Rcpp กับ OpenMP library(inline) openMPCode <- ‘ // assign to C++ vector std::vector<double> x = Rcpp::as<std::vector< double > >(xs); size_t n = x.size(); #pragma omp parallel for shared(x, n) for (size_t i=0; i<n; i++) { x[i] = ::log(x[i]); } return Rcpp::wrap(x); ‘ settings <- getPlugin(“Rcpp”) settings$env$PKG_CXXFLAGS <- paste(‘-fopenmp’, settings$env$PKG_CXXFLAGS) settings$env$PKG_LIBS <- paste(‘-fopenmp -lgomp’, […]

Back to top
%d bloggers like this: