|
การฝึกเขียนโปรแกรม SciLab ขั้นแนะนำ (โดย MathGuy)
โพสต์เมื่อ:
11:21 วันที่ 30 เม.ย. 2550 ชมแล้ว:
10,473
ตอบแล้ว:
181
วิชาการ.คอม > ครูอาจารย์
วิชาการ.คอม > ครูอาจารย์ > ครูคุยทั่วไป วิชาการ.คอม > ครูอาจารย์ > การเรียนการสอน วิชาการ.คอม > ครูอาจารย์ > เทคนิควิธีการสอน
น่าจะนับได้ว่า เป็นการนับ 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 ถามในกระทู้นี้นะครับ
ผมพยายามแปลง code Matlab ในการสร้างรูป Fractol ให้เป็น SCilab กรุณาช่วย ดูและให้คำแนะนำด้วยครับ function M=Mandelbrot(re,im,m,tol,ma); // MANDELBROT computes and displays the Mandelbrot set // M=Mandelbrot(re,im,m,tol,ma); computes the Mandelbrot set defined // by the behavior of the iteration x(n+1)=x(n)^2+nu whre nu and x(n // are complex numbers. Starting with x(0)=0 we compute all values // nu on a grid [re(1),re(2)]x[im(1),im(2)] with grid points in each // direction, the iteration stops if |x(n)|>tol or n=ma // and then n defines a color of the pixel at location x(0) in the result M. regrid(m)=0; imgrid(m)=0; M(m)=0; M(m,m)=0; // construct grid for j=1:m, regrid(j)= re(1) + (j-1)*(re(2)-re(1))/(m-1); imgrid(j)= im(1) + (j-1)*(im(2)-im(1))/(m-1); end realpart=0; imagpart=0; for j=1:m, for k=1:m, realpart=regrid(j); imagpart=imgrid(k); // initialize variables for iteration nu(1)=realpart; nu(2)=imagpart; re_xn=0; im_xn=0; re_xn1=0; im_xn1=0; n=0; while sqrt(re_xn*re_xn+im_xn*im_xn)<=tol | n<ma; // splitted into real and imaginary parts re_xn1=(re_xn*re_xn)-(im_xn*im_xn)+nu(1); im_xn1=(2*re_xn*im_xn)+nu(2); re_xn=re_xn1; im_xn=im_xn1; n=n+1; end; M(j,k)=n; end; end; // show picture endfunction 22 (IP:202.12.97.111) นำไฟล์เสียง มา วาดเป็นกราฟได้รึป่าวคับ wirachot_ben@hotmail.com (IP:222.123.68.25) code fractal จาก MatlaB ไปเป็น scilab function Mandelbrot(iter,pixel) // mandelbrot uses iter = 23, pixel = 400. // MANDELBROT(ITER,PIXEL) draws the Mandelbrot set; // ITER gives the number of iterations and // PIXEL indicates the number of points on the x-axis. // MANDELBROT uses iter = 23, pixel = 400. // This file was generated by students as a partial fulfillment // for the requirements of the course "Fractals", Winter term // 2004/2005, Stuttgart University. // Author : Jochen Schurr // Date : Nov 2004 // Version: 1.0 // default setting // decompose x- and y-axis according to the chosen // proportion of r = 3:4. // ใน scilab ต้องกำหนด i ด้วย มันไม่รู้จัก i=(-1)^(0.5) r = 3/4; x = linspace(-2.5,1.5,pixel); y = linspace(-1.5,1.5,round(pixel*r))'; // create the matrix C containing all pixel // to be analysed. [Re,Im] = meshgrid(x,y); C = Re + i * Im; // The matrix B assigns a number to every pixel which is // characteristic with respect to the velocity of divergence. // Therefore B and C have the same dimension. B = zeros(round(pixel*r),pixel); Cn = B; // C0 = 0+0i for l = 1:iter Cn = Cn.*Cn + C; // performing the map B = B + (abs(Cn)<2); // if |cn| > 2 the sequence diverges end; // plot settings Matplot(B); endfunction 22 (IP:202.12.97.111) นี่เป็นอีก code fractal หนึ่งที่แปลงได้ครับ ตอน run ต้องกำหนด i ด้วยนะครับ function Julia(c,k,v) // Julia uses c = 0.2+0.65i, k = 14, v = 500. // JULIA(C,K,V) draws the Julia set with the following parameters: // c is a complex number used in the map f(z) = zฒ + c. // k gives the number of iterations // v determines the number of points on the x-axis. // JULIA uses c = 0.2+0.65i, k = 14, v = 500. // This file was generated by students as a partial fulfillment // for the requirements of the course "Fractals", Winter term // 2004/2005, Stuttgart University. // Author : Sylvia Frey // Date : Nov 2004 // Version: 1.1 // default settings if rand() < 3 c = 0.2+0.65*i; k = 14; v = 500; end // radius of the circle beyond which every point diverges r = max(abs(c),2); // divide the x-axis d = linspace(-r,r,v); // create the matrix A containing complex numbers A = ones(v,1)*d+i*(ones(v,1)*d)'; // create the point matrix B = zeros(v,v); // iteration for s = 1:k B = B+(abs(A)<=r); // the map A = A.*A+ones(v,v).*c; end; // plot settings Matplot(B); xset("colormap",jetcolormap(64)) endfunction 22 (IP:202.12.97.111) code ใน คหพ#164 เป็น code ที่เขียนได้กระทัดรัดมาก ผมปรับให้เป็นดังนี้ function MDB() x=linspace(-2.5,1.5,400); y=linspace(-1.5,1.5,300); [Re,Im]=meshgrid(x,y); C=Re+%i*Im; B=zeros(300,400); Cn=B; for j=1:23 Cn=Cn.*Cn+C; B=B+(abs(Cn)<2); end Matplot(B) endfunction เมื่อ run แล้วได้ผลดังนี้ ![]() คัดลอกมาจากกระทู้ : http://www.vcharkarn.com/include/vcafe/showkratoo.php?Pid=101548 โดยคุณ gte723s ................................................................................................................... SCILAB เป็นโปรแกรมภาษาขั้นสูงที่ถูกพัฒนาขึ้นโดยความร่วมมือกันระหว่างนักวิจัยจากสถาบัน Institut National De Recherche En Informatique Et En Automatique (INRIA) และ École nationale des ponts et chausses (ENPC) ประเทศฝรั่งเศส ตั้งแต่ปี ค.ศ. 1990 โดยมีจุดมุ่งหมายเพื่อใช้ในการคำนวณเชิงตัวเลขและแสดงผลกราฟริกที่ซับซ้อน นอกจากนี้โปรแกรม SCILAB ยังเป็นโปรแกรมที่ให้ฟรี (ไม่ต้องเสียเงินค่าลิขสิทธิ์ซอฟต์แวร์) ผู้อ่านสามารถดาวน์โหลดได้จาก http://www.scilab.org วิธีการใช้งานโปรแกรม SCILAB ไม่ยากครับ เมื่อเข้าใจแล้วก็สามารถที่จะนำมาใช้ในการแก้ไขปัญหาทางคณิตศาสตร์ ฟิสิกส์ และวิศวกรรม ได้ ตัวอย่างเช่น การหาตัวคูณร่วมน้อยและตัวหารร่วมมาก ถ้ากำหนดให้ p คือเวกเตอร์ของเลขจำนวนเต็มบวก (positive integer) หรือเวกเตอร์ของพหุนาม (polynomial) โปรแกรม SCILAB สามารถคำนวณหาตัวคูณร่วมน้อยและตัวหารร่วมมากได้โดยใช้คำสั่ง lcm และ gcd ตามลำดับ ตัวอย่างเช่น -->p = int16([12 15 30]) //ทำให้เป็นเลขจำนวนเต็มขนาด 16 บิต -->pp = lcm(p) //นั่นคือ ตัวคูณร่วมน้อยของ 12, 15, และ 30 คือ 60 pp = 60 -->qq = gcd(p) //นั่นคือ ตัวหารร่วมมากของ 12, 15, และ 30 คือ 3 qq = 3 นอกจากนี้คำสั่ง lcm และ gcd ยังสามารถใช้หาตัวคูณร่วมน้อยและตัวหารร่วมมากพหุนามได้เช่นกัน ตัวอย่างเช่น -->x = poly(0, 'x'); //กำหนดให้ x เป็นตัวแปรพหุนาม -->p = [x^2 5 * x - 14, x^2 12 * x + 35] //พหุนาม และ p = 2 2 - 14 - 5x + x 35 - 12x + x -->lcm(p) ans = 2 3 70 + 11x - 10x + x -->gcd(p) ans = - 7 + x Website แนะนำการใช้งานโปรแกรม SCILAB เบื้องต้น http://home.npru.ac.th/~t3058/Scilab.html ขอบคุณ คุณ gte723s ที่ให้ link แนะนำการใช้งานโปรแกรม ที่ดีมากครับ ขอโปรกแรม CAI graph หน่อย B.C._Hacker_2@hotmail.com (IP:124.120.242.60) ช่วยหนูทีนะคะ..พอดีหนูทำสัมมนาเรื่องการวาดกราฟด้วย SCILAB ค่ะที่มหาวิยาลัย โดยหนูต้องตอบคำถามอาจารย์เมื่อพูดเสร็จค่ะ..แต่หนูตอบคำถามอาจารย์ไม่ได้อยู่หลายคำถามทีเดียวค่ะ...จึงขอรบกวนอาจารย์ช่วยตอบคำถามหน่อยนะคะ...ขอบคุณล่วงหน้าค่ะ (หนูต้องตอบคำถามอาจารย์ในวันที่ 7/9/50 ค่ะ) - SCILAB ย่อมาจากอะไรคะ..(หนูหาไม่เจอค่ะ..เลยต้องรบกวนอาจารย์ค่ะ) - plot(y) ที่กำหนดพารามิเตอร์ x = 1 จะวาดกราฟแล้วเหมือนกับ plot (1,y) มั้ยคะ คือหนูทดลองปรากฏว่ามันต่างกัน หนูเกรงว่าหนูจะใช้คำสั่งผิดค่ะ เลยลองถามอาจารย์ดูค่ะ - อาจารย์คะ ใน SCILAB มีสีทั้งหมด 32 สีใช่มั้ยคะ (กลัวจะตอบอาจารย์ผิดอ่ะค่ะเลยลองถามอาจารย์ปิยะดูค่ะเพื่อความมั่นใจ) - อาจารย์คะ...nb_colors มีค่าสูงสุดที่ 30 ใช่มั้ยคะ เพราะว่าหนูใส่เยอะกว่านี้จะ error ค่ะ ha_moo12@hotmail.com (IP:58.9.41.142) ถ้าต้องการเขียนภาษา c++ โจทย์ y = x^n เขียนยังไงค่ะ รบกวนท่านผู้รู้ช่วยด้วยค่ะ sineenad_new@yahoo.com (IP:203.148.253.83) มันแสดงผลยังไงอ่ะ - (IP:124.120.235.217) เขียน scilab ไม่เป็นทำไงดีค่ะ หนู่ได้ทำโปรเจ็กคะ Egyptian fraction คะ ต้องเริ่มยังไงคะ vichaiwong1@hotmail.com (IP:202.28.117.237) ตัวอย่างการหา 1/x + 1/y +1/z + 1/w =1 function EFraction(n) for i=2:n for j=(i+1):n for k=(j+1):n for m=(k+1):n if ((j*k*m+i*k*m+i*j*m+i*j*k)==(i*j*k*m)) then x=[i j k m]; disp(x); end end end end end endfunction ผลการ run-->EFraction(100) 2. 3. 7. 42. 2. 3. 8. 24. 2. 3. 9. 18. 2. 3. 10. 15. 2. 4. 5. 20. 2. 4. 6. 12. --> splitting method สูตร 1/x = 1/x+1 + 1/x(x+1) ให้ p/q เป็นเศษส่วนอย่างตำ โดยที่ p และ q และ p/q น้อยกว่า 1 ถ้าเขียน scilab ทำยังไงคะ ขอบคุณคะ vichaiwong1@hotmail.com (IP:202.28.117.237) ต้องเริ่มต้นวิเคราะห์ว่า 1) เรามีอะไร เรากำหนดอะไรก่อนบ้าง 2) เราต้องการทำให้ได้อะไร จากข้อ (1) ตอบคำถาม 2 ข้อนี้ให้ได้ก่อนนะครับ ถึงจะเริ่มเขียนโปรแกรมได้ ไม่เข้าใจเลยอะ ? .... แต่กะทำไม่เปนๆ อยากฝึกบ้าง ฮิฮิ อยากเปนโปรแกรมเมอร์ๆๆ เด็กๆ (IP:203.146.82.209) ความเห็นเพิ่มเติมที่ 179 19 มี.ค. 2551 (15:11) Nice site! Nikolet (IP:195.75.146.229) ความเห็นเพิ่มเติมที่ 180 19 พ.ค. 2551 (21:54) สวัสดีค่ะหนูเป็นนักศึกษาชั้นปีที่ 4 กำลังทำโปรเจคเกี่ยวกับการตรวจวัดอัตราการเต้นของหัวใจ โดยใช้โปรแกรม matlab แล้วอาจารย์ให้กราฟคลื่นหัวใจมาค่ะแล้วให้หาจุดสูงสุดและจุดต่ำสุดของกราฟ ค่ะ แต่ว่าหนูไม่มีพื้นฐานโปรแกรมที่ว่านี้เลย จึงอยากขอคำแนะนำเกี่ยวกับโค๊ดที่ใช้เขียนอะค่ะ ขอบคุณล่วงหน้ามากนะค่ะถ้าช่วยแนะนำเพราะว่าอาจารย์ให้งานมานานแล้วพยายามทำแต่ก็ทำไม่ได้สักทีอะค่ะ ขอบคุณค่ะ unun_kukki@hotmail.com (IP:125.26.108.41) ความเห็นเพิ่มเติมที่ 181 20 พ.ค. 2551 (16:41) ลองเริ่มต้นง่ายๆนะครับ สมมติว่ามีฟังก์ชัน y=f(x)=3+5x-x^2 และต้องการหาค่าสูงสุด เราจะเขียน code หาค่าสูงสุดได้อย่างไร
ผมแนะนำดังนี้ครับ - ต้องเริ่มจาก ตรวจสอบว่าเรามีพื้นฐานการเขียนโปรแกรมมาแล้วอย่างไรบ้าง - หากไม่มีพื้นฐานเลย อันนี้ก็ต้องเริ่มต้นนับหนึ่งกันเลยทีดียว
ที่สำคัญ เราต้องเริ่มต้นเองก่อน หากมีปัญหา น่าจะมีคนช่วยดู ช่วยปรับ code ให้ได้ |