เขียน C/C++ ใน Wolfram Workbench

Wolfram Workbench (2.0) นี่ถูกพัฒนามาจาก Eclipse ซึ่งโปรแกรมเสริมหรือ plugin อะไรต่างๆที่ถูกพัฒนามาสำหรับ Eclipse สามารถใช้ได้กับ Wolfram Workbench ครับ ซึ่งเจ้า Wolfram Workbench 2.0 นี้สามารถใช้ได้กับโปรแกรมเสริมของ Eclipse ตั้งแต่ 3.4 จนถึง 3.8 เลยครับ (http://www.wolfram.com/products/workbench/qa/)

ถ้าจะอยากจะใช้ Wolfram Workbench  เป็น IDE สำหรับเขียน C/C++ ก็สามารถทำได้โดยเพิ่ม C/C++ development tools (CDT) ของ Eclipse เข้าไปใน Workbench ตามนี้ครับ

cdt1

1. ไปที่ Help->Install New Software

cdt2

2. คลิ๊ก Add แล้วพิมพ์ข้อความตามภาพด้านบนครับ

cdt3

3. จากนั้นก็เลือก CDT Main Features แล้วก็ Next ไปเรื่อยๆ  เป็นอันเสร็จพิธี 🙂

เจ้า CDT นี้ไม่ได้ติดตั้ง C/C++ compiler มาด้วยนะครับ เราต้องลงเอง ซึ่งผมแนะนำ MinGW  ครับ สามารถโหลดตัวติดตั้งได้ที่ https://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

การติดตั้ง MinGW นี้ก็เพียง double clicks ที่ตัวติดตั้งแล้วก็ตอบคำถามไปเรื่อยๆ ซึ่งค่า default มันจะทำการติดตั้งตัว compiler ไว้ที่ C:\MingGW ครับ  เมื่อลงเสร็จเราก็เพิ่ม C:\MinGW\bin เข้าไปใน Path ครับ ดูรายละเอียดเพิ่มเติมได้ที่ http://mingw.org/wiki/Getting_Started

cdt4

เป็นอันเสร็จครับ 🙂

 

สร้างโปรแกรมด้วย ManipulateMaker

ManipulateMaker เป็นหนึ่งในหลายคำสั่งของ Mathematica (8.0.4) ที่ไม่มีคำอธิบายการใช้งานใน help หรือ document center ?? ครับ ไม่รู้ว่าทำไม อาจเป็นไปได้ว่ายังไม่สมบูรณ์

การเรียกใช้งาน ManipulateMaker ก็เพียงพิมพ์

Explore`ManipulateMaker[]

มันจะมีหน้าตาตามนี้ครับ



อีกตัวอย่างครับ

ตัวอย่างการใช้ Mathematica แก้ปัญหาแบบง่ายๆ

พอดีมีคนถามว่า
จะหาจำนวนนับที่เล็กที่สุด ที่มีคุณสมบัติครบทั้ง 2 ข้อต่อไปนี้ได้ยังไงครับ???
I
(1) ขึ้นต้นด้วยเลข 1
(2) เมื่อสลับตัวเลขหลักแรก (ซึ่งก็คือ 1) กับตัวเลขหลักสุดท้าย แล้วจำนวนใหม่มีค่าเป็น 3 เท่าของจำนวนเดิม
II
(1) ขึ้นต้นด้วยเลข 1
(2) เมื่อย้ายตัวเลขหลักแรก (ซึ่งก็คือ 1) ไปต่อหลังตัวเลขหลักสุดท้าย แล้วจำนวนใหม่มีค่าเป็น 3 เท่าของจำนวนเดิม

(http://www.pantip.com/cafe/wahkor/topic/X11362457/X11362457.html)

อันนี้เป็นคำสั่ง Mathematica แบบง่ายๆ ที่ลองเขียนเพื่อแก้ปัญหานี้
I
swapInt1[tmp_Integer] := FromDigits@ ReplacePart[IntegerDigits[tmp], {1 -> Last@IntegerDigits[tmp], Length@IntegerDigits[tmp] -> First@IntegerDigits[tmp]}]
Catch[If[swapInt1@# == 3*#, Throw[#]] & /@ Range[1, 1000000, 1]]
คำตอบที่ได้จะเป็น Null ทั้งหมด นั่นหมายความว่ามันไม่มีคำตอบ
II
swapInt2[tmp__Integer] := FromDigits@RotateLeft@IntegerDigits@tmp

Catch[If[swapInt2@# == 3*#, Throw[#]] & /@ Range[1, 1000000, 1]]

คำตอบที่ได้คือ 142857
————————————————

จาก http://www.pantip.com/cafe/wahkor/topic/X11435196/X11435196.html

เราเรียก 6 28 496 8128….
ว่าเป็นจำนวนสมบูรณ์
เพราะมันมีคุณสมบัติที่น่าสนใจคือ
6     มีตัวประกอบแท้คือ 1,2,3
6  = 1+2+3
28   มีตัวประกอบแท้คือ 1,2,4,7,14
28  = 1+2+4+7+14 28 = 1+2+3+4+5+6+7
496 มีตัวประกอบแท้คือ 1,2,4,8,16,31,62,124,248
496 = 1+2+4+8+16+31+62+124+248
496 = 1+2+3+…+31

โดยตัวเลขพวกนี้ มันมีนิยามว่า มันอยู่ในรูป 2n-1(2n-1) เมื่อ n เป็นจำนวนนับที่ทำให้  2n-1 เป็นจำนวนเฉพาะ ซึ่งจากนิยามนี้เองเราสามารถเขียนคำสั่ง Mathematica ง่ายๆเพื่อหาตัวเลขพวกนี้ได้ว่า

(# (# + 1))/2 & /@ Select[2^Range[100] – 1, PrimeQ]

(#(#+1))/2 นี้ได้มาจากการให้ (2n-1) = x –> 2n =x+1  ดังนั้น  2n-1= (x+1)/2

——————————————
จาก
http://www.pantip.com/cafe/wahkor/topic/X11494743/X11494743.html
http://www.pantip.com/cafe/wahkor/topic/X11495190/X11495190.html

มีเลขอยู่หกหลักที่ไม่เหมือนกันซักตัว
เลขชุดนี้สามารถถอดรากที่สองได้เป็นจำนวนเต็ม
เมื่อกลับเลขชุดนี้ ก็จะยังถอดรากที่สองได้เป็นจำนวนเต็มเหมือนเดิม
เช่น MINTLA —> ถอดรากได้เป็นจำนวนเต็ม       ALTNIM —> ถอดรากได้เป็นจำนวนเต็ม
ถามว่า มีจำนวนใดบ้างที่เข้ากฏนี้และมีกี่จำนวน
ตัวอย่าง Mathematica code สำหรับปัญหานี้
(* ตั้งแต่ 3 – 10 หลัก แบบไม่ซ้ำ *)
For[i = 3, i <= 10, i++,
Print[“==”, i “==”];
num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
test = Developer`ToPackedArray@ Select[Permutations[num, {i}], #[[1]] != 0 &];
For[j = 1, j <= Length@test, j++,
If[FractionalPart@N@Sqrt@FromDigits@test[[j]] == 0 &&
FractionalPart@N@Sqrt@FromDigits@Reverse@test[[j]] == 0,
Print[FromDigits@test[[j]]]]
] ]

==3 ==
169
961
==4 ==
1089
9801
==5 ==
12769
96721
==6 ==
==7 ==
1238769
9678321
==8 ==
==9 ==
==10==

—————————–
http://www.pantip.com/cafe/wahkor/topic/X11514071/X11514071.html

ABCDEF แทนจำนวนใดได้บ้าง?
กำหนดให้
(1) ABCDEF แทนจำนวนซึ่งมี 6 หลัก
(2) ตัวอักษรแต่ละตัว แทนเลขโดด 1 – 9 ซึ่งอาจซ้ำกันได้
(3) AB ถอดรากที่สองแล้วได้จำนวนเต็ม
(4) CD ถอดรากที่สองแล้วได้จำนวนเต็ม
(5) EF ถอดรากที่สองแล้วได้จำนวนเต็ม
(6) ABCDEF ถอดรากที่สองแล้วได้จำนวนเต็ม

ตัวอย่างคำสั่ง Mathematica สำหรับปัญหานี้ครับ
num = {1, 2, 3, 4, 5, 6, 7, 8, 9};
test = Tuples[num, 6];

For[j = 1, j <= Length@test, j++,
If[FractionalPart@N@Sqrt@FromDigits@test[[j, # ;; # + 1]] & /@ {1, 3, 5} == {0, 0, 0} &&
FractionalPart@N@Sqrt@FromDigits@test[[j]] == 0,
Print[FromDigits@test[[j]]]]
]

166464
646416

——–

จาก http://www.pantip.com/cafe/wahkor/topic/X12638167/X12638167.html

 

ทำด้วย Mathematica

NestList[Total[IntegerDigits[#]^3] &, ตัวเลขที่หารด้วย 3 ลงตัว, จำนวนรอบจากข้อ (2-4) ]

เช่น เริ่มที่เลข 3 จำนวน 10 รอบ NestList[Total[IntegerDigits[#]^3]&, 3, 10]

{3, 27, 351, 153, 153, 153, 153, 153, 153, 153, 153}

หรือ เริ่มที่เลข 123345 (ตามตัวอย่าง) 10 รอบ NestList[Total[IntegerDigits[#]^3]&, 123345, 10]

{123345, 252, 141, 66, 432, 99, 1458, 702, 351, 153, 153}

มันมาหยุดอยู่ที่ 153

 

เขียน Mathematica package แบบง่ายๆ

มาลองเขียน Mathematica package แบบง่ายๆกันครับ

Mathematica package คืออะไร Mathematica package ก็คือชุดคำสั่งหรือโปรแกรมที่ถูกเขียนขึ้นเพื่อใช้ในการคำนวณเฉพาะด้าน ซึ่งจะมีสกุล .m

โดยถ้าเปิดไฟล์ .m ด้วย text editor อย่างเช่น notepad หรือ Mathematica เองเราจะเห็น code ข้างในมีคำสั่งหลักๆดังนี้ เช่น

BeginPackage[ “ชื่อpackage`”]
คำสั่ง1::usage = “คำสั่ง1[ x] คำอธิบายการใช้คำสั่ง1”
Begin[ “Private`”]
คำสั่ง1[ x_] :=  ….
End[]
EndPackage[]

การเรียกใช้งาน package ใน Mathematica เพียงใช้คำสั่ง Get หรือเครื่องหมาย << เช่น ถ้าpackage เราชื่อ MyPackage ก็เพียงพิมพ์
Get[MyPackage`]
หรือ
<<MyPackage`

ตัวอย่าง Package ชื่อ MyPackage ซึ่งมีคำสั่งอยู่ สองคำสั่งคือ fun1[x ] สำหรับหาค่า x^3 กับ fun2[x,y] สำหรับหาค่า sin(x)*cos(y)

BeginPackage[ “MyPackage`”]

fun1::usage = “fun1[ x] calculates x^3 ”
fun2::usage = “fun2[ x,y] calculates sin(x)*cos(y)”

Begin[ “Private`”]

fun1[ x_] := x^3

fun2[x_,y_]:=Sin[x ] * Cos[y]

End[]
EndPackage[]

ในการทดลองเขียน package ก็เพียงเปิด Mathematica แล้วพิมพ์ Code ของ package
ลงไปใน notebook แล้ว save เป็นแบบ Mathematica package ดูขั้นตอนตามรูปครับ

ในการเรียกใช้งาน package ก่อนอื่นเราต้องทำการบอก Mathematica ก่อนว่า package (MyPackage.m) ของเราอยู่ที่ไหน
ในตัวอย่างนี้สมมุติว่า MyPackage.m อยู่ที่ C:/TEMP ซึ่งเราสามารถบอก Mathematica
โดยใช้คำสั่ง AppendTo เพื่อเพิ่ม “C:/TEMP” เข้าไปในตัวแปร $Path
ซึ่งเป็นตัวแปรที่เก็บ Path หลักๆที่ Mathematica จะใช้ในการค้นหา Package ต่างๆ
หรือจะใช้ Needs[“MyPackage`”,”C:/TEMP/MyPacjage.m”] ในการเรียกใช้งานก็ได้ครับ