เรียกใช้ MathNet ใน Mathematica

ที่ต้องระวังคือถ้า methods ใน C# มีการใช้ตัวแปรเป็น Matrix<> หรือ Vector<> เวลาจะส่งผ่านค่า Matrix หรือ Vector จาก Mathematica เข้าไปซึ่งมันเป็น List จะต้องทำการแปลงเป็น Matrix หรือ Vector โดยอาศัย constructors จากตัว MathNet ก่อน

ตัวอย่างเช่น มี Method Neighbors ที่ต้องการ Matrix<double> ตามนี้

เวลาเรียกจาก Mathematica ก็ทำตามนี้ครับ

สังเกตตัวแปร mat ถูกสร้างขึ้นมาจาก คำสั่งนี้ครับ

NETNew["MathNet.Numerics.LinearAlgebra.Double.DenseMatrix", 10, 10, 
RandomReal[1, 100]]

Merry Christmas and a Happy New Year!!

library(rgl)
open3d()
bg3d("black")
t <- seq(0,8*pi, by = 0.01);
x <- c(t*cos(t),t*cos(t+0.5*pi),t*cos(t+pi),t*cos(t+1.5*pi))
y <- c(t*sin(t),t*sin(t+0.5*pi),t*sin(t+pi),t*sin(t+1.5*pi))
z <- -c(t,t,t)
plot3d(x, y, z, col = rainbow(1000),box=FALSE,axes=FALSE,xlab="",ylab="",zlab="")
text3d(1,8, text = "Merry Christmas and", adj = 0.5, color = "green")
text3d(1,4, text = "a Happy New Year!", adj = 0.5, color = "green")
points3d(runif(100,min=-25,max = 25),runif(100,min=-25,max = 25),-runif(100,max = 25),color="white")

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

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

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

จำกัดช่วงของเลขสุ่มใน 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]