Online Note

posted on 01 Aug 2008 20:55 by stardustblog

บันทึกย่อส่วนตัว เอาไว้อ่านกันลืม 

คำสั่งที่ใช้บ่อยกับ Server Linux

เวลาเรา logon เข้าไปใช้เซิร์ฟเวอร์ Linux เพื่อ compile  หรือ Run program ของงานวิจัย มีคำสั่งที่ใช่ในการคอมไพล์และสั่งทำงานดังนี้

1. compile program

$ cc -o   <Output file>  <Source file>  -lm     หมายเหตุ ไม่ต้องพิมพ์ <> นะ

2.การสั่ง Run  ก็เหมือนกับ dos แค่พิมพ์ชื่อไฟล์ลงไป แต่ถ้าพิมพ์แค่ชื่อโปรแกรมลงไป มันจะไม่ยอมปล่อยให้เราไปไหน  log off ก็ไม่ได้ ถ้า run เป็นวันๆ นี่ตายเลย

  จึงควรสั่งให้ทำงานด้วยโหมด Background ด้วยการเติม & เข้าไปด้านหลัง เช่น

$<program> & 

หรือสำหรับบางดิสโทร ของลินุกซ์ ก็ใช้ ./ เช่น

$./<program> &

หมายเหตุไม่ต้องพิมพ์  $  และ  <>

จากนั้นจะ Log off จากเซิร์ฟเวอร์ ไป ลั้ล ลา หรือ ฮิฮิ ฮะฮะ ที่ไหนก็ได้ทั้งนั้น แต่อย่าลืมกลับมาเอาข้อมูลไปวิเคราะห์ต่อด้วยนะ

3. สำหรับบางคนที่มีคำสั่งเยอะ และไม่อยากเฝ้าดูเป็นระยะๆ อาจเขียนสคริปต์ เหมือน batch ไฟล์ของ Dos แต่ให้เขียน เป็นคำสั่ง Linux แทน

โดยหนึ่งคำสั่ง ต่อหนึ่งบรรทัด  จากนั้นให้เซฟเป็นไฟล์ข้อความเช่น  test

แล้ว compile script นั้นให้เป็น program file  ด้วย

$chmod 755 <scripts file>

หมายเหตุ เหมือนข้อ 1 กับ 2 นั่นแหละ

 

Compile Latex Files ด้วย Dos Prompt

CMD หรือ command prompt ใน Windows  ที่ใช้เรียกหน้าจอ Dos แบบคลาสิค ออกมาป้อนคำสั่ง สำหรับชาว Hardcore ที่ไม่ชอบใช้เมาส์จิ้มว่างั้น

แต่ทีจริงแล้ว สำหรับการ Compile Code Latex เพื่อสร้าง dvi file ต่อเนื่องไปจนถึงไฟล์เอกสาร ps  สำหรับคนที่ไม่มี Tex Editor แบบถูกกฎหมาย หรือมีแบบผิดกฎหมายแต่ละอายแก่ใจว่าไม่อยากใช้ของเถื่อน

ก็จำเป็นต้องเรียกหน้าจอดำๆ ตัวหนังสือขาวๆ ขึ้นมาใช้งาน

ขั้นแรกไปที่ start -> Run  พิมพ์ cmd แล้ว Enter จะปรากฎหน้าต่างหรือเทอร์มินัลหน้าตาดำๆ ขาวๆ อย่างที่บอก

แต่ตำแหน่งที่เราอยู่กลับเป็น home ของ user ที่เราใช้อยู่  ให้ย้าย directory ไปทำงานใน directory เดียวกับที่เราใส่ไฟล์ .Tex เอาไว้  ด้วยคำสั่ง Dos

เมื่อเรามาอยู่ใน directory ที่กำหนดแล้ว เช่น c:\Run ซึ่งมีไฟล์ที่เราทำงาน  สมมติว่าเป็น  test.tex 

พิมพ์   latex   test.tex   ถ้าไม่มีข้อผิดพลาดอะไร หรือ error ที่ไหน     ไฟล์ text.tex จะถูกคอมไพล์ไปเป็น test.dvi

พิมพ์   dvips  test.dvi    เพื่อแปลงไฟล์นามสกุล dvi เป็น ps  หรือ postscripts file ที่สามารถเปิดได้ด้วย ps viewer หรือ  adobe reader ต่างๆ

เท่านี้ก็จะได้ ps ไฟล์สำหรับ paper การบ้าน thesis หรือเอกสารงานวิชาการอื่นๆ  ทั้งภาษาไทยและภาษาอังกฤษ

Note: ต้องลงพวก Tex Code ในเครื่องก่อนนะ แนะนำ Miktex ไปหาดาว์นโหลดได้ฟรีๆ

(เดี๋ยวนี้หันไปใช้ TexEditor อย่าง TeXnicCenter ) แทนวิธีนี้เลยไม่ได้ใช้แล้ว

 

 ตัวอย่าง Source Code สำหรับโปรแกรมสุ่มค่าความน่าจะเป็น จาก 0 ถึง 1  ในภาษาซี

สำหรับเรียกใช้กับปัญหาเชิงสถิติหรือปัญหาในระบบที่ต้องการตัวแปรสุ่ม (random variable)

โดยเวลาเรียกใช้ต้องใส่ค่า  seed ลงไปในคำสั่ง  ran(&seed) เพื่อป้อนค่าเริ่มต้น(ตำแหน่งของข้อมูลภายใน Ram)ที่จะไม่เกี่ยวข้องกับผลลัพธ์

double  ran(idum)
long    *idum;
{
static long      iy,ir[98];
static int      iff = 0;
int     j;

if ((*idum)<0 || iff==0) {

  /* INITIALIZE SEQUENCE  */

  iff = 1;
  if (((*idum) = (IC -(*idum))%M)<0) (*idum) = -(*idum);
  for (j = 1;j<=97;j++) {
  *idum = (IA*(*idum)+IC) % M;
  ir[j] = (*idum);
  }
  (*idum) = (IA*(*idum)+IC) % M;
  iy = (*idum);
}

  /* START HERE UNLESS INITIALIZING.       */
  /* RANDOMLY SELECT NUMBER FROM SEQUENCE. */

j = 1 + 97.0*iy/M;
iy = ir[j];
(*idum)=(IA*(*idum)+IC)%M;
ir[j] = (*idum);
return (double) iy/M;
}

Code ดังกล่าวมาจาก หนังสือ Numerical Recipes

 

การอินทิเกรต ด้วยวิธี Monte Carlo 
 
จริงแล้วการ Integrate ฟังก์ชัน มีวิธีอื่นๆ อีกมากมาย แต่ที่เป็นที่นิยมขึ้นมานับจากการประชุมวิชาการ(ด้านอะไรสักอย่างจำไม่ได้แล้ว) ที่เมืองMonte Carlo ราชรัฐโมนาโก ยุโรปใต้ ได้เสนอวิธีการที่แสนจะเรียบง่ายแต่ทรงพลังนี้ เอาไว้ โดยใช้หลักการ "สุ่ม" (random)
 
การ Integrate ด้วยวิธี Monte carlo มีหลักการง่ายๆ ไม่ซับซ้อนคือ
1.กำหนดการสุ่มภายในมิติที่เราสนใจอย่าง uniform ในมิตินั้น
2.กำหนดขอบเขตที่ทำให้ตำแหน่งที่เราสุ่มไปตกนั้น จะ  "ยอมรับ"หรือไม่ก็ "ไม่ยอมรับ"
  เช่น  ถ้าจะบูรณา(Integrate) หาพื้นที่ใต้กราฟ x vs f(x)   แล้วกำหนดการสุ่มให้ Uniform ในมิติ x กับ f(x) ได้แล้ว 
   ได้จุดสุ่ม(x,y) ใดๆ   ถ้า f(x)>=y ก็ "ยอมรับ" แต่ถ้า   f(x) < y ก็ไม่ยอมรับ 
3. ก็สุ่มไปเรื่อยๆ ทำซ้ำข้อ 2 ไปเรื่อยๆ จนได้จำนวนจุดที่สุ่มมากพอ (โดยทั่วไปควร มากกว่า 10,000 จุด)
4. เปรียบเทียบจำนวนจุดที่ ยอมรับ(n) กับจำนวนจุดทั้งหมด(N) เป็น   ratio = n/N  อันเป็นสัดส่วนของพื้นที่ใต้กราฟต่อขนาดของมิติทั้งหมด   เท่านี้เมื่อเอาสัดส่วนดังกล่าวไปคูณกับขนาดของมิติที่อยู่ในขอบเขตทั้งหมดของการสุ่มก็จะได้ผลลัพธ์ที่ประมาณได้จากวิธีการนี้
 
Note  : 
1. ยิ่งมีจำนวนจุดสุ่มทั้งหมดมาก  ก็จะใช้เวลาคำนวณนาน แต่ก็จะได้ความถูกต้อง มากยิ่งขึ้นเช่นกัน
2. Monte Carlo Integration สามารถทำได้ในระบบหลายมิติ(multidimension) หรือหลายตัวแปร  ซึ่งหากเป็นกลวิธีอื่นๆจะยุ่งยาก  แต่วิธีนี้สะดวกกว่ามาก
3. อนึ่งพึงระวังว่า การสุ่มภายในมิติใดๆ จะต้อง Uniform ในมิตินั้น  ไม่เช่นนั้นผลการคำนวณจะไม่ถูกต้อง