วิชาการ.คอม - คลังความรู้ ปัญญาไทย เพื่อการศึกษาไทย เพราะเรารักเมืองไทย
เว็บส่งเสริมการเรียนรู้ดีเด่น 2547 (สมาคมผู้ดูแลเว็บไทย)   |   เว็บสื่อวิทยาศาสตร์ดีเด่น 2549 (กระทรวงวิทย์)   |   เว็บการศึกษาที่มียอดผู้เข้าชมสูงสุด 2549, 2550 (TrueHits)
ขอขอบคุณ บริษัท ปตท. จำกัด (มหาชน) และ สสวท ที่ให้การสนับสนุน  
การฝึกเขียนโปรแกรม SciLab ขั้นแนะนำ (โดย MathGuy)
โพสต์เมื่อ: 11:21 วันที่ 30 เม.ย. 2550         ชมแล้ว: 22,221 ตอบแล้ว: 197
น่าจะนับได้ว่า เป็นการนับ 1 ของการที่จะพอมีอะไรแบ่งปันให้กับคนอื่นๆบ้าง ในโลก Internet จากที่เราได้ใช้ประโยชน์จากแหล่งความรู้ ข้อมูลต่างที่มีประโยชน์ต่อเรา ที่มีคนเสียสละเวลา เสียสละแรงกายใจ แบ่งปันให้เราได้ใช้ร่วมกัน

เมื่อถึงจุดๆหนึ่ง เราก็น่าจะได้เริ่ม ทดแทนคุณกลับคืนบ้าง (รับมามากแล้ว เราก็ฝึกที่จะให้ )
.........................................................................................................................

กระทู้นี้ จึงเป็นการแบ่งปัน ในเรื่องการฝึกเขียนโปรแกรม SciLab

เข้าไปดูตรงนี้นะครับ : http://www.champa.kku.ac.th/jeerayut/scilab41/scilab41.html
(1) ถ้ารู้ว่า MatLab, Maple, Mathematica, Maxima, Octave คืออะไร ก็จะรู้ว่า SciLab เป็นพี่น้องกันด้วย
(2) SciLab เป็น Freeware และเข้าใจว่าจะเป็นต่อไปเรื่อยๆ (เช่นเดียวกับ Maxima และ Octave)
(3) ผมเชือว่า SciLab มีความสามารถสูงในการใช้งาน และกำลังจะเข้าไปพิสูจน์ หาคำตอบอันนี้
(4) กระทู้นี้จึงเป็นการเชิญชวน ผู้ที่สนใจ ให้เรียนรู้ไปด้วยกัน
(5) ผู้เรียนควรจะมีพื้นความรู้ทางคณิตศาสตร์ (มัธยมปลายน่าจะ OK) และมีพื้นความรู้ทางการเขียนโปรแกรมคอมพิวเตอร์บ้างพอสมควร (เคยเขียนมาบ้าง ภาษาอะไรก็ได้)
(6) ผมจะแนะนำให้น้อยที่สุด (เท่าที่คิดว่าน่าจะพอเริ่มต้นได้) และจะเน้นการทดลองเขียน การเรียนรู้ด้วยตัวเอง
(7) ถ้ามีผู้ใดที่ใช้โปรแกรมนี้อยู่ และถึงขั้นเชี่ยวชาญแล้ว ก็อยากจะให้มาช่วยๆกัน แลกเปลี่ยนประสบการณ์ครับ
(8) ผู้ที่สนใจ ถ้าได้ทดลองเขียน เรียนรู้ตามไป ถ้าไม่เข้าใจ ก็ให้ post ถามในกระทู้นี้นะครับ


MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

จำนวน 194 ความเห็น, หน้า่ | 1| 2| 3| 4| 5| 6| -7- 8| 9| 10|
ความเห็นเพิ่มเติมที่ 118 11 มิ.ย. 2550 (06:06)
สวัสดีครับ.....ขอร่วมเรียนรู้ด้วยคนครับ
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 119 11 มิ.ย. 2550 (08:45)
ถึงคุณ lekcha

การหาค่าสูงสุด / ต่ำสุดของฟังก์ชัน จำเป็นต้องรู้

1) ธรรมชาติ หรือพฤติกรรมของฟังก์ชัน บนโดเมนที่เราสนใจ

2) จากข้อ (1) จะทำให้เราทราบว่า สามารถเลือกใช้ขั้นตอนวิธี (algoritm) หรือ ระเบียบวิธี(method) ในการแก้ปัญหา หรือหาคำตอบ (ประมาณค่าของคำตอบ) ได้อย่างไร

...........................................................................................................
ผมลองยกตัวอย่างเช่น ฟังก์ช้น y = f(x) = x^2 +10/x สนใจค่า x บนช่วงปิด [1, 2]
ให้เราพิจารณาว่า f มีค่าสูงสุด หรือต่ำสุดหรือไม่ ถ้ามีจะหาค่าได้อย่างไร
...........................................................................................................

จากตัวอย่าง เราอาจจะใช้วิธีทาง calculus หาค่าแม่นตรงออกมาก็ได้ ( dif หาจุดวิกฤติ
แล้วตรวจสอบจุดวิกฤติดังกล่าว)

หรือเราอาจจะใช้ระเบียบวิธีทาง numerical analysis แล้วเขียนโปรแกรม (ที่นี่เราจะใช้ SciLab) เพื่อประมาณค่าคำตอบดังกล่าวก็ได้

การรู้จัก (1) และ (2) สำหรับฟังก์ชัน f บนโดเมนของเรา จึงเป็นสิ่งสำคัญในเบื้องต้นที่เราต้องทราบ

การเขียนโปรแกรมเป็นเรื่องอันดับรองถัดไป ซึ่งสามารถทำได้ เมื่อเรารู้วิธีการเขียน
MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 120 11 มิ.ย. 2550 (10:14)
เขียน code ใน SciLab เพื่อวาดกราฟดูพฤติกรรมของ y = f(x) = x^2 +10/x
บนช่วง [1,2]ได้ดังนี้


-->x=linspace(1,2,100);

-->deff('y=f(x)','y=x^2+10/x');

-->for i=1:100, y(i)=f(x(i)); end

-->plot2d(x,y)

-->


ได้กราฟดังนี้
43345

MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 121 11 มิ.ย. 2550 (16:26)
ถ้าผมต้องการหาค่า ! ของ n ใดๆ หละครับ
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 122 11 มิ.ย. 2550 (18:38)
n! = 1 x 2 x 3 x ... x n

สามารถคำนวณแบบทำซ้ำได้ง่ายๆ โดย กำหนด s=1
แล้วก็ให้ s := s x i เมื่อ i = 1,2,3, ..., n

ได้ code ของ SciLab ดังนี้


-->function m=MyFact(n),
-->s=1,
-->for i=1:n, s=s*i; end,
-->m=s,
-->endfunction

-->MyFact(5)
ans =

120.

-->MyFact(10)
ans =

3628800.

-->

MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 123 11 มิ.ย. 2550 (21:49)
การบ้านครับ
"แปดเหลี่ยม" โดยมีรูป "หกเหลี่ยม" ซ้อนอยู่ข้างใน
-->x=[0.5 1 2 2.5 2.5 2 1 0.5 0.5];

-->y=[2 1 1 2 3 4 4 3 2];

-->plot2d(x,y)

-->a=[0.8 1.0 2.0 2.2 2.0 1.0 0.8];

-->b=[2.5 1.5 1.5 2.5 3.5 3.5 2.5];

-->plot2d(a,b)


แบบนีผมจะได้คะแนนเท่าไรครับ
lekcha เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 3 ครั้ง - ได้รับดาวแล้ว 140 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 124 12 มิ.ย. 2550 (02:34)
diary('h:\xxxxxxxx\xxxxx_5.txt');

//N! = N?(N-1)?(N-1)?????3?2?1

//x=N;for k=N-1

//if N-1 >1 then N=N-1;

//x=x*k;

//end

//x

k=N;// N=จำนวนเต็มใดๆ

if k<1 then k=1,end

x=1;

for j=1:k,x=x*j;

f=x;

end

N

f

diary(0)



ผมได้อย่างนี้ครับ
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 125 12 มิ.ย. 2550 (02:37)
เป็นการบ้านผมเองครับ.......ลองผิดลองถูกตั้งหลายรอบ
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 126 12 มิ.ย. 2550 (02:47)
จงเขียนโปรแกรมเพื่อเก็บข้อมูลที่ไม่เป็น 0 ของสมาชิกเวกเตอร์ ซึ่งมีจำนวนสมาชิก 20 ตัว
โดยเก็บค่าของตัวแปรที่ไม่เป็น 0ไว้ในตัวแปร val พร้อมทั้งระบุตำปหน่งที่พบค่าดังกล่าวไว้ในตัวแร idx
Ex....เวกเตอร์ A มีสมาชิกดังนี้
A = [2 0 2 0 0 1 1 5]
VAL = [2 2 1 1 5]
IDX = [1 3 6 7 8]

เดี๋ยวมาส่งการบ้านครับ ขอเวลาคิดสัก 1/2 วัน
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 127 12 มิ.ย. 2550 (13:48)
เริ่มจาก คหพ#123 ของคุณ lekcha ซึ่งเป็น code การสร้างรูปหกเหลี่ยมในรูปแปดเหลี่ยม
(คัดลอกไว้อีกที)


-->x=[0.5 1 2 2.5 2.5 2 1 0.5 0.5];

-->y=[2 1 1 2 3 4 4 3 2];

-->plot2d(x,y)

-->a=[0.8 1.0 2.0 2.2 2.0 1.0 0.8];

-->b=[2.5 1.5 1.5 2.5 3.5 3.5 2.5];

-->plot2d(a,b)

-->


ได้ผลดังนี้ ( ให้ 9.5 คะแนนเต็ม 10 นะครับ รูป 6 เหลี่ยมถ้าเป็นด้านเท่าก็จะ perfect!)
43400

MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 128 12 มิ.ย. 2550 (13:56)
จาก คหพ#124 ของคุณ Phulandkar

code ที่ post ให้ดู ผมดูแล้วยังไม่ค่อยมั่นใจ
ลองช่วยปรับใหม่
หรืออธิบายให้ฟังหน่อย
หรือลอง run ดูว่าได้ผลตามที่ต้องการหรือเปล่า
MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 129 12 มิ.ย. 2550 (14:12)
สำหรับโจทย์ปัญหาใน คหพ#126 ลองศึกษา code และผล run ต่อไปนี้นะครับ
( ถ้าไม่เข้าใจตรงไหน ก็ถามขอคำอธิบายเพิ่มเติมได้ครับ )


-->function [b]=FindIndex(a,n,x),
-->i=0,
-->for k=1:n,
-->if a(k)==x then i=i+1; b(i)=k; end,
-->end
-->endfunction


-->b=FindIndex([1 0 0 3 0 1 3 3],8,0)
b =

2.
3.
5.

-->b=FindIndex([1 0 0 3 0 1 3 3],8,1)
b =

1.
6.

-->b=FindIndex([1 0 0 3 0 1 3 3],8,3)
b =

4.
7.
8.

MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 130 12 มิ.ย. 2550 (18:23)
N =

6.
f =

720.
ได้คำตอบตามที่ต้องการครับ ลองหลายค่าแล้วครับ
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 131 12 มิ.ย. 2550 (21:15)
OK ครับ code ของ Phulandkar ถูกต้องแล้วครับ
ถ้าปรับเขียนให้เป็นฟังก์ชัน จะได้ดังนี้


-->function f=myFactorial(n),
-->k=n,
-->if k<1 then k=1; end,
-->x=1,
-->for j=1:k,x=x*j; end,
-->f=x,
-->endfunction


ทดสอบการใช้งาน

-->myFactorial(6)
ans =

720.

-->
MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 132 12 มิ.ย. 2550 (21:45)
จาก 126 ครับ


diary('H:\B4913764\week3_6.txt')
//A=[กำหนดเอง 20 ตัว]
Val = [];
Idx = [];
x=1;
for y=1:20
if A(y)<>0 then
Val(1,x) = A(y);
Idx(1,x) = y;
x = x+1;
end
end
A
Val
Idx
diary(0)


ได้ผลดังนี้ครับ

A =

1. 2. 3. 0. 4. 5. 9. 7. 89. 0. 1. 4. 50. 4. 8. 4. 4. 5. 0.
0.
Val =

1. 2. 3. 4. 5. 9. 7. 89. 1. 4. 50. 4. 8. 4. 4. 5.
Idx =

1. 2. 3. 5. 6. 7. 8. 9. 11. 12. 13. 14. 15. 16. 17. 18.


àÂé!´Õ㨨ѧ·Óä´éáÅéÇ
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 133 13 มิ.ย. 2550 (08:35)
Code ใน คหพ#132 ถูกต้องแล้วครับ
( จริงๆ ผมเองยังไม่เคยลองใช้ คำสั่ง diary() เห็นคุณ Phulandkar ใช้สองสามหน เดี๋ยวผมจะไปค้นดูว่าเขาใช้กันยังงัย ... หรือ จะช่วยอธิบายการใช้ให้ฟังหน่อยได้มั้ยครับ )

.......................................................................
ผมปรับ code ให้เขียนในรูปฟังก์ชัน และเก็บไว้ใน Script file ( .sci) เพื่อ load ใช้งานได้ดังนี้ครับ



//ฟังก์ชันสำหรับหาสมาชิกที่ไม่เป็น 0 ในอะเรย์ ให้เก็บทั้งค่า และตำแหน่ง

function [Data_value, Data_index]=NonZero(data,n)
i=0;
for j=1:n
if data(j)<>0 then
i=i+1; Data_value(1,i)=data(j); Data_index(1,i)=j; end
end
endfunction



ทดสอบการใช้งาน (ข้อมูลกี่ตัวก็ได้ ตัวอย่างใช้ 12 ตัว)


-->data=[1 2 0 4 0 0 5 0 7 7 0 3]
data =

1. 2. 0. 4. 0. 0. 5. 0. 7. 7. 0. 3.

-->[Val, Idx]=NonZero(data,12)
Idx =

1. 2. 4. 7. 9. 10. 12.
Val =

1. 2. 4. 5. 7. 7. 3.

-->

MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 134 14 มิ.ย. 2550 (03:34)
43491
การเขียนไฟล์ไดอารี (diary file)

ใช้เก็บข้อมูลที่ดำเนินการบน command window
รูปแบบคำสั่ง
diary(‘filename.xyz’);
…
diary(0);
เมื่อเก็บไฟล์เรียบร้อย ให้ใช้ Scipad เปิดดู
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 135 14 มิ.ย. 2550 (03:37)
43492
ผลที่ได้
Phulandkar เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 9 ครั้ง - ได้รับดาวแล้ว 151 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 136 14 มิ.ย. 2550 (09:24)
ขอบคุณ คุณ Phulandkar ที่ได้แลกเปลี่ยนกันตรงนี้
ต่อไปผมก็จะได้ลองใช้ คำสั่ง diary( 'filename.xxx') กับ diary(0) ดูบ้าง

ปกติผมจะเขียนเป็น script file (.sci) แล้วค่อย execute หรือ load เข้ามาใน SciLab

ส่วนผลการ run ก็ใช้วิธี copy เอาเลย จะวางใน notepad แล้วค่อย save ก็น่าจะได้
ส่วนใหญ่ ก็จะ run แล้ว copy ผล มาขึ้นไว้ที่นี่เลย

แต่มีเครื่องมือช่วยในการจัดเก็บผลการ run จาก command ก็นับว่าสะดวกดี และสามารถเก็บไว้ใช้ได้ภายหลัง (เช่นการสอน การแนะนำ การแลกเปลี่ยนกัน )
MathGuy เก็บเข้า Contact List ส่ง vSMS
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1988 ครั้ง - ได้รับดาวแล้ว 323 ดวง - โหวตเพิ่มดาว

ความเห็นเพิ่มเติมที่ 137 20 มิ.ย. 2550 (20:46)
ขอบคุณสำหรับความรู้ต่างๆคับ

ผมกำลังศึกษาและทำ project เกี่ยวกับ image processing

SciLab พอจะนำ input ที่เป็นสารสนเทศ มาทำการประมวลผลได้รึไม่

ขอบคุณล่วงหน้าครับ
campus (IP:58.8.98.161)

ความเห็นเพิ่มเติม วิชาการ.คอม

ชื่อ / email:
ข้อความ

รูปภาพ หรือ ไฟล์
กรุณาล๊อกอินก่อน เพื่อโพสต์รูปภาพ และ ใช้ LaTex ค่ะ สมัครสมาชิกฟรีตลอดชีพที่นี่
ตัวช่วย 1: CafeCode วิธีการใช้
ตัวช่วย 2: VSmilies วิธีการใช้
ตัวช่วย 3: พจนานุกรมไทย ออนไลน์ ฉบับราชบัณฑิต
ตัวช่วย 4 : dictionary ไทย<=>อังกฤษ ออนไลน์ จาก NECTEC
ตัวช่วย 5 : ดาวน์โหลด โปรแกรมช่วยพิมพ์ Latex เพื่อแสดงสมการบนวิชาการ.คอม

ขอบคุณผู้สนับสนุน

Hot Links

Google
 
ติดต่อลงโฆษณา :   คุณอันนา 086-4907600,
0-2583-2802
และ 086-4907585
สำนักงาน :   0-2642-7828
อีเมล์ :   
Copyright© 2000-2007, Vcharkarn.Com. All rights reserved.
คลิ๊กเพื่อดูสถิติ
รับรองและสนับสนุนโดย

สสวท.

มูลนิธิ พสวท.

พสวท.