วันจันทร์ที่ 17 กันยายน พ.ศ. 2555

ความรู้ทั่วไปของการใช้ Mathlab


MathLab 22/08/2012

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

a = [ 1, 2, 3; 2, 3, 4; 3, 4, 5]

ซึ่งการกำหนดทำได้โดย 1 แถวของเมตริกซ์จะคั่นด้วยเครื่องหมาย semi colon ในตัวอย่างนี้จึงเป็นเมตริกซ์ 3 คูณ 3 ที่มี element ทั้งหมด   9 ตัว

ใน mathlab ส่วนใหญ่จะมี function พื้นฐานอยู่เป็นจำนวนมากพร้อมที่จะนำมาใช้งาน ตัวอย่างเช่น function ทางคณิตศาสตร์ cos sine tan acos asine atan เหล่านี้เป็นต้น นอกจากนี้ยัง มี built-in functions อย่างเช่น rand(n) จะทำการสุ่มตัวเลขตั้งแต่ 0-1 มาเท่ากับ n คูณ n เมตริกซ์  function ในกลุ่มนี้ก็จะมี magic(n) และ hilb(n) or Hilbert matrix เป็นต้น

ในการระบุสมาชิกของ matrix แต่ละตัวนั้นสามารถทำได้โดยการ ใช้ a(2,1) ก็คือ ต้องการที่จะระบุสมาชิกตัวที่อยู่ใน แถวที่ 2 หลัก ที่ 1 ซึ่งก็คือ 2 นั่นเอง ในการสร้าง element ของ matrix นั้น mathlab ไม่ได้สนใจว่าเราจะสร้าง element ขึ้นมาอย่างไร ยกตัวอย่างเช่น  เวกเตอร์

b = [ -1.3 ,3^2, cos(30)]

สำหรับค่าที่เป็นข้อความสามารถ กำหนดโดยการใช้ single quote ยกตัวอย่างเช่น t1 = ‘BCDE’ และ t2 = ‘A’ ดังนั้นถ้าหากเรานำข้อความทั้งสองมาต่อกัน เราแค่ t3 = [t1, t2] ผลลัพธ์ที่ได้คือ t3 = ABCDE

            บางครั้งเราต้องการ ให้โปรแกรมทำซ้ำโดยการใช้ code ตัวเดิม สัญลักษณืที่นำมาใช้บ่อยๆคือ  colon หรือ :      ตัวอย่างเช่นเราสามารถพิมพ์

>> x = -1: 0.05 : 1 ;

>> for n=1 : 8

         subplot(4,2,n), plot(x,sin(n*pi*x))

     end

บรรทัดแรก หมายถึง กำหนดค่าให้ x เริ่มตั้งแต่ -1 จนถึง 1 โดยการเพิ่มค่าทีละ 0.05

บรรทัดที่สอง เป็น for loop ที่กำหนดให้ n เริ่มต้นจาก 1 จนถึง 8

บรรทัดที่สาม กำหนดให้มีการ plot ตัวกราฟ โดยฟังก์ชัน subplot

นอกจากนี้ยังสามารที่จะใช้ คำสั่ง for counter = [23 11 19 5.4 6] … end

เพิ่มเข้ามาโดยการนับเพิ่มจะสอดคล้อง กับจำนวนที่อยู่ในวงเล็บ คือ ครั้งแรกจะนับ 23 ครั้งต่อไปจะนับ 11 …ตามลำดับ

การวน loop อีกแบบหนึ่งที่น่าสนใจ คือ while loop โดยการที่เราสามารถกำหนดค่าเริ่มต้น เป็นอันดับแรกและค่อยๆวนซ้ำกัน ดังตัวอย่าง

>> s = 1 ; n =1;                       (กำหนดค่าเริ่มต้นให้กับตัวแปร s และ  n ซึ่งเท่ากับ 1)

>> while s+(n+1)^2  < 100       (กำหนดให้มีการวนซ้ำ โดยการตรวจสอบเงื่อนไข ถ้าเป็นจริงก็ให้ทำซ้ำ)

>> n = n+1; s = s+ n^2;

      end

>> [n,s]

ans =6  91                                 (ค่าที่ได้ควรจะมี 2 ค่า)

 

               

 

Programming in mathlab

            M-files เราสามารถแบ่งออกได้เป็น 2 แบบ คือ script files และ function files

สิ่งที่น่าสนใจอย่างหนึ่งใน mathlab คือ การเขียน m-files function ขึ้นมาใช้ ซึ่งขั้นตอนหลักๆมีดังต่อไปนี้คือ

1.      กำหนดชื่อ สำหรับฟังก์ชัน ซึ่งอยู่ในรูปแบบ file.m

2.      บรรทัดแรกของไฟล์จะต้องมี รูปแบบดังต่อไปนี้

Function [list of outputs] = function name (list of input)

ยกตัวอย่างเช่นเราจะกำหนดให้  function[A] = area(a,b,c)

3.      ส่วนหัวของบรรทัดเราสามารถ ทำคำอธิบาย โดยใช้เครื่องหมาย เปอร์เซ็นต์ (%) เช่นเดียวกันกัในLatex

4.      ส่วนสุดท้ายน่าจะเป็นรายละเอียดของโปรแกรม

ตัวอย่างการเขียนโปรแกรมหาพื้นที่สามเหลี่ยม โดยมีความยาวด้านตามตัวแปร a, b และ c

%%%%%%%%comment%%%%%%%%%

Function[A] = area(a,b,c)

S = (a+b+c)/2;

A = sqrt(s*(s-a)*(s-a)*(s-c));

%%%%%%%%EndOfArea%%%%%%%%

ตัวอย่างที่ 2 คือ

%trapaziod rule for integral

h = input('mesh size h =');

h = (0:h:1);

lenx = length(x);

y = x.^2

int = (h/2)*(y(1)+2*sum(y(2:(lenx-1)))+y(lenx))

ซึ่งจะ save ชื่อ file เป็น trapint.m หากจะนำมาใช้ก็แค่พิมพ์เรียก  ชื่อของ file trapint บน command window

 

            สิ่งหนึ่งที่เห็นจนชินตาใน mathlab คือ การ plot surface ซึ่ง function ที่ง่ายๆในการ plot คือ

z = f(x,y) ในการ plot function เราสามารถกำหนด ช่วงของตัวแปรของ x และ y เช่นสมตติให้ 2 อยู่ในช่วง 2-4 และ y อยู่ในช่วง 1-3

โดยการกำหนดช่วงด้วยคำสั่ง

>> x = 2:0.5:4 ; y = 1: 0.5 :3 ;

ซึ่งยังต้องใช้ คำสั่ง meshgrid

>> [x,y] = meshgrid(x,y) จากนั้นก็กำหนดฟังก์ชัน ที่จะ plot เช่นเราต้องการ plot ฟังก์ชัน

>> z = (x-3).^2 – (Y-2).^2

>> mesh(x,y,z)

>> title (‘Saddle’) , xlabel(‘x’), ylabel(‘y’)

 

0 ความคิดเห็น:

แสดงความคิดเห็น

 

Blogger news

Blogroll

About