3D plot with MATLAB

เวลาต้องการพล็อตกราฟ 3 มิติ ของสมการสองตัวแปร เช่น The Motzkin
Polynomial

M(x,y) = x^2y^4+x^4y^2+1-3x^2y^2

ถึงแม้จะรู้จักคำสั่ง mesh มาเป็นชาติแล้ว ก็ไม่เคยคิดจะใช้มันแบบถูกวิธีซัก
ที การใช้ที่ถูกต้อง ง่าย ๆ ไม่ต้องใช้ for loop ทำดังนี้ครับ

mb = 1.2; ms = 0.04;
[X,Y] = meshgrid(-mb:ms:mb,-mb:ms:mb);

Mxy = X.^2.*Y.^4 + X.^4.*Y.^2 + 1 – 3*X.^2.*Y.^2;

mesh(X,Y,Mxy);
axis([-1.3 1.3 -1.3 1.3 0 1.3]);

จะเห็นได้ว่าสะดวกกว่าเป็นไหน ๆ เขียนสมการโดยตรงได้เลย

Advertisements

LyX ออกเวอร์ชัน 1.5.3

LyX mascotLyX บรรณาธิกรณ์ที่เรียกตัวเองว่า WYSIWYM (What
You See Is What You Meant) ได้ออก Maintenance
release 1.5.3 แล้วโดยหลัก ๆ คือเพิ่มประสิทธิภาพกับความ
เสถียร มีอะไรเปลี่ยนแปลงได้ดูได้จาก announcement
ตอนนี้ได้ออกไบนารีครบทั้งสามระบบปฏิบัติการสำคัญแล้ว สำหรับผม เลือกตัว
Installer ธรรมดาเพราะว่าเล็กและเน็ตที่ทำงานค่อนข้างเร็ว

MiKTeX 2.7 ออกแล้ว

MiKTeX 2.7 ตัวจริงออกแล้ว (วันนี้เอง) ก็โหลดตัวติดตั้งพื้นฐานมาใช้ได้เลยครับ
การเปลี่ยนแปลงหลัก ๆ คือ

  1. เลิกสนับสนุน Windows 9x/Me/NT
  2. ยกเลิก command-line บางคำสั่ง (ไม่เคยใช้)
  3. มี command-line ใหม่ ๆ (ไม่เคยใช้)
  4. ผนวก XeTeX เข้ามา แถมมีตัวอย่างด้วย

    \documentclass{article}
    \usepackage{fontspec}
    \setmainfont{Arial}
    \begin{document}
    The quick brown fox jumps over the lazy dog.
    \textbf{The quick brown fox jumps over the lazy dog.}
    \emph{The quick brown fox jumps over the lazy dog.}
    \end{document}
    xelatex arialtest.tex

    สำหรับ pdf ไฟล์

  5. pdfTeX เวอร์ชัน 1.40.4
  6. MetaPost เวอร์ชัน 1.001 (เลิกใช้นานแล้ว)
  7. มีการปรับปรุง Yap สองจุด

โดยส่วนตัวรู้สึกว่าเร็วขึ้นมาก ๆ นะครับ สงสัยคิดไปเอง

Phase Portraits with MATLAB

ทุกครั้งที่เริ่มเรียน Nonlinear System สิ่งที่เรียนต้องรู้ก็คือการตรวจสอบเสถียรภาพ
ของระบบ และสิ่งที่จะถูกหยิบยกมาเป็นตัวอย่างเสมอ ๆ ก็คือระบบลำดับที่สอง จาก
นั้นก็ใช้ Phase Portraits วิเคราะห์ระบบ ก็จะมีรูปโชว์ แล้วก็สอนวิธีการวาดด้วยมือซึ่ง
ใช้ได้กับระบบง่าย ๆ เท่านั้น สรุปง่าย ๆ ก็คือเรียนวิธีวาดไว้เพื่อออกข้อสอบ พอไปใช้
งานจริงก็ต้องพึ่ง MATLAB และความจริงอันโหดร้ายก็คือไม่มีใครสอนวิธีสร้างรูปพวก
นี้ในชั้นเรียนวิชา Nonlinear Systems ด้วย MATLAB ส่วนใหญ่ก็จะเอารูปจากใน
หนังสือมาสอน เมื่อก่อนราว ๆ 7 ปีที่แล้ว ผมได้เรียนวิชานี้ผมต้องพึ่งพาอาศัยหนังสือ
เล่มนี้ (ซื้อเก็บไว้ตอนเป็นเวอร์ชัน 2) Mastering SIMULINK ซึ่งเปิดเผยทุกอย่าง
ปัจจุบันไม่ต้องแล้วครับ หนังสือแนว How To เหล่านี้นอกจากจะล้าสมัยแล้วยังราคา
แพง ทางที่ดีก็หาคำค้นแล้วอาศัย Google เอาดีกว่า แต่บางทีการหาจาก Google ก็
ใช่ว่าดี ทางที่ดีจดใส่บล็อกดีกว่าครับ อย่างเรื่องนี้เป็นต้น

สำหรับใครที่ต้องการใช้งานโปรแกรมที่สามารถพล็อตสนามเวกเตอร์หรือ Phase
plane ได้ ก็ไปโหลดโปรแกรมที่นี่ได้เลย ODE software for MATLAB มีทุกอย่าง
ให้เสร็จ แต่ถ้าใครต้องการรายละเอียดที่อธิบายเข้าใจก็ที่นี่ Teaching material of
Frank Schilder
ซึ่งผมจะสรุปเอกสารของแกไว้ย่อ ๆ ดังนี้

กรณีที่ต้องการ Phase Portraits ของ Nonlinear systems ที่อธิบายด้วยสมการข้าง
ล่าง ซึ่งเป็นสมการเชิงพลวัตรของการแกว่งของลูกตุ้ม
\dot{x}_1 = x_2; \; \; \dot{x}_2 = -\theta^2\sin x_1 - bx_2
สำหรับระบบง่าย ๆ การสร้าง anonymous ดูจะเหมาะสมกว่าดังนี้

b = 0; theta = 1;
f = @(t,x) [ x(2); -theta^2*sin(x(1)) – b*x(2)

เวลาจะแก้สมการอนุพันธ์ก็ใช้คำสั่ง

ode45(f, [0 100], [0.1 0])

พารามิเตอร์ที่ใส่ก็น่าจะชัดเจน ถ้าอยากเปลี่ยนแปลงแก้ไขอะไรก็อย่าลืม help ode45

ในการพล็อต phase portrait สิ่งที่สำคัญอีกอันหนึ่งคือ direction field ซึ่งทำได้
โดยใช้ฟังก์ชัน quiver โดยทำได้ดังนี้ (เอาตัวอย่างมาจากเอกสารของ Schilder)

[xx yy] = meshgrid(-1.5*pi:pi/10:1.5*pi, -pi:pi/10:pi);
fx = []; fy = [];
for i=1:size(xx,1)
for j=1:size(xx,2)
ff = f(0,[xx(i,j) yy(i,j)]);
fx(i,j)=ff(1); fy(i,j)=ff(2);
end
end
quiver(xx, yy, fx, fy);
axis([-1.5*pi 1.5*pi -pi pi]);

ซึ่งจะได้รูป direction field (vector filed) ตามรูปข้างล่าง จริง ๆ การพล็อตรูปนี้ถ้า
อ่านคู่มือของคำสั่ง quiver ก็สามารถทำได้อยู่แล้ว

ในการวาด phase portrait นั้นจะต้องใช้ความรู้เรื่อง ODE ซึ่งต้องแก้สมการเชิง
อนุพันธ์ โดยกำหนดค่าตั้งต้นที่เหมาะสม โดยแก้สมการตามเส้นแนวดิ่ง x=0 (เกี่ยวกับ equilibrium points) โดยการวาดครึ่งแรกด้วยรหัสดังนี้

y0 = -pi:pi/10:pi;
for i=1:length(y0)
[t,z] = ode45(f, [0 10], [0 y0(i)]);
hold on;
plot(z(:,1), z(:,2), ’r-’, ’LineWidth’, 2.0);
drawnow;
hold off;
end

อีกครึ่งก็เปลี่ยนฟังก์ชันเป็น fb = -f

fb = @(t,x) -f(t,x);
y0 = -pi:pi/10:pi;
for i=1:length(y0)
[t,z] = ode45(fb, [0 10], [0 y0(i)]);
hold on;
plot(z(:,1), z(:,2), ‘r-‘, ‘LineWidth’, 2.0);
drawnow;
hold off;
end

จะได้รูปดังนี้

รูปที่ได้ยังไม่สมบูรณ์ ยังขากการโคจรของลูกตุ้มอีกหลายจุด ที่สำคัญคือ
Heteroclinic orbits ซึ่งคือการเชื่อมต่อการเคลื่อนที่ระหว่าง equilibrium points
ที่แตกต่างกันสองจุดนั่นเอง วิธีการทำงานไม่บอกเอาไว้ให้เป็นการบ้าน แต่รูป
สุดท้ายจะต้องเป็นดังรูปข้างล่าง

GSview 4.9 ออกแล้ว

ใครที่ใช้เลขเวอร์ชัน 4.8 มานานแล้วรู้สึกเบื่อก็ลองเวอร์ชันใหม่นี้ได้เลย
ครับ Obtaining GSview 4.9 หลัก ๆ ก็แค่แก้บักแล้วก็ใช้ zlib กับ bzip2 เวอร์ชันล่าสุด ที่เพิ่มเข้ามาเห็นจะเป็นการสั่งรันได้จาก USB flash drive

ส่วนของคู่กันคือ GhostScript 8.61 ก็ออกแล้วเหมือนกันแต่ไม่รู้ว่าแก้อะไรมั่ง

LyX กับภาษาไทย

การใช้ LyX กับภาษาไทยนั้น ได้ถูกพัฒนามาหลายปีแล้วโดย ดร. ชนพ ตั้งแต่
สมัยเป็นนักเรียนปริญญาเอกที่ออสเตรเลีย ปัจจุบันเอกสารดังกล่าวอาจจะหาย
ไปจากอินเตอร์เน็ตแล้ว แต่จริง ๆ แล้วสามารถทำได้เลยไม่ต้องดูคู่มือ เพราะ
ตัว LyX และคุณชนพ ทำไว้ค่อนข้างดี ผมจะสรุปวิธีการคร่าว ๆ ดังนี้ครับ

  1. ติดตั้ง MiKTeX ภาษาไทยก่อน จะด้วยวิธีไหนก็ได้
  2. จากเมนู Tools->Preferences->Language settings->Language
    ของ LyX ให้ตั้งค่า Default Language เป็น Thai และตรง Language
    package ให้แก้เป็น \usepackage[thai]{babel}
  3. หลังจากเปิดเอกสารใหม่ ก็ให้ไปที่เมนู Document->Settings->
    Language ตั้งค่าภาษาเป็นภาษาไทย
  4. การตัดคำนั้นไม่จำเป็นต้องใช้ SWATH หรือ CTTEX ให้เมื่อยนิ้ว
    เพราะสามารถทำได้ด้วยตา ถึงจะไม่ดีนักแต่ก็สะดวก

เท่าที่ลองใช้ LyX 1.52 (ผมเคยลองใช้ตั้งแต่ปี 1999) พบว่าไม่เหมาะกับผู้
ที่รักการพิมพ์สัมผัส ตัวตารางแบบมองเห็นก็ไม่ได้ดีเท่าไหร่ การตกแต่งก็เสีย
เวลาพอกันกับการนั่งนึกวาดภาพในจินตนาการ

สิ่งที่ผมรอคอยในเวอร์ชันต่อไปก็คือ การแก้ไป TeX ไฟล์ได้โดยตรง แล้ว
ไปแก้เอกสารใน LyX ซึ่งจะสะดวกกว่าการไปตรวจสอบจาก dvi หรือ pdf
เพราะเราสามารถแก้ไขเอกสารได้สองทาง ซึ่งเห็นมีคนไปเรียกร้องให้เพิ่ม
ความสามารถนี้เข้าไปแล้ว แต่รู้สึกว่าจะทำได้ยาก แต่ก็น่าทำนะ