MATLAB; you may see different results on different platforms.

หลายคนอาจจะเจอปัญหานี้ ผลจากการคำนวณของ MATLAB บนเครื่องคอมพิวเตอร์สองเครื่องให้ค่าไม่เหมือนกัน ลูกศิษย์อาจจะบอกว่าที่บ้านผมทำได้ ได้ผลดี แต่ทำไมเครื่องที่มหาวิทยาลัยให้ผลไม่เหมือนกัน ในขณะที่อาจารย์ส่ายหน้าและไม่เชื่อ

เรื่องนี้ต้องชม MATLAB ในเรื่องการบริการพอสมควร ผมส่งคำถามไปก็มีการตอบกลับมาไม่เกินสองวัน มีวิศวกรคอยทดสอบปัญหาให้ตลอดเวลา  เรื่องมีอยู่ว่าผมทำงานที่บ้านตอนกลางคืน ในขณะที่ทำงานที่ทำงานตอนกลางวัน อยู่มาวันหนึ่งก็แบกเครื่องโน้ตบุ๊คไปทำงานด้วย นัยว่าสองเครื่องย่อมทำงานการปรับแต่งพารามิเตอร์ได้ดีกว่าเครื่องเดียว ผลปรากฎว่าสองเครื่องให้ผลไม่เหมือนกันครับ

สมมุติฐานแรกเลย เครื่องโน้ตบุ๊คผมเป็น AMD  รัน windows 7 pro (64 bits) และใช้ MATLAB 2010b ในขณะที่เครื่องที่ทำงานเป็น Intel และรัน windows xp sp3 (32 bits)  และใช้ MATLAB 2010a  เลข 32 กับ 64 บิตนั้นหลอนก่อนเพื่อน  ค้นไปค้นมาก็เลยลง MATLAB 2010b เวอร์ชัน 32 bits ในโน้ตบุ๊คเพิ่มเข้าไป ปรากฏว่าคราวนี้ได้ผลต่างกันสามแบบเลยครับ

ก็เลยเขียนไปถาม Matworks เนื่องจากเราใช้ของถูกกฏหมาย เรามีสิทธิใช้บริการเต็มที่ (เวลาถามเขา เขาจะถามเลขไลเซนต์ และข้อมูลต่าง ๆ นานา ด้วย) แน่นอนต้องแนบโปรแกรมไปให้เขาด้วย ผ่านไปหนึ่งวัน ได้รับคำตอบที่น่ากลัวมาก ๆ คือ ผลที่ได้ไม่เหมือนกันนั้น ถูกต้องแล้ว เพราะ MATLAB โปรแกรมคำนวณพีชคณิตเชิงเส้นที่แตกต่างกันออกไปตามแต่แพลตฟอร์ม ทั้งนี้เพื่อประโยขน์ในการเพิ่มความเร็ว (ไรฟะ) ดังนั้นค่าการคำนวณที่ได้ในแต่ละแพลตฟอร์มจะมีค่าต่างกันเล็กน้อย แต่ในกรณีที่การคำนวณใด ๆ ก็แล้วแต่ใกล้ค่า Singular มาก ๆ มันก็จะมีผลของความแตกต่างค่อนข้างชัดเจน กล่าวคือการจำลองการทำงานบางอันเสถียรบนเครื่องนึง แต่กับอีกเครื่องหนึ่งจะไม่เสถียร

อย่างไรก็ตามวิศวกรก็ได้บอกเฉลยวิธีแก้มาให้คือ ให้ MATLAB ใช้  reference BLAS  ซึ่งทำได้ดังนี้

  1. เข้าไปตั้งตัวแปรของระบบที่  System Properties ดังรูป
  2. ที่ Environment variables ให้เพิ่มตัวแปรใน System Variables โดยที่ตัวแปรที่เพิ่มชื่อ BLAS_VERSION และมีค่าเป็น refblas.dll ซึ่งถ้าเกิดตัวแปรนี้มีอยู่แล้ว ก็แค่แก้ค่าดังกล่าวใส่ลงไป

แน่นอนสิ่งที่ได้คือมั่นใจว่าทุกเครื่องจะให้ผลเหมือนกัน แต่หลาย ๆ ฟังก์ชันจะทำงานช้าลง เท่าที่ลองตอนนี้ผลที่ได้เหมือนกันแล้ว ส่วนเรื่องช้านั้นไม่รู้สึกอะไรมากครับ

ใครมีปัญหานี้ก็ไปลองแก้ไขดูได้ครับ

Matlab with LaTeX interpreter

เคยต้องการพล็อตกราฟของสมการคณิตศาสตร์ด้วย Matlab ไหมครับ สิ่งหนึ่งที่น่าปวดหัวคือการผนวกสมการลงไปในกราฟด้วย เช่นอาจจะต้องการพล็อตกราฟ $$e^{2\log x}$$ แล้วต้องการเขียนสมการกำกับที่กราฟ แบบสิ้นคิดทำได้ดังนี้
จะเห็นได้ว่ารูปข้างบนไม่ต้องทำอะไรมาก ใช้คำสั่ง

 text(2,2,'exp(2log(x))')

เป็นอันเสร็จพิธี

แต่การทำอะไรให้มันเต็มความสามารถนั้น ถึงแม้จะไม่ได้คะแนนเพิ่ม แต่ทำให้เอกสารอ่านง่ายดูดี เป็นเรื่องที่ควรกระทำ ดังนั้นใช้ความรูป LaTeX เพิ่มเข้าไปดังนี้

text(2,2,'$e^{2\log(x)}$','interpreter','latex','fontsize',18)

ซึ่งจะได้ผลของสมการที่สวยงามดังรูป
ซึ่งวิธีการนี้ใช้ได้หมดนะครับ ไม่ว่าจะเป็นคำสั่ง xlabel, ylabel, และ title แต่ช้าก่อนมันใช้กับคำสั่ง legend ไม่ได้ และนี่เป็นที่มาของบทความนี้ ในกรณีที่เราต้องการใช้คำสั่ง LaTeX กับ legend โดยสั่งจาก Matlab โดยตรก ไม่ต้องไปใช้เมาส์คลิ๊กขวาแล้วเลือก เราจะทำอย่างไร สมมติว่าผมพล็อตกราฟ $$x^3$$ และ $$x^2$$ บนแกนเดียวกัน แล้วใช้คำสั่ง

legend('x^3','x^2');

ผมก็จะได้กราฟตามรูป

ซึ่งก็จะได้ $$x^3$$ และ $$x^2$$ ที่ดูดีพอสมควร (กรณีนี้คำสั่ง LaTeX บางคำสั่ง รวมไปถึงอักษรกรีกบางตัวจะใช้ไม่ได้) แต่ถ้าต้องการให้ $$x^3$$ และ $$x^2$$ สวยงามขึ้น เราไม่สามารถใช้วิธีการตามข้างบนได้ จะต้องทำดังนี้

s =  legend('$x^3$','$x^2$');
set(s,'interpreter','latex');

ซึ่งก็จะได้กราฟสวย ๆ ตามต้องการครับ ดังแสดงในรูปข้างล่าง

หวังว่าจะมีประโยชน์ไม่มากก็น้อยนะครับ อนึ่งรูปที่โพสลงไปเป็น png คุณภาพอาจจะไม่ดีนัก แต่ของจริงดูดี รับรอง

การดึงข้อมูลจากกราฟใน Matlab

ใช้ Matlab แล้วเคยประสบปัญหาแบบนี้ไหมครับ

“ต้องการพล็อตกราฟใหม่ให้เหมือนรูปเก่า แต่หา m-file ไม่เจอ”

และมีปัญหาต่อเนื่องมา

“มีรูปสองรูปที่พล็อตไว้แล้วต้องการเปรียบเทียบบนแกนเดียวกัน แต่ข้อมูลที่พล็อตไว้ค่าบนแกน x ไม่เหมือนกัน”

ถ้าไม่เคยมีปัญหาจำพวกนี้ ก็ขอยินดีด้วยครับ ที่คุณเป็นนักจัดการข้อมูลที่เก่งและเป็นระเบียบมาก แต่คนส่วนใหญ่ไม่ใช่อย่างนั้น บางส่วนก็แก้ปัญหาด้วยการทำใหม่ทั้งหมด ซึ่งเสียเวลามาก  บางพวกก็แก้ด้วยการไม่ทำ หรือเปรียบเทียบแบบชุ่ย ๆ (ถ้าเป็นนักเรียนนักศึกษาก็ขึ้นอยู่แต่บุญแต่กรรม บางครั้งอาจารย์ที่ปรึกษาก็ไม่ยอมกับบางงาน บางงานก็ยอมเฉย หาบรรทัดฐานไม่ได้ อาจารย์พวกนี้น่าจะไปขายโอเลี้ยงมากว่าเป็นอาจารย์ครับ เพราะโอเลี้ยงบางทีก็ให้มาก ให้น้อย แตกต่างกันตามอารมณ์) หรือไม่ก็ใช้เคลมว่าของดูเองดีอย่างโน้นดีอย่างนี้ แต่ไม่แสดงการเปรียบเทียบ

โม้ซะเยอะ ถ้าเรามีกราฟ Matlab ในมือ แล้วทำ m-file ที่ใช้งานหาย หรือหาไม่เจอ แล้วต้องการนำข้อมูลจากกราฟที่พล็อตไปพล็อตเปรียบเทียบกับข้อมูลอื่น ในคู่มือ Matlab นั้นมีวิธีการ(ซ่อน)อยู่ในคู่มือ ซึ่งน้อยคนนักที่จะหาเจอ ผมเจอวิธีการนี้ตั้งแต่ปี 2007 ได้จดบันทึกเอาไว้ วันนี้เอามาเขียนใหม่แล้วกันครับ

ให้เลือกกราฟที่เราต้องการ จากนั้นให้ใช้คำสั่ง findobj เพื่อสร้างตัวแปรวัตถุของกราฟนั้น ๆ จากนั้นก็ดึงข้อมูลในแกน x และ y มาใช้ได้เลย ตามคำสั่งข้างล่าง

pts=findobj(gca,'type','line');
x = get(pts,'XData');
y = get(pts,'YData');

ในกรณีมีข้อมูลมากกว่าหนึ่งชุด เราสามารถกำหนดเลขดัชนีสำหรับข้อมูลในกราฟได้ดังนี้

y1 = get(pts(1),'YData');
y2 = get(pts(2),'YData');

เสร็จแล้วเราก็สามารถนำข้อมูลจากกราฟไปใช้ได้ตามชอบใจครับ ความรู้ตรงนี้มีประโยชน์แน่นอนครับ อย่าลืม

Multi-sine signal with Matlab

ผมมักมีปัญหาเรื่องการใ้ช้คำสั่งของ Matlab อยู่เนือง ๆ เนื่องจากนาน ๆ จะใช้คำนั้น ๆ ทีนึง ส่วนใหญ่เปิดคู่มือดูก็รู้เรื่องเข้าใจ มีอยู่คำสั่งหนึ่งใช้ทีไรปวดหัวทุกที นั่นคือคำสั่ง idinput เพื่อใช้ในการสร้างสัญญาณ Multi-sine ซึ่งสัญญาณนี้สามารถแสดงได้ดังสมการต่อไปนี้

u(k) = A\displaystyle{\sum^d_{i=1}\sin(\omega k+ \phi_i)}

ในการสั่งงาน Matlab เราต้องมั่นใจว่าย่านความถี่ของสัญญาณที่เราเลือกนั้นมันตรงตามที่เราต้องการหรือไม่ ซึ่งทำได้โดยการแสดง Power spectrum ของสัญญาณ $$u(k)$$ ตรงนี้ใช้ทีไรก็ลืมทุกที คำสั่ง Matlab นั้นสั่งดังนี้ครับ

N = 4000;         % จำนวนแซมเปิลของสัญญาณ
u = idinput(N,'sin',[0 0.2],[-1 1],[30 10 1]);

สำหรับตัวเลือกของ idinput นั้น [0 0.2] คือช่วงความถี่ที่ต้องการ [30 10 1] 30 คือจำนวนสัญญา sine ที่ต้องการ 10 คือ จำนวนของการลอง และ 1 คือ grid skip สำหรับรายละเอียดของเรื่องพวกนี้ไปดูในคู่มือ Matlab เอาเองนะครับ

ปัญหาที่จะพูดถึงคือเรื่องช่วงความถี่ ดูคำอธิบายของ Matlab ทีไรก็ปวดหัวทุกที เอาง่าย ๆ ถ้าต้องการสัญญาณความถี่สูงสุดที่ 50 Hz ความถี่ในการชักข้อมูล (Sampling) ก็ต้องเป็นสองเท่า นั่นคือ 100 Hz หรือทุก ๆ 0.01 วินาที ช่วงความถี่ที่ต้องการคือ [0 0.2] นั้นหมายความว่าความถี่สูงสุดคือ 50*0.2 หรือ 10 Hz นั่นเอง

ในทางปฏิบัติเราจะถูกกำหนดอัตราการชักข้อมูลมาหรือ 0.01 วินาที ถ้าต้องการความถี่สูงสุดของสัญญาณเป็น 30 Hz เราก็ต้องเอา 0.01 วินาทีไปหาความถี่ในการชักข้อมูลก่อนคือ 100 Hz แล้วหารด้วยของเป็น 50 Hz แล้วกำหนดช่วงความถี่ในที่นี้คือ [0 0.6] นั่นเอง

เราจะรู้ได้อย่างไรว่าความถี่ของสัญญาณ Multi-sine อยู่ในช่วงที่ถูกต้อง (ถ้าคำนวณตามข้างบนมันก็ต้องถูกเป็นธรรมดา) แต่เพื่อความมั่นใจในทฤษฏี ปฏิบัติก็ต้องได้ด้วย วิธีการพล็อต Spectrum นั้นก็คือการหาค่ากำลังสองของค่าเฉลี่ยของค่าสมบูรณ์ของค่า FFT ของสัญญาณนั่นเอง ซึ่งทำได้ดังนี้ (ใช้ตัวอย่างความถี่สูงสุด 30 Hz)

u = idinput(N,'sine',[0 0.6],[-1 1],[50 10 1]);
ts = 0.01;                       % sampling time
T = (N-1)*ts;                  % เวลาในหนึ่งคาบ หน่วยเป็นวินาที
                                    % นับจากศูนย์
p = abs(fft(u))/(N/2);       % ค่าเฉลี่ยของค่าสมบูรณ์ของสัมประสิทธิ์ FFT
                                    % ของ u คิดแค่ครึ่งคาบบวก
p = p(1:N/2).^2;             % ค่ากำลังสอง
freq = [0:N/2-1]/T;            % คำนวณค่าความถี่
semilogy(freq,p);              % พล็อตกราฟ semilog แกน x เป็นความถี่
xlabel('Hz');

ผลที่ได้แสดงได้ตามรูปข้างล่าง

หวังว่าคงได้ประโยชน์บ้างนะครับ

Control Tutorials for Matlab

ปัจจุบันถ้าใครเข้าเว็บ Matworks บ่อย ๆ จะพบว่าตัวเว็บมีบริการทางการศึกษาฟรี ๆ ให้มากมาย เพียงแค่สมัครสมาชิกก็จะได้รับสิทธิ์เข้าไปดูไฟล์ วิดีโอต่าง ๆ มากมาย รวมทั้งไฟล์ในหนังสือต่าง ๆ ด้วย

ช่วงนี้ต้องกลับมาทำงานกับ Matlab อีกครั้ง ในขณะที่มีความตั้งใจอย่างยิ่งที่จะเปลี่ยนไปใช้ของฟรีอย่าง Scilab ที่นับวันจะยิ่งดูดีขึ้นมาก แต่ต้องขอบอกไว้ก่อนนะครับ โปรแกรมฟรี ๆ เหล่านี้ในอนาคตเมื่อมีคนนิยมมาก สิ่งที่ตามมาก็คือเรื่องของการบริการ ถ้าตัวผู้ผลิตต้องการจะบริการผู้ใช้เต็มเวลา การเรียกเก็บเงินตามค่าแรงก็คงจะมีเป็นปกติ เหมือนเช่น โปรแกรมตระกูล M พวก Maple, Mupad และ Mathematica ที่เมื่อก่อนก็ฟรี แต่ภายหลังต้องใช้เวลาในการตอบคำถามผู้ใช้มาก ๆ ก็ต้องเก็บเงินบ้าง เก็บไปเก็บมาติดใจก็เลยเก็บแพงมาก

เอาหละกลับมาที่เรื่องที่จะพูดในวันนี้ครับ Control Tutorials for Matlab

ซึ่งเป็นบริการติว Matlab ผ่านเว็บ ที่เป็นผลงานมีรางวัลของศาสตราจารย์ Dawn Tilbury คนสวย (สวยจริง ๆ เคยเจอตัวเป็น ๆ) ตอนนี้ทางเจ้าของได้เอาเวอร์ชันที่ไว้ขาย (ผมมีแผ่นที่เมืองไทย ซื้อไว้ตั้งแต่ปี 2000) มาแจกฟรีบนเว็บแล้ว (อาจจะแจกตั้งนานแล้วแต่ผมไม่ได้ดู)

สำหรับผู้ที่สนใจในวิชาวิศวกรรมระบบควบคุม เว็บนี้ดีมาก ๆ สำหรับการใช้งาน Matlab เพื่อออกแบบระบบควบคุม โดยที่ไม่พึ่งเครื่องมือแบบปิดตาใช้มือปรับอย่างเดียวแบบ LTItools เพราะการออกแบบโดยทำตามในเว็บเป็นการออกแบบที่ผู้ออกแบบพึงต้องรู้รายละเอียดในการออกแบบพอสมควร

ตัวเว็บมีตัวอย่างการออกแบบทางเครื่องมือกลต่าง ๆ มากมาย โดยใช้เทคนิคต่าง ๆ กัน รวมไปถึงการแนะนำการใช้งาน Matlab เบื้องต้นด้วย ลองใช้กันดูนะครับ

Hold all

ทุกคนที่เคยใช้ Matlab คงจะไม่มีใครไม่เคยใช้ฟังก์ชัน hold on หรือ hold off  ที่ blog ของ Loren มีการนำเสนอตัวเลือกของฟังก์ชัน hold นั่นคือ hold all และเหมือนทุกครั้ง ผมก็พึ่งรู้ว่ามีงี้ด้วย

ยกตัวอย่างปัญหาที่มักเกิดขึ้นเสมอ ๆ แล้วกันครับ เวลาเราพล็อตกราฟเพื่อเปรียบเทียบ เอาตามตัวอย่างของ Loren แต่นำเสนอให้เข้ากับสถานการณ์จริงมากขึ้นคือ สมมติว่า  เราสร้างฟังก์ชัน sin แล้วพล็อตดังนี้

t = 0:0.005:1;
f = sin(2*pi*10*t);
plot(t,f)

ซึ่งเราก็จะได้กราฟดังรูปsin

Continue reading

จงเชื่อคำเตือนของ MATLAB

ผมเองรู้เรื่องตัวแปรที่ไม่ต้องกำหนดขนาดก่อนใช้งานมานานแล้ว ซึ่งเป็นที่รู้กันดีว่าการใช้ตัวแปรแบบนี้มันทำให้โปรแกรมทำงานช้าลง แต่ไม่เคยรู้มาก่อนเลยว่ามันจะช้าขนาดนี้

ผมจำเป็นต้องวาดกราฟของการลู่เข้าของค่าพารามิเตอร์ซึ่งมีประมาณ 2 หมื่นค่า อาจจะสร้างเล่น ๆ ได้ดังนี้

theta = [];

for ii = 1:20000
theta(1:20,ii) = rand(20,1);
end

ลองรันชุดคำสั่งข้างบนดู จะพบว่าลุกไปกินกาแฟหรือเข้าห้องน้ำตัวโปรแกรมก็อาจจะยังทำงานไม่เสร็จ มาลองแก้ไขชุดคำสั่งข้างบน โดยเพิ่มบรรทัดขึ้นอีกหนึ่งบรรทัด (การเพิ่มคำสั่งเข้าไปน่าจะทำให้โปรแกรมทำงานช้าลง) ดังนี้

theta = [];

theta = zeros(20,20000);
for ii = 1:20000
theta(1:20,ii) = rand(20,1);
end

ลองรันชุดคำสั่งที่สองดู ยังไม่ทันกระพริบตาก็เสร็จแล้ว ซึ่งชุดคำส่งแรกใช้เวลาประมาณ 170 วินาที เกือบ ๆ สามนาที ในขณะที่ชุดคำสั่งที่สองใช้เวลาเกือบ 0.1 วินาที ซึ่งต่างกันมากทีเดียว

ก็ไม่แปลก เพราะเวลาไม่ได้กำหนดขนาดของอะเรย์ เวลามีการขยายหรือทำอะไรกับมัน ย่อมน่าจะมีกระบวนการต่าง ๆ พอสมควร (ผมไม่รู้และไม่สนใจ) แต่ที่แปลกคือมันต่างกันขนาดนี้เลยเหรอ ดังนั้นแล้วเวลาใช้งาน MATLAB ก็ควรจะใส่ใจต่อคำเตือนของ IDE ของ MATLAB ด้วย

Why shouldn’t use determinant to check the singularity of matrices

เป็นที่รู้กันมาตั้งแต่ชั้นมัธยมแล้วว่าเราจะหาส่วนกลับของเมตริกซ์ได้ก็ต่อเมื่อค่า determinant ไม่
เท่ากับเมตริกซ์ 0 พอเรียนสูงขึ้นเขาก็บอกว่าไม่ให้ทำแบบนี้นะ เพราะสภาวะทางตัวเลขที่คำนวณ
ด้วย determinant นั้นไม่ดี ให้ตรวจสอบด้วย Rank และการหา Rank ของเมตริกซ์ที่ดีที่สุดก็ให้ใช้
Singular Value Decomposition ซึ่งเมตริกซ์ที่จะหาส่วนกลับได้นั้นจะต้อง full Rank

ส่วนตัวไม่เคยเชื่อคำแนะนำนี้เลยครับ เพราะไม่เคยเจอ ตัวอย่างที่ได้เห็นส่วนใหญ่ก็ตัวเลขที่มัน
แปลก ๆ วันนี้เจอแล้วครับ

     3825       -1713       -1061        -497         710        -502       -3471      3136
    -1713        3834       -1632         161        -527         722        -412      -3561
     -1061       -1632        4563         983        -109       -419       4004      -1222
      -497         161         983         315        -178          23           832     -978
        710        -527        -109        -178         415        -218         -29       1132
      -502         722        -419          23        -218         431          55        -149
     -3471        -412        4004         832         -29          55        6640     -1265
      3136       -3561       -1222        -978        1132        -149     -1265     7539

ค่า determinant ของตัวเลขชุดนี้คือ –54413 นั่นหมายความว่าเราต้องหาส่วนกลับของเมตริกซ์
ตัวนี้ได้สิ แต่ไม่ใช่เลย ถ้าใช้คำสั่ง rank ใน MATLAB เราจะได้ 7 ซึ่งเมตริกซ์ไม่ full rank ถ้าใช้
svd หา จะได้ rank เป็น 6 หมายความว่าเมตริกซ์นี้หาส่วนกลับไม่ได้

เชื่อแล้วครับผม

ปล. ถ้าคิดด้วยมือ determinant จะไม่ผิดนะครับ

function reshape ของ MATLAB

เป็นฟังก์ชันที่ถ้าใช้บ่อยแล้วจะดี เพราะการกระทำใด ๆ ในรูปเมตริกซ์โดยการหลีกเลี่ยงการใช้
การวนลูปแล้วกระทำกับตัวเลขทีละตัวจะทำให้การคำนวณโดยใช้ MATLAB เร็วขึ้น

ปัญหาของผมคือผมมีข้อมูล

reshape1

ผมต้องการให้เป็นแบบนี้

reshape2 ในคู่มือของ MATLAB บอกว่าให้ใช้คำสั่ง reshape ซึ่งมีวิธีการใช้ดังนี้

B = reshape(A,m,n)
โดยที่ A คือเมตริกซ์ที่ต้องการจะทำการเปลี่ยนแปลง
m และ n คือจำนวนแถวและหลัก

ถ้าผมใช้ B = reshape(y,[],1)  ผมจะได้

reshape3.

ซึ่งไม่ใช่สิ่งที่ต้องการ คิดอยู่ต้องนานว่าจะทำอย่างไร สรุปว่าก็แค่ B = reshape(y’,[],1) นั่นก็
คือทำการ transpose ก่อนนั่นเอง

 

 

คู่มือที่ดีที่สุดของ MATLAB เท่าที่เคยเห็นมา

ผมว่าเกือบร้อยทั้งร้อยเวลาใช้งาน MATLAB แล้วจะมีปัญหาคือไม่มีคู่มือ อย่างดีก็แค่พิมพ์

help command

ซึ่งคำสั่งที่จะขอความช่วยเหลือก็จะเป็นแค่คำสั่งที่รู้จัก แล้วเราก็ไม่มีทางรู้ว่า MATLAB สามารถทำ
อะไรได้บ้างนอกจากอ่านคู่มือให้ครบทุกหน้า ซึ่งใครจะทำ วันนี้ไม่ว่างแต่อยากดูคู่มือ MATLAB ว่า
ดีแค่ไหน (ปัจจุบันดีขึ้นมาก)  แล้วผมก็พบรูปข้างล่างนี้ รูปข้างล่างนี้พอได้ในหน้า Types of
MATLAB ซึ่งในแต่ละรูปจะเป็นรูปที่แสดงให้เราเห็นทันทีเลยว่าสิ่งที่เราได้จากคำสั่งหล่านี้จะทำ
อะไรให้เราได้บ้าง แต่ละรูปก็จะมีชื่อคำสั่งที่สามารถเชื่อมโยงเราไปยังคู่มือของคำสั่งนั้น ๆ ได้

 matlab1

สุดยอดดีมาก ๆ โดยเฉพาะอย่างยิ่ง การพล็อตรูป 3 D ดูแค่นี้ชัดเลยนะครับไม่ต้องไปหาเพิ่มเติมที่
ไหนอีก

 

 matlab2

ด้วยความสัตย์จริง พึ่งรู้ว่ามีอย่างนี้ด้วย