สาขาวิชา : เทคโนโลยีสารสนเทศ
การเขียนโปรแกรมในแมทแล็บ
ผู้ประกอบการแมทแล็บ
· คำสั่งวนรอบ
วงจรสำหรับ
ไวยากรณ์
สำหรับ count=start:step:final
คำสั่ง MATLAB
คำอธิบาย
นับ - ตัวแปรวนซ้ำ,
start – ค่าเริ่มต้น
สุดท้าย – ค่าสุดท้าย
ขั้นตอน - ขั้นตอนที่การนับเพิ่มขึ้นในแต่ละรายการที่ตามมาในลูป
การวนซ้ำจะสิ้นสุดลงทันทีที่ค่าการนับมากกว่าค่าสุดท้าย
ตัวอย่าง
ปล่อยให้จำเป็นต้องได้รับตระกูลของเส้นโค้งสำหรับ x€ ซึ่งระบุโดยฟังก์ชันขึ้นอยู่กับพารามิเตอร์
y (x, a) = e -ax บาป x,
สำหรับพารามิเตอร์ค่าตั้งแต่ -0.1 ถึง 0.1 ด้านล่างนี้คือรายการไฟล์โปรแกรมสำหรับแสดงกลุ่มเส้นโค้ง
รายการโปรแกรม
เอ็กซ์ = ;
สำหรับ = -0.1:0.02:0.1
y = ประสบการณ์ (-a*x).*sin(x);
จากการรันโปรแกรม หน้าต่างกราฟิกจะปรากฏขึ้นพร้อมกลุ่มเส้นโค้งที่ต้องการ
วงจรในขณะที่
ไวยากรณ์
ในขณะที่สภาพวนซ้ำ
คำสั่ง MATLAB
คำอธิบาย
การวนซ้ำจะทำงานตราบเท่าที่เงื่อนไขการวนซ้ำเป็นจริง ในการตั้งค่าเงื่อนไขการดำเนินการแบบวนซ้ำ อนุญาตให้ดำเนินการเชิงสัมพันธ์ต่อไปนี้:
การตั้งค่าเงื่อนไขที่ซับซ้อนมากขึ้นทำได้โดยใช้ตัวดำเนินการเชิงตรรกะ ตัวดำเนินการเชิงตรรกะได้รับในตารางต่อไปนี้
ตัวอย่าง
ผู้ประกอบการสาขา
ตัวดำเนินการแบบมีเงื่อนไขถ้า
ไวยากรณ์
ถ้าเงื่อนไข
คำสั่ง MATLAB
คำอธิบาย
หากเงื่อนไขเป็นจริง คำสั่ง MATLAB ที่อยู่ระหว่าง if และ end จะถูกดำเนินการ และหากเงื่อนไขไม่เป็นความจริง คำสั่งที่อยู่หลังจุดสิ้นสุดจะถูกดำเนินการ
ตัวอย่าง
ตัวดำเนินการแบบมีเงื่อนไขอย่างอื่น
ไวยากรณ์
ถ้าเงื่อนไข1
มิฉะนั้นเงื่อนไขที่ 2
………………………
มิฉะนั้นเงื่อนไข
คำอธิบาย
ขึ้นอยู่กับการปฏิบัติตามเงื่อนไขเฉพาะ สาขาที่เกี่ยวข้องของโปรแกรมจะทำงาน หากเงื่อนไขทั้งหมดเป็นเท็จ คำสั่งที่วางหลังจากนั้นจะถูกดำเนินการ
ตัวอย่าง
ผู้ดำเนินการสวิตช์
ไวยากรณ์
สลับตัวแปร
มูลค่ากรณี1
มูลค่ากรณีที่ 2
……………………
กรณีความหมาย
แต่ละสาขาถูกกำหนดโดยคำสั่ง case และถูกป้อนเมื่อตัวแปรคำสั่ง switch รับค่าที่ระบุหลัง case หรือค่าใดค่าหนึ่งจากรายการ case หลังจากดำเนินการสาขาใด ๆ สวิตช์จะออกและค่าที่ระบุในกรณีอื่น ๆ จะไม่ถูกตรวจสอบอีกต่อไป หากไม่พบค่าที่เหมาะสมสำหรับตัวแปร สาขาของโปรแกรมที่สอดคล้องกับอย่างอื่นจะถูกดำเนินการ
ตัวอย่าง
การหยุดชะงักของวงจร สถานการณ์พิเศษ
ผู้ดำเนินการหยุดพัก
ไวยากรณ์
ตัวดำเนินการแบ่งใช้เพื่อจัดระเบียบการคำนวณแบบวน: สำหรับ...สิ้นสุด ในขณะที่...สิ้นสุด เมื่อตรงตามเงื่อนไข
ถ้าเงื่อนไข
คำสั่งแบ่งจะสิ้นสุดการวนซ้ำ (สำหรับหรือในขณะที่) และคำสั่งที่อยู่ในบรรทัดต่อไปนี้จะถูกดำเนินการ ในกรณีของลูปซ้อนกัน ให้แยกออกจากลูปด้านใน
การจัดการข้อยกเว้น ผู้ดำเนินการพยายาม… จับ
ไวยากรณ์
คำแถลงที่มีการประหารชีวิต
อาจนำไปสู่ข้อผิดพลาด
คำสั่งที่จะดำเนินการ
เมื่อเกิดข้อผิดพลาดในบล็อก
ระหว่างพยายามและจับ
คำอธิบาย
โครงสร้าง try...catch ช่วยให้คุณสามารถหลีกเลี่ยงสถานการณ์ข้อยกเว้น (ข้อผิดพลาดที่นำไปสู่การยุติโปรแกรม เช่น การเข้าถึงไฟล์ที่ไม่มีอยู่จริง) และดำเนินการบางอย่างหากเกิดขึ้น
ตัวอย่าง
ฟังก์ชั่นการบริการ
แสดง– ส่งออกข้อความหรือค่าของตัวแปรไปยังหน้าต่างคำสั่ง
ป้อนข้อมูล– ร้องขออินพุตจากแป้นพิมพ์ ใช้เมื่อสร้างแอปพลิเคชันด้วยอินเทอร์เฟซบรรทัดคำสั่ง
ประเมินผล – ดำเนินการเนื้อหาของสตริงหรือตัวแปรสตริง เช่น คำสั่ง MATLAB
ชัดเจน– ลบตัวแปรสภาพแวดล้อมการทำงาน
กับแอลซี– ล้างหน้าต่างคำสั่ง
มากกว่า ข้อมูลโดยละเอียดคุณสามารถเรียนรู้เกี่ยวกับฟังก์ชันเหล่านี้และฟังก์ชันอื่นๆ ได้โดยการเรียกใช้ บรรทัดคำสั่ง
ช่วยfunction_name
มอบหมายงานห้องปฏิบัติการ
จำนวนตัวเลือกการมอบหมายงานเฉพาะเจาะจงจะถูกกำหนดโดยครู
ภารกิจที่ 1
งานนี้เกี่ยวข้องกับการหาพหุนามการประมาณค่าพีชคณิตระดับ n สำหรับชุดข้อมูลบางชุด: พีเอ็น(x) .
วัตถุประสงค์ของงาน:
มีความจำเป็นต้องสร้างโปรแกรมสำหรับคำนวณค่าสัมประสิทธิ์ของพหุนามการประมาณค่าพีชคณิต พีเอ็น(x)= ก 0 + ก 1 x+ … + ไม่มี.
แนวทาง:
0 | 1 | 2 | 3 | |
เอ็กซ์ฉัน |
1,2 | 1,4 | 1,6 | 1,8 |
8,3893 | 8,6251 | 8,9286 | 8,9703 |
ราคาต่อรอง ก 0 , ก 1 , …, หนึ่งถูกกำหนดจากการแก้ระบบสมการ:
ที่นี่ n– ลำดับพหุนามการประมาณค่า
n+1 – จำนวนคู่คะแนนที่กำหนด ( x, ย),
ก 0 , ก 1 ,… หนึ่ง– ค่าสัมประสิทธิ์ที่ต้องการของพหุนาม พีเอ็น(x)= ก 0 + ก 1 x+ … + ไม่มี).
ข้อกำหนดของโปรแกรม
· กำหนดขอบเขตของส่วน ซึ่งมีการสร้างพหุนามการประมาณค่าไว้ พี(เอ็กซ์)
· ชุด n– จำนวนส่วนของการประมาณค่า (หรือที่เท่ากันคือระดับของพหุนาม)
บันทึก: x0, xn, nเข้ามาจากแป้นพิมพ์
· เพื่อให้ได้ข้อมูลเบื้องต้น (x, ย)(จำนวนคู่แต้ม (x ฉัน y ฉัน)ซึ่งสร้างพหุนามการประมาณค่าไว้ พี(เอ็กซ์) – n1=n+1) จัดเตรียม:
ü เข้าสู่โหนดที่ตั้งแบบสุ่ม x ผม, ผม=0, nจากแป้นพิมพ์
ü การคำนวณโหนด x ผม , ผม=0, n,สอดคล้องกับการจัดเรียงข้อโต้แย้งแบบเดียวกัน xบนส่วน
ü ในย่อหน้า 1.2 ค่า ใช่ ฉัน , i=0, nไม่ว่าจะป้อนจากแป้นพิมพ์ (หากไม่ทราบฟังก์ชันต้นทาง) หรือคำนวณจากฟังก์ชันที่กำหนด ฉ(x)- นิพจน์ที่กำหนดฟังก์ชันจะถูกป้อนจากแป้นพิมพ์ และต้องเป็นไปตามกฎสำหรับการเขียนนิพจน์ใน MATLAB
ü การป้อนข้อมูล ( x ฉัน, y ฉัน, i=0, n) จากไฟล์
· แก้ระบบสมการเพื่อกำหนดค่าสัมประสิทธิ์ของพหุนาม P(x)
· สร้างกราฟของฟังก์ชันตารางดั้งเดิมและพหุนาม P(x)
· หากข้อมูลต้นฉบับถูกกำหนดเป็นฟังก์ชัน f(x) ให้พล็อตข้อผิดพลาดในการประมาณค่า /f(x) – P(x)/ คำนวณค่าสัมบูรณ์สูงสุดของข้อผิดพลาดการแก้ไขในช่วงเวลาที่กำหนด
ภารกิจที่ 2
การแก้ไขเส้นโค้ง
วัตถุประสงค์ของงาน:
จำเป็นต้องสร้างโปรแกรมสำหรับคำนวณค่าสัมประสิทธิ์และสร้างฟังก์ชัน spline S(x) ซึ่ง "ติดกัน" จากชิ้นส่วนของพหุนามลำดับที่ 3 S ฉัน(x), ซึ่งมีรูปแบบการบันทึกพิเศษ:
ฟังก์ชั่นเอส ฉัน(x) กำหนดไว้ในเซ็กเมนต์
ข้อกำหนดของโปรแกรม
เมื่อปฏิบัติงานนี้ คุณต้อง:
· กำหนดขอบเขตของเซ็กเมนต์ที่สร้างฟังก์ชัน spline S(x)
· เซต n – จำนวนของเซกเมนต์การประมาณค่า ซึ่งแต่ละเซกเมนต์มีการสร้างพหุนามลูกบาศก์ Si(x)
· หมายเหตุ: ป้อน x0, xn, n จากแป้นพิมพ์
· จัดระเบียบอินพุตของข้อมูลเริ่มต้น (x, y) (จำนวนคู่ของจุด (xi, yi) ที่ใช้สร้างฟังก์ชัน spline S(x), n1=n+1) โดยให้:
ü การป้อนโหนดที่ตั้งแบบสุ่ม xi, i=0, n จากแป้นพิมพ์
ü การคำนวณโหนด xi, i=0, n ซึ่งสอดคล้องกับตำแหน่งที่สม่ำเสมอของอาร์กิวเมนต์ x บนเซ็กเมนต์
ü ในย่อหน้า 1,2 ค่าของ yi, i=0, n จะถูกป้อนจากแป้นพิมพ์ (หากไม่ทราบฟังก์ชันดั้งเดิม) หรือคำนวณจากฟังก์ชันที่กำหนด f(x) นิพจน์ที่กำหนดฟังก์ชันจะถูกป้อนจากแป้นพิมพ์ และต้องเป็นไปตามกฎสำหรับการเขียนนิพจน์ใน MATLAB
ü ข้อมูลเข้า (xi, yi, i=0, n) จากไฟล์
ü S1""(x0)=0, S3""(x3)=0
ü S1"(x0)=ฉ "(x0), S3"(x3)=ฉ "(x3)
ü S1""(x0)=ฉ "(x0), S3""(x0)=ฉ "(x3)
· เพื่อกำหนดค่าสัมประสิทธิ์ของเส้นโค้งลูกบาศก์ธรรมชาติ (เงื่อนไขขอบเขต 1) จำเป็นต้องแก้ระบบสมการต่อไปนี้:
สัมประสิทธิ์ σ 0 =0,σ n =0
· สร้างกราฟของฟังก์ชันดั้งเดิมและฟังก์ชันเส้นโค้งสำหรับเงื่อนไขขอบเขตทั้งสามประเภท
· สร้างกราฟของฟังก์ชันข้อผิดพลาดการแก้ไขเส้นโค้ง f(x) – S(x) สำหรับเงื่อนไขขอบเขตทั้งสามประเภท
บันทึก:
ใน แพ็คเกจ MATLABดัชนีมิติเดียวและ อาร์เรย์สองมิติเริ่มจาก 1 ไม่ใช่ 0 ให้คำนึงถึงสิ่งนี้เมื่อเขียนโปรแกรม
ภารกิจที่ 3
การประมาณฟังก์ชันโดยใช้วิธีกำลังสองน้อยที่สุด (LSM)
งานนี้เกี่ยวข้องกับการหาฟังก์ชันการประมาณ (พหุนามของดีกรี m) สำหรับชุดข้อมูลบางชุดที่สร้างขึ้นโดยวิธีกำลังสองน้อยที่สุด (LSM)
วัตถุประสงค์ของงาน:
จำเป็นต้องสร้างโปรแกรมสำหรับค้นหาสัมประสิทธิ์ของพหุนาม φ (x)= ก 0 + ก 1 * x+… หนึ่ง * x มวิธีกำลังสองน้อยที่สุด
สมมติว่ามีชุดข้อมูลดังต่อไปนี้:
เอ็กซ์ฉัน |
1,2 | 1,4 | 1,6 | 1,8 | 2,0 | 2,2 | 2,4 | 2,6 | 2,8 | 3,0 |
8,3893 | 8,6251 | 8,9286 | 8,9703 | 9,1731 | 9,1784 | 8,8424 | 8,7145 | 8,3077 | 7,9611 |
การค้นหาค่าสัมประสิทธิ์ที่จำเป็นดำเนินการดังนี้:
ที่ไหน n – จำนวนคะแนน ( x, ย),
ม – ระดับของพหุนามที่ต้องการ
ก 0 , ก 1 , …, เช้า – ค่าสัมประสิทธิ์ที่ต้องการ ( φ ( x )= ก 0 + ก 1 x + … + ม x ม ).
ข้อกำหนดของโปรแกรม
เมื่อปฏิบัติงานนี้ คุณต้อง:
· กำหนดขอบเขตของเซ็กเมนต์ที่สร้างฟังก์ชันการประมาณ φ(x)=a0+a1*x+… an * xm
· ตั้งค่า m – ดีกรีของพหุนาม
· หมายเหตุ: ป้อน x1, xn, m จากแป้นพิมพ์
· หากต้องการรับข้อมูลเริ่มต้น (x, y) ซึ่งเป็นฟังก์ชันการประมาณ φ(x)=a0+a1*x+… an* x m ถูกสร้างขึ้น ให้จัดเตรียม:
ü การป้อนโหนดที่ตั้งแบบสุ่ม xi, i=1, n จากแป้นพิมพ์
ü การคำนวณโหนด xi, i=1, n ซึ่งสอดคล้องกับตำแหน่งที่สม่ำเสมอของอาร์กิวเมนต์ x บนเซ็กเมนต์
ü ในย่อหน้า 1,2 ค่าของ yi, i=1, n จะถูกป้อนจากแป้นพิมพ์ (หากไม่ทราบฟังก์ชันดั้งเดิม) หรือคำนวณจากฟังก์ชันที่กำหนด f(x) นิพจน์ที่กำหนดฟังก์ชันจะถูกป้อนจากแป้นพิมพ์ และต้องเป็นไปตามกฎสำหรับการเขียนนิพจน์ใน MATLAB
ü ข้อมูลเข้า (xi, yi, i=1, n) จากไฟล์
· แก้ระบบสมการเพื่อกำหนดค่าสัมประสิทธิ์ของพหุนาม φ(x)
· สร้างกราฟของฟังก์ชันตารางดั้งเดิมและพหุนาม φ(x)
· ถ้าข้อมูลต้นฉบับถูกกำหนดเป็นฟังก์ชัน f(x) ให้พล็อตค่าข้อผิดพลาดการประมาณค่า /f(x) – φ(x)/ คำนวณค่าสัมบูรณ์สูงสุดของข้อผิดพลาดการแก้ไขในช่วงเวลาที่กำหนด
เมื่อดำเนินการจุดสุดท้ายในส่วนนั้น ใช้เวลาอย่างน้อย 500 คะแนนในการคำนวณ
ข้อกำหนดสำหรับงานห้องปฏิบัติการ
รายงานจะต้องมี:
1. คำชี้แจงของปัญหา
2. ข้อความโปรแกรม
3. ผลการทดสอบ
หมายเหตุ: จะต้องระบุข้อความของโปรแกรมพร้อมกับความคิดเห็น
1. Anufriev I.E. คู่มือการสอนด้วยตนเอง Matlab 5.3/6.x – เซนต์ปีเตอร์สเบิร์ก: BHV-Petersburg, 2003 – 736 หน้า: ป่วย
2. วี.พี. Dyakonov MATLAB 6.5 SPI/7 + Simulink 5/6 ในวิชาคณิตศาสตร์และการสร้างแบบจำลอง ซีรีส์ "ห้องสมุดมืออาชีพ" – อ.: SOLON-Press, 2548. – 576 หน้า: ป่วย
3. Anufriev I.E., Smirnov A.B., Smirnova E.N. MathLab 7. – เซนต์ปีเตอร์สเบิร์ก: BHV-Petersburg, 2005. – 1104 หน้า: ป่วย
บ่อยครั้งเมื่อจัดระเบียบลูป คุณจะต้องวนซ้ำผ่านค่าตัวนับในช่วงของค่าที่กำหนดและตามขั้นตอนการเปลี่ยนแปลงที่กำหนด ตัวอย่างเช่น หากต้องการวนซ้ำองค์ประกอบของเวกเตอร์ (อาร์เรย์) คุณต้องจัดระเบียบตัวนับจาก 1 ถึง N ด้วยขั้นตอนที่ 1 โดยที่ N คือจำนวนองค์ประกอบของเวกเตอร์ ในการคำนวณผลรวมของอนุกรม จะมีการระบุตัวนับจาก a ถึง b ด้วยขั้นตอนขั้นตอนการเปลี่ยนแปลงที่ต้องการ และอื่นๆ เนื่องจากความจริงที่ว่างานดังกล่าวมักพบในการฝึกเขียนโปรแกรม จึงมีการเสนอตัวดำเนินการ for loop สำหรับการนำไปใช้งาน ซึ่งทำให้การนำลูปไปใช้กับตัวนับง่ายขึ้นและมองเห็นได้ชัดเจนยิ่งขึ้น
ไวยากรณ์ของตัวดำเนินการ for loop เป็นดังนี้:
สำหรับ<счетчик> =
<начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
จบ
พิจารณาผลงาน ของรอบนี้ใช้ตัวอย่างการใช้อัลกอริธึมเพื่อค้นหาค่าสูงสุดขององค์ประกอบในเวกเตอร์:
ฟังก์ชั่น search_max
ก = ;
ม = ก(1); % ค่าสูงสุดในปัจจุบัน
สำหรับ i=1:length(a) % วนซ้ำตั้งแต่ 1 ถึงจุดสิ้นสุดของเวกเตอร์ c
% ในขั้นที่ 1 (ค่าเริ่มต้น)
ถ้าม< a(i) %
если a(i) >ม.
ม = ก(ฉัน); % จากนั้น ม. = ก(i)
จบ
% สิ้นสุด จุดสิ้นสุดของ for loop
กระจาย(m);
ในตัวอย่างนี้ สำหรับวงตั้งค่าตัวนับ i และเปลี่ยนค่าจาก 1 เป็น 10 ในขั้นตอนที่ 1 โปรดทราบว่าหากไม่ได้ระบุขนาดขั้นตอนไว้อย่างชัดเจน จะใช้ค่าเริ่มต้นเป็น 1
ในตัวอย่างถัดไป เราจะพิจารณาการนำอัลกอริธึมไปใช้ในการเลื่อนองค์ประกอบเวกเตอร์ไปทางขวา เช่น องค์ประกอบสุดท้ายจะถูกวางไว้ในตำแหน่งสุดท้าย องค์ประกอบถัดไปจะแทนที่องค์ประกอบสุดท้าย ฯลฯ ไปที่องค์ประกอบแรก:
คิวฟังก์ชัน
ก = ;
disp (ก);
สำหรับ i=length(a):-1:2 % วนจาก 10 ถึง 2 โดยมีขั้นตอน -1
ก(i)=ก(i-1); % เลื่อนองค์ประกอบของเวกเตอร์ a
% สิ้นสุด จุดสิ้นสุดของ for loop
disp (ก);
ผลลัพธ์ของโปรแกรม
3 6 5 3 6 9 5 3 1 0
3
3 6 5 3 6 9 5 3 1
ตัวอย่างด้านบนแสดงให้เห็นว่า ในการใช้ลูปกับตัวนับจากค่าที่มากกว่าไปหาค่าที่น้อยกว่า คุณจะต้องระบุขั้นตอนอย่างชัดเจน ในกรณีนี้คือ -1 หากไม่ดำเนินการวนซ้ำจะหยุดทันทีและโปรแกรมจะทำงานไม่ถูกต้อง
โดยสรุป มาดูการทำงานของตัวดำเนินการ for loop โดยใช้ตัวอย่างการสร้างแบบจำลองลำดับสุ่มด้วยกฎแห่งการเปลี่ยนแปลง
โดยที่ค่าสัมประสิทธิ์จาก -1 ถึง 1; - ตัวแปรสุ่มปกติที่ไม่มีความคาดหวังและความแปรปรวนทางคณิตศาสตร์เป็นศูนย์
,
ความแปรปรวนของแบบจำลองอยู่ที่ไหน กระบวนการสุ่ม- ในกรณีนี้ ตัวอย่างแรกจะถูกจำลองเป็นตัวแปรสุ่มปกติโดยไม่มีความคาดหวังและความแปรปรวนทางคณิตศาสตร์เป็นศูนย์ โปรแกรมการสร้างแบบจำลองมีลักษณะดังนี้:
ฟังก์ชั่นการสร้างแบบจำลอง_x
ร = 0.95; % ค่าสัมประสิทธิ์แบบจำลอง
ยังไม่มีข้อความ = 100; % จำนวนจุดจำลอง
อดีต = 100; % ความแปรปรวนของกระบวนการ
และ = อดีต*(1-r^2); % ความแปรปรวนของการบวกแบบสุ่ม
x = ศูนย์(N,1); % เริ่มต้นเวกเตอร์ x
x(1) = sqrt(อดีต)*randn; % การจำลองตัวอย่างที่ 1
สำหรับ i=2:N % วงรอบจาก 2 ถึง N
x(i)=r*x(i-1)+sqrt(et)*randn; การสร้างแบบจำลอง % SP
% สิ้นสุด จุดสิ้นสุดของลูป
โครงเรื่อง(x); % แสดง SP เป็นกราฟ
เมื่อรันโปรแกรมนี้ การดำเนินการของลำดับสุ่มจำลองจะปรากฏขึ้น
ข้าว. 2.1. ผลลัพธ์ของการสร้างแบบจำลองลำดับสุ่ม
การทำงานของโปรแกรมเริ่มต้นด้วยคำจำกัดความของตัวแปร (ในโปรแกรมคือตัวแปร เช่น) และสำหรับการนำโมเดลที่ระบุไปใช้ จากนั้นจึงคำนวณความแปรปรวน และตัวอย่างแรกของกระบวนการสุ่มถูกจำลองโดยใช้ฟังก์ชัน randn ฟังก์ชัน randn สร้างตัวแปรสุ่มปกติโดยมีค่าเฉลี่ยและความแปรปรวนของหน่วยเป็นศูนย์ ในการสร้างตัวแปรสุ่มที่มีความแปรปรวน ก็เพียงพอที่จะคูณตัวแปรสุ่มที่มีความแปรปรวนหน่วยด้วย เนื่องจาก ความแปรปรวนคือกำลังสองเฉลี่ย ตัวแปรสุ่มสัมพันธ์กับความคาดหวังทางคณิตศาสตร์ ส่งผลให้เราได้สายโปรแกรม
x(1) = sqrt(อดีต)*randn;
จากนั้น for ลูปจะถูกนำไปใช้กับตัวนับ i จาก 2 ถึง N ด้วยขั้นตอนที่ 1 ภายในลูป ตัวอย่าง N-1 ที่เหลือของกระบวนการสุ่มจะถูกจำลองตามสูตรข้างต้น บรรทัดสุดท้ายของโปรแกรมประกอบด้วยฟังก์ชัน plot() ซึ่งแสดงลำดับจำลองบนหน้าจอในรูปแบบของกราฟ การทำงานกับการแสดงกราฟบนหน้าจอจะกล่าวถึงรายละเอียดเพิ่มเติมในบทถัดไป
คำสั่งแบบวนซ้ำ ใน MATLAB การดำเนินการซ้ำๆ สามารถทำได้โดยใช้คำสั่ง for และ while การใช้ for ที่ง่ายที่สุดมีดังนี้:
สำหรับ count = start: ขั้นตอน: คำสั่ง MATLAB สุดท้าย สิ้นสุดที่นี่ การนับเป็นตัวแปรวนซ้ำ n เริ่มต้น สุดท้าย – มูลค่าจริงเริ่มต้นและสุดท้าย n step – สเต็ปจากชุดของจำนวนจริง (ค่าเริ่มต้นคือ 1 สามารถละเว้นได้) วงจรจะสิ้นสุดลงเมื่อมันกลายเป็นขั้นสุดท้ายมากขึ้น นับ 3 เท่านั้น
ตัวอย่างที่ 1 คำนวณผลรวมของ x= -1, 0, 1 วิธีแก้ไข เรามาสร้างไฟล์โปรแกรมในตัวแก้ไขไฟล์ M กัน เราบันทึกไว้ในไฟล์ Summa ม. ส = 0; สำหรับ k = 1: 10 S = S + x ^k / แฟกทอเรียล(k); สิ้นสุด S บนบรรทัดคำสั่ง x = -1:1:1; สรุป S = -0 6 0 1. 7 โปรดทราบว่าตัวแปร k, s เป็นตัวแปรร่วม 4
จะสะดวกกว่าสำหรับตัวอย่างนี้ในการใช้ฟังก์ชันไฟล์ ในตัวแก้ไขไฟล์ M บนบรรทัดคำสั่ง ให้สร้างฟังก์ชันไฟล์ฟังก์ชัน S = funsum(x, N) > f = funsum (-1: 1, 10) S = 0; > ฉ = สำหรับ ม. = 1: ยังไม่มีข้อความ -0. 6 0 1. 7 วิ = ส + x ^m/แฟกทอเรียล(ม.); end ที่นี่ตัวแปร s, m อยู่ในเครื่อง 5
ตัวอย่างที่ 2 สร้างเมทริกซ์ฮิลแบร์ตลำดับ n สารละลาย n = 4; ก = ศูนย์(n, n); สำหรับ i = 1: n สำหรับ j = 1: n a (i, j) = 1 / (i+j-1); จบ 6
หมายเหตุ ก่อนที่จะเติมเมทริกซ์และเวกเตอร์ คุณควรสร้างพวกมันก่อนแล้วเติมศูนย์ด้วยคำสั่งศูนย์ เพื่อเพิ่มความเร็วของอัลกอริทึม (นั่นคือ a = ศูนย์ (n, n) จะเร็วกว่า a(i, j) = 0, ผม, เจ = 1, ... , n) 7
การวนซ้ำ for มีประโยชน์เมื่อดำเนินการซ้ำๆ เมื่อทราบจำนวนการกระทำล่วงหน้า หากไม่ทราบหมายเลขล่วงหน้า คุณสามารถใช้ while loop: While loop Condition คำสั่ง MATLAB End 8
ตัวอย่างที่ 3 การหาผลรวมของอนุกรมของ x ที่กำหนด เป็นไปไม่ได้ที่จะรวมเป็นอนันต์ แต่คุณสามารถสะสมผลรวมได้จนกว่าเทอมจะน้อยเกินไป เช่น จนถึง 9
หมายเหตุ ความเล็กของคำศัพท์เป็นแนวคิดที่สัมพันธ์กัน คำศัพท์อาจเป็นลำดับที่ 10 -10 แต่ผลรวมเองก็อยู่ในลำดับเดียวกัน ในกรณีนี้ ไม่สามารถหยุดการรวมได้ ตอนนี้เราไม่ต้องสนใจเรื่องนี้แล้วกลับไปสู่แนวทางแก้ไข 10
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-11.jpg" alt="M-file function บนฟังก์ชันบรรทัดคำสั่ง S = mysin(x) > f = mysin (1)"> M-file функция В командной строке function S = mysin(x) > f = mysin (1) S = 0; 0. 8415 k = 0; while abs(x. ^ (2*k + 1)/factorial(2*k + 1)) > 1. 0 e -10 S = S + (-1)^k * x. ^ (2*k + 1)/factorial(2*k + 1); k = k + 1; end 11!}
ในการตั้งค่าเงื่อนไขการดำเนินการแบบวนซ้ำ จะใช้การดำเนินการเชิงสัมพันธ์ต่อไปนี้: ค่าความสัมพันธ์ = = เท่ากับ > มากกว่า > = มากกว่าหรือเท่ากับ ~ = ไม่เท่ากัน
และตัวดำเนินการเชิงตรรกะ: สัญลักษณ์เงื่อนไขของตัวดำเนินการใน MATLAB สัญกรณ์เทียบเท่า ตรรกะ “และ” x
ลองกลับมาที่ตัวอย่างของเราและสังเกตว่าถ้าอนุกรมแยกออกไป เงื่อนไขสำหรับค่าเล็กน้อยของเทอมปัจจุบันอาจไม่เป็นที่พอใจและโปรแกรมจะดำเนินไปเป็นวงจร ดังนั้น เราจะจำกัดจำนวนเทอมไว้ที่ 100,000 เงื่อนไขจะมีลักษณะเช่นนี้ หรือ (abs (x. ^ (2*k + 1)/factorial(2*k + 1)) > 1. 0 e - 10 ก
การจัดการสถานการณ์พิเศษ 1) การหยุด – การขัดจังหวะลูปและการดำเนินการคำสั่งต่อจากจุดสิ้นสุด (เช่น ออกจากลูปด้านใน) 2) บางส่วนไม่ถูกต้อง การดำเนินการทางคณิตศาสตร์ใน MATLAB จะไม่ยุติโปรแกรม (เช่น =inf, =Na.N) ผลลัพธ์คือตัวดำเนินการลองสร้างตัวดำเนินการซึ่งการดำเนินการอาจนำไปสู่การจับข้อผิดพลาด ตัวดำเนินการในกรณีที่เกิดข้อผิดพลาดสิ้นสุด 15
ตัวดำเนินการสาขา ตัวดำเนินการแบบมีเงื่อนไข ตัวดำเนินการสาขาต่อไปนี้จะถูกใช้ใน MATLAB: n if – ตัวดำเนินการแบบมีเงื่อนไข; n สวิตช์ – ตัวดำเนินการสวิตช์ 16
โครงสร้างของคำสั่งแบบมีเงื่อนไข: if (เงื่อนไข) ของคำสั่ง MATLAB elseif (เงื่อนไข) ของคำสั่ง MATLAB …………. ส่วนนี้อาจหายไป elseif (เงื่อนไข) คำสั่ง MATLAB มิฉะนั้น คำสั่ง MATLAB สิ้นสุดที่ 17
เมื่อเขียนไฟล์ M ที่ใช้ตัวดำเนินการแยกสาขา จะมีประโยชน์ในการใช้ 1) คำสั่งคำเตือน ('ข้อความ') - เพื่อแสดงคำเตือนในหน้าต่างคำสั่ง; 2) ฟังก์ชั่นข้อผิดพลาด ('ข้อความ') - เพื่อยุติการทำงานของโปรแกรม 18
ตัวอย่างที่ 4 ให้สมการกำลังสอง ax 2 + bx +c = 0, a ≠ 0 ลองเขียนฟังก์ชัน M ที่คำนวณรากของสมการกำลังสองกัน ลองตรวจสอบจำนวนพารามิเตอร์อินพุตและเอาต์พุต รวมถึงข้อเท็จจริงที่ว่าพารามิเตอร์อินพุตเป็นตัวเลข ไม่ใช่เวกเตอร์และเมทริกซ์ ยิ่งกว่านั้น เรายังคำนึงถึงกรณีของการรูทที่ซับซ้อนด้วย โปรแกรมมีลักษณะดังนี้: 19
function = root 2 (a, b, c) if (nargin
หมายเหตุ สำหรับการเขียนของคุณเอง โปรแกรมคอมพิวเตอร์ ประโยชน์ที่ดีสามารถนำ การศึกษาด้วยตนเองฟังก์ชั่นไฟล์มาตรฐานในไดเร็กทอรีย่อย Toolbox ส่วนใหญ่มี โอเพ่นซอร์สซึ่งช่วยให้คุณเข้าใจหลักการเขียนโปรแกรมใน MATLAB มีฟังก์ชันอื่นๆ (เช่น cos. m) อยู่ในตัว พวกเขามีความคิดเห็นเกี่ยวกับการใช้ฟังก์ชัน ลองยกตัวอย่างอื่น 21
ฟังก์ชั่น y = kusfun (x) หาก nargin ~= 1 ข้อผิดพลาด ('ต้องมีหนึ่งอาร์กิวเมนต์อินพุต') end = ขนาด (x); y = ศูนย์ (ขนาด (x)); % เริ่มต้นอาร์กิวเมนต์อินพุตสำหรับ i = 1: Nx สำหรับ j = 1: Mx ถ้า x (i, j) = -pi ไม่จำเป็น! y (i, j) = x (i, j) / pi; อย่างอื่น y (i, j) = - cos(x (i, j)) จบ จบ 23
คำสั่ง switch สะดวกในการใช้งานเมื่อมีความสอดคล้องกันระหว่างค่าที่ไม่ต่อเนื่องของตัวแปรบางตัวและการดำเนินการที่ตามมา 24
โครงสร้างของตัวดำเนินการสามารถเห็นได้จากตัวอย่างต่อไปนี้: สลับกรณี -1 disp ('a = -1') กรณี 0 disp ('a = 0') มิฉะนั้น disp ('a ไม่เท่ากับ -1, 0 ') สิ้นสุดวันที่ 25
ตัวดำเนินการสวิตช์เหมาะอย่างยิ่งสำหรับการแก้ปัญหาการวาดกราฟต่างๆ ของฟังก์ชันที่กำลังศึกษา (พื้นผิวเฟรม (a=1) เส้นระดับ (a=2) ฯลฯ) 26
นิพจน์บูลีนพร้อมอาร์เรย์และตัวเลข ในทางที่เป็นสากลข้อมูลเมทริกซ์ได้รับการประมวลผลโดยใช้การดำเนินการเชิงตรรกะ เนื่องจาก MATLAB แทนตัวเลขเป็นอาร์เรย์ขนาด 1 ต่อ 1 จึงเป็นเรื่องปกติที่จะคาดหวังว่าอาร์เรย์สามารถปรากฏในนิพจน์บูลีนได้ ตอนนี้เราจะดูที่การขยายการดำเนินการเชิงตรรกะและเชิงสัมพันธ์ไปยังกรณีของอาร์เรย์ 27
การดำเนินการเชิงสัมพันธ์ ผลลัพธ์ของการดำเนินการเชิงสัมพันธ์ใน MATLAB อาจเป็นได้ทั้งแบบลอจิคัล ('จริง') หรือศูนย์แบบลอจิคัล ('เท็จ') นอกจากนี้ ตัวแปรทางคณิตศาสตร์ยังแตกต่างจากภาษาโปรแกรมอื่นๆ ตรงที่ตัวแปรทางคณิตศาสตร์สามารถใช้ในนิพจน์เดียวกันกับตัวแปรทางตรรกะได้ 28
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-29.jpg" alt="ตัวอย่าง 6 > a = 1; b = 3; c = 1; >"> Пример 6 > a = 1; b = 3; c = 1; > a + (b > c) ans = 2 > a + (b!}
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-30.jpg" alt=" > A = ; B = ; B = ; > C = A = = B C = 30
หมายเหตุ เช่นเดียวกับในองค์ประกอบโดยองค์ประกอบ การดำเนินการทางคณิตศาสตร์เป็นที่ยอมรับได้ที่จะใช้ตัวเลขเป็นหนึ่งในอาร์กิวเมนต์ของการดำเนินการเชิงสัมพันธ์ ในกรณีนี้ แต่ละองค์ประกอบของอาร์เรย์จะถูกเปรียบเทียบด้วยตัวเลข ผลลัพธ์ที่ได้คืออาร์เรย์ที่มีขนาดเท่ากับองค์ประกอบดั้งเดิม 31
การดำเนินการทางลอจิคัล การใช้การดำเนินการทางลอจิคัลกับอาร์เรย์นำไปสู่การดำเนินการแบบองค์ประกอบต่อองค์ประกอบในองค์ประกอบอาร์เรย์ n A และ B – ให้ค่าหนึ่งหากองค์ประกอบที่เกี่ยวข้องไม่เท่ากับศูนย์ n A หรือ B - ให้หนึ่งรายการหากองค์ประกอบอย่างน้อยหนึ่งองค์ประกอบไม่เป็นศูนย์ 32
ไม่ใช่ A - ใช้กับหนึ่งอาร์เรย์หากองค์ประกอบไม่เท่ากับศูนย์แสดงว่าเป็นศูนย์จะถูกตั้งค่ามิฉะนั้น - หนึ่ง; n all (v) – ตรวจสอบการมีอยู่ขององค์ประกอบที่เป็นศูนย์ในเวกเตอร์ ส่งคืนหนึ่งรายการหากไม่มีองค์ประกอบที่เป็นศูนย์ ถ้า v เป็นเมทริกซ์ ผลลัพธ์จะเป็นแบบคอลัมน์ n any (v) – คืนค่าหนึ่งหากเวกเตอร์อินพุตมีองค์ประกอบที่ไม่เป็นศูนย์อย่างน้อยหนึ่งองค์ประกอบ 33
ลำดับความสำคัญของการดำเนินงาน 1. การปฏิเสธ; 2. การขนย้าย การยกกำลัง (รวมถึงองค์ประกอบที่ชาญฉลาด) เครื่องหมายบวกและลบที่หน้าตัวเลข 3. การคูณและการหาร (รวมถึงองค์ประกอบที่ชาญฉลาด) 4. การบวกและการลบ 5. การดำเนินงานเชิงสัมพันธ์ 6. ตรรกะ 'และ' ตรรกะ 'หรือ' 34
Src="https://present5.com/presentation/c993b082b44b0b84b1886b8dd4d3c841/image-36.jpg" alt=" ตัวอย่างที่ 7 > a = ; > u"> Пример 7 > a = ; > u = find ((a = -1)) 3 4 5 > anew = a(u) 0 -1 0 36!}
ตัวอย่างที่ 8 แทนที่องค์ประกอบของเมทริกซ์จัตุรัสที่มีตัวเลขสุ่ม 5 x 5 อย่างอิสระจากช่วง (0, 1) ซึ่งมากกว่าค่าเฉลี่ยขององค์ประกอบทั้งหมด 10% ด้วยค่าเฉลี่ย วิธีแก้ > A = แรนด์(5); > S = ผลรวม (ผลรวม A) / 25; > A(find (A > S* 1. 1)) = S ในกรณีนี้ ฟังก์ชัน find จะสร้างเวกเตอร์ 2 ตัวของหมายเลขแถวและหมายเลขคอลัมน์ 37
พหุนามใน MATLAB พหุนาม p (x) =anxn+an-1 xn-1+ - - +a 0, an≠ 0 ใน MATLAB มีการระบุโครงสร้างเวกเตอร์ p= โดยที่ ai เป็นจำนวนเชิงซ้อนใดๆ an≠ 0 โปรดทราบว่าระดับของพหุนามจะถูกคำนวณดังนี้: n=length(p)-1 (สำหรับ n=0 ปรากฎว่า const ) 38
คำสั่งหลักสำหรับการทำงานกับพหุนามมีดังนี้: nn n r=roots(р) – เวกเตอร์คอลัมน์ที่มีรากทั้งหมดของพหุนาม; p=poly(r) – การสร้างพหุนามจากรากที่ระบุในเวกเตอร์คอลัมน์ r และถ้า r เมทริกซ์จตุรัสแล้ว p คือพหุนามลักษณะเฉพาะ y=polyval(p, x) – การคำนวณแบบองค์ประกอบต่อองค์ประกอบของค่าของพหุนาม p บนเซต x โดยที่ x สามารถเป็นเวกเตอร์หรือเมทริกซ์ได้ 39
nn n polyder(p) – อนุพันธ์เวกเตอร์แถวของ p (ความแตกต่างของพหุนาม p); polyder(p, q) – อนุพันธ์ของผลิตภัณฑ์ของพหุนาม p และ q; = polyder(p, q) – อนุพันธ์ของพหุนามผลหาร p และ q โดยที่ a และ b เป็นตัวเศษและตัวส่วนของเศษส่วนผลลัพธ์ 40
n n n p=polyfit(x, y, n) – การประมาณฟังก์ชัน y(x) ด้วยพหุนาม p ระดับที่ nใช้วิธีที่ลดระยะห่างระหว่างกราฟพหุนามกับความจริงของเส้นโค้งให้เหลือน้อยที่สุด โดยเฉลี่ยตามความยาวทั้งหมด Conv(p, q) – เวกเตอร์แถว ผลคูณของพหุนาม p และ q; =deconv(p, q) – การหาร p ด้วย q โดยมี w-quotient, r-remainder และ p=conv (q, w) +r; 41
n =สารตกค้าง(a, b) – การสลายตัวของฟังก์ชันตรรกยะให้เป็นเศษส่วนอย่างง่ายเหนือสนามของจำนวนเชิงซ้อน โดยเน้นที่ส่วนจำนวนเต็ม k(x) หรือโดยที่ ri คือค่าตกค้าง (องค์ประกอบ r), pi คือขั้ว (องค์ประกอบ p) คำสั่งนี้ยังทำงานในแบบย้อนกลับ =residue(r, p, k) 42
หมายเหตุ 1. ถ้าในเรซิดิว (a, b) พหุนาม b(x) และในราก (p) พหุนาม p(x) มีรากที่หลายค่าหรืออยู่ใกล้กัน ผลลัพธ์ที่ได้อาจไม่ถูกต้อง เนื่องจาก a ปัญหามีเงื่อนไขไม่ดี การปรับสภาพที่ไม่ดีคือการพึ่งพาผลลัพธ์อย่างมากกับค่าสัมประสิทธิ์ (คล้ายกับความเสถียรของคำตอบในสมการเชิงอนุพันธ์) 43
2. เมื่อทำงานกับพหุนาม พหุนามของแบบฟอร์มจะเกิดขึ้น แต่ MATLAB จะไม่ตรวจสอบ≠ 0 โดยอัตโนมัติ และเกิดข้อผิดพลาด (คุณต้องระวังด้วยตัวเอง) 44
แผนก: เทคโนโลยีสารสนเทศ
การเขียนโปรแกรมในแมทแล็บ
ผู้ประกอบการแมทแล็บ
· คำสั่งวนซ้ำ
วงจรสำหรับ
ไวยากรณ์
สำหรับ count=start:step:final
คำสั่ง MATLAB
คำอธิบาย
นับ - ตัวแปรวนซ้ำ
start - ค่าเริ่มต้น
สุดท้าย - ค่าสุดท้าย
step - ขั้นตอนที่การนับเพิ่มขึ้นตามแต่ละรายการที่ตามมาในลูป
การวนซ้ำจะสิ้นสุดลงทันทีที่จำนวนมากกว่าค่าสุดท้าย
ตัวอย่าง
ปล่อยให้จำเป็นต้องได้รับตระกูลของเส้นโค้งสำหรับ x€ ซึ่งระบุโดยฟังก์ชันขึ้นอยู่กับพารามิเตอร์
y (x, a) = e-ax sin x,
สำหรับพารามิเตอร์ค่าตั้งแต่ -0.1 ถึง 0.1 ด้านล่างนี้คือรายการไฟล์โปรแกรมสำหรับแสดงกลุ่มเส้นโค้ง
รายการโปรแกรม
เอ็กซ์ = ;
สำหรับ = -0.1:0.02:0.1
y = ประสบการณ์ (-a*x).*sin(x);
จากการรันโปรแกรม หน้าต่างกราฟิกจะปรากฏขึ้นพร้อมกลุ่มเส้นโค้งที่ต้องการ
วงจรในขณะที่
ไวยากรณ์
ในขณะที่สภาพวนซ้ำ
คำสั่ง MATLAB
คำอธิบาย
การวนซ้ำจะทำงานตราบเท่าที่เงื่อนไขการวนซ้ำเป็นจริง ในการตั้งค่าเงื่อนไขการดำเนินการแบบวนซ้ำ อนุญาตให้ดำเนินการเชิงสัมพันธ์ต่อไปนี้:
การตั้งค่าเงื่อนไขที่ซับซ้อนมากขึ้นทำได้โดยใช้ตัวดำเนินการเชิงตรรกะ ตัวดำเนินการเชิงตรรกะได้รับในตารางต่อไปนี้
ตัวอย่าง
ผู้ประกอบการสาขา
ตัวดำเนินการแบบมีเงื่อนไขถ้า
ไวยากรณ์
ถ้าเงื่อนไข
คำสั่ง MATLAB
คำอธิบาย
หากเงื่อนไขเป็นจริง คำสั่ง MATLAB ที่อยู่ระหว่าง if และ end จะถูกดำเนินการ และหากเงื่อนไขไม่เป็นความจริง คำสั่งที่อยู่หลังจุดสิ้นสุดจะถูกดำเนินการ
ตัวอย่าง
ตัวดำเนินการแบบมีเงื่อนไขอย่างอื่น
ไวยากรณ์
ถ้าเงื่อนไข1
มิฉะนั้นเงื่อนไขที่ 2
………………………
มิฉะนั้นเงื่อนไข
คำอธิบาย
ขึ้นอยู่กับการปฏิบัติตามเงื่อนไขเฉพาะ สาขาที่เกี่ยวข้องของโปรแกรมจะทำงาน หากเงื่อนไขทั้งหมดเป็นเท็จ คำสั่งที่วางหลังจากนั้นจะถูกดำเนินการ
ตัวอย่าง
ผู้ดำเนินการสวิตช์
ไวยากรณ์
สลับตัวแปร
มูลค่ากรณี1
มูลค่ากรณีที่ 2
……………………
กรณีความหมาย
แต่ละสาขาถูกกำหนดโดยคำสั่ง case และถูกป้อนเมื่อตัวแปรคำสั่ง switch รับค่าที่ระบุหลัง case หรือค่าใดค่าหนึ่งจากรายการ case หลังจากดำเนินการสาขาใด ๆ สวิตช์จะออกและค่าที่ระบุในกรณีอื่น ๆ จะไม่ถูกตรวจสอบอีกต่อไป หากไม่พบค่าที่เหมาะสมสำหรับตัวแปร สาขาของโปรแกรมที่สอดคล้องกับอย่างอื่นจะถูกดำเนินการ
ตัวอย่าง
การหยุดชะงักของวงจร สถานการณ์พิเศษ
ผู้ดำเนินการหยุดพัก
ไวยากรณ์
ตัวดำเนินการแบ่งใช้เพื่อจัดระเบียบการคำนวณแบบวน: สำหรับ...สิ้นสุด ในขณะที่...สิ้นสุด เมื่อตรงตามเงื่อนไข
ถ้าเงื่อนไข
คำสั่งแบ่งจะสิ้นสุดการวนซ้ำ (สำหรับหรือในขณะที่) และคำสั่งที่อยู่ในบรรทัดต่อไปนี้จะถูกดำเนินการ ในกรณีของลูปซ้อนกัน ให้แยกออกจากลูปด้านใน
การจัดการข้อยกเว้น ผู้ดำเนินการพยายาม… จับ
ไวยากรณ์
คำแถลงที่มีการประหารชีวิต
อาจนำไปสู่ข้อผิดพลาด
คำสั่งที่จะดำเนินการ
เมื่อเกิดข้อผิดพลาดในบล็อก
ระหว่างพยายามและจับ
คำอธิบาย
โครงสร้าง try...catch ช่วยให้คุณสามารถหลีกเลี่ยงสถานการณ์ข้อยกเว้น (ข้อผิดพลาดที่นำไปสู่การยุติโปรแกรม เช่น การเข้าถึงไฟล์ที่ไม่มีอยู่จริง) และดำเนินการบางอย่างหากเกิดขึ้น
ตัวอย่าง
บริการฟังก์ชั่น
แสดง- ส่งออกข้อความหรือค่าตัวแปรไปยังหน้าต่างคำสั่ง
ป้อนข้อมูล- ขออินพุตจากแป้นพิมพ์ ใช้เมื่อสร้างแอปพลิเคชันด้วยอินเทอร์เฟซบรรทัดคำสั่ง
ประเมินผล - ดำเนินการเนื้อหาของสตริงหรือตัวแปรสตริง เช่น คำสั่ง MATLAB
ชัดเจน- ลบตัวแปรสภาพแวดล้อมการทำงาน
กับแอลซี- ล้างหน้าต่างคำสั่ง
ข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันเหล่านี้และฟังก์ชันอื่น ๆ สามารถพบได้โดยการเรียกใช้ที่บรรทัดคำสั่ง
ช่วยfunction_name
เควสเพื่อปฏิบัติงานในห้องปฏิบัติการ
จำนวนตัวเลือกการมอบหมายงานเฉพาะเจาะจงจะถูกกำหนดโดยครู
ออกกำลังกาย№ 1
งานนี้เกี่ยวข้องกับการหาพหุนามการประมาณค่าพีชคณิตระดับ n สำหรับชุดข้อมูลบางชุด: ปn(x) .
วัตถุประสงค์ของงาน:
มีความจำเป็นต้องสร้างโปรแกรมสำหรับคำนวณค่าสัมประสิทธิ์ของพหุนามการประมาณค่าพีชคณิต ปn(x)= ก0 + ก1 x+ … + กnxn.
แนวทาง:
เอ็กซ์ฉัน | |||||
ยฉัน |
ราคาต่อรอง ก0 , ก1 , …, กnถูกกำหนดจากการแก้ระบบสมการ:
ที่นี่ n- ลำดับพหุนามการประมาณค่า
n+1 - จำนวนคู่คะแนนที่กำหนด ( x, ย),
ก0 , ก1 ,… กn- ค่าสัมประสิทธิ์ที่ต้องการของพหุนาม ปn(x)= ก0 + ก1 x+ … + กnxn).
ข้อกำหนดของโปรแกรม
· กำหนดขอบเขตของส่วน ซึ่งมีการสร้างพหุนามการประมาณค่าไว้ พี(เอ็กซ์)
· ชุด n- จำนวนส่วนของการประมาณค่า (หรือสิ่งที่เท่ากันคือระดับของพหุนาม)
บันทึก: x0, xn, nเข้ามาจากแป้นพิมพ์
· เพื่อให้ได้ข้อมูลเบื้องต้น (x, ย) (จำนวนคู่แต้ม (xฉัน, ยฉัน) ซึ่งสร้างพหุนามการประมาณค่าไว้ พี(เอ็กซ์) - n1=n+1) จัดเตรียม:
b เข้าสู่โหนดที่ตั้งแบบสุ่ม xฉัน, ผม=0, nจากแป้นพิมพ์
ь การคำนวณโหนด xฉัน, ผม=0, n, สอดคล้องกับการจัดเรียงข้อโต้แย้งแบบเดียวกัน xบนส่วน
ข ในย่อหน้า 1.2 ค่า ยฉัน, ผม=0, nไม่ว่าจะป้อนจากแป้นพิมพ์ (หากไม่ทราบฟังก์ชันต้นทาง) หรือคำนวณจากฟังก์ชันที่กำหนด ฉ(x)- นิพจน์ที่กำหนดฟังก์ชันจะถูกป้อนจากแป้นพิมพ์ และต้องเป็นไปตามกฎสำหรับการเขียนนิพจน์ใน MATLAB
ь การป้อนข้อมูล ( xฉัน, ยฉัน, ผม=0, n) จากไฟล์
· แก้ระบบสมการเพื่อกำหนดค่าสัมประสิทธิ์ของพหุนาม P(x)
· สร้างกราฟของฟังก์ชันตารางดั้งเดิมและพหุนาม P(x)
· หากข้อมูลต้นฉบับถูกกำหนดเป็นฟังก์ชัน f(x) ให้พล็อตข้อผิดพลาดในการประมาณค่า /f(x) - P(x)/ คำนวณค่าสัมบูรณ์สูงสุดของข้อผิดพลาดการแก้ไขในช่วงเวลาที่กำหนด
ออกกำลังกาย № 2
การแก้ไขเส้นโค้ง
วัตถุประสงค์ของงาน:
จำเป็นต้องสร้างโปรแกรมสำหรับคำนวณค่าสัมประสิทธิ์และสร้างฟังก์ชัน spline S(x) ซึ่ง "ติดกัน" จากชิ้นส่วนของพหุนามลำดับที่ 3 S ฉัน(x), ซึ่งมีรูปแบบการบันทึกพิเศษ:
ฟังก์ชั่นเอส ฉัน(x) กำหนดไว้ในเซ็กเมนต์
ข้อกำหนดของโปรแกรม
เมื่อปฏิบัติงานนี้ คุณต้อง:
· กำหนดขอบเขตของเซ็กเมนต์ที่สร้างฟังก์ชัน spline S(x)
· ตั้งค่า n - จำนวนส่วนการประมาณค่า ซึ่งแต่ละส่วนสร้างลูกบาศก์พหุนาม Si(x)
· หมายเหตุ: ป้อน x0, xn, n จากแป้นพิมพ์
· จัดระเบียบอินพุตของข้อมูลเริ่มต้น (x, y) (จำนวนคู่ของจุด (xi, yi) ที่ใช้สร้างฟังก์ชัน spline S(x), n1=n+1) โดยให้:
b การป้อนโหนดที่ตั้งแบบสุ่ม xi, i=0, n จากแป้นพิมพ์
b การคำนวณโหนด xi, i=0, n ซึ่งสอดคล้องกับตำแหน่งสม่ำเสมอของอาร์กิวเมนต์ x บนเซ็กเมนต์
ข ในย่อหน้า 1,2 ค่าของ yi, i=0, n จะถูกป้อนจากแป้นพิมพ์ (หากไม่ทราบฟังก์ชันดั้งเดิม) หรือคำนวณจากฟังก์ชันที่กำหนด f(x) นิพจน์ที่กำหนดฟังก์ชันจะถูกป้อนจากแป้นพิมพ์ และต้องเป็นไปตามกฎสำหรับการเขียนนิพจน์ใน MATLAB
b ป้อนข้อมูล (xi, yi, i=0, n) จากไฟล์
ข S1""(x0)=0, S3""(x3)=0
ข S1"(x0)=ฉ "(x0), S3"(x3)=ฉ "(x3)
ข S1""(x0)=ฉ "(x0), S3""(x0)=ฉ "(x3)
· เพื่อกำหนดค่าสัมประสิทธิ์ของเส้นโค้งลูกบาศก์ธรรมชาติ (เงื่อนไขขอบเขต 1) จำเป็นต้องแก้ระบบสมการต่อไปนี้:
ค่าสัมประสิทธิ์?0 =0,?n =0
· สร้างกราฟของฟังก์ชันดั้งเดิมและฟังก์ชันเส้นโค้งสำหรับเงื่อนไขขอบเขตทั้งสามประเภท
· สร้างกราฟของฟังก์ชันข้อผิดพลาดการแก้ไขเส้นโค้ง f(x) - S(x) สำหรับเงื่อนไขขอบเขตทั้งสามประเภท
บันทึก:
ใน MATLAB ดัชนีของอาร์เรย์หนึ่งมิติและสองมิติเริ่มต้นจาก 1 ไม่ใช่ 0 โปรดคำนึงถึงสิ่งนี้เมื่อเขียนโปรแกรม
ออกกำลังกาย№3
การประมาณฟังก์ชันโดยใช้วิธีกำลังสองน้อยที่สุด (LSM)
งานนี้เกี่ยวข้องกับการหาฟังก์ชันการประมาณ (พหุนามของดีกรี m) สำหรับชุดข้อมูลบางชุดที่สร้างขึ้นโดยวิธีกำลังสองน้อยที่สุด (LSM)
วัตถุประสงค์ของงาน:
คุณจำเป็นต้องสร้างโปรแกรมสำหรับค้นหาสัมประสิทธิ์ของพหุนามหรือไม่? (x)= ก0 + ก1 * x+… กn * xมวิธีกำลังสองน้อยที่สุด
สมมติว่ามีชุดข้อมูลดังต่อไปนี้:
เอ็กซ์ฉัน | |||||||||||
ยฉัน |
การค้นหาค่าสัมประสิทธิ์ที่จำเป็นดำเนินการดังนี้:
ที่ไหน n - จำนวนคะแนน ( x, ย),
ม - ระดับของพหุนามที่ต้องการ
ก 0 , ก 1 , …, ก ม - ค่าสัมประสิทธิ์ที่ต้องการ ( ? ( x )= ก 0 + ก 1 x + … + ก ม x ม ).
ข้อกำหนดของโปรแกรม
เมื่อปฏิบัติงานนี้ คุณต้อง:
· กำหนดขอบเขตของเซ็กเมนต์ที่สร้างฟังก์ชันการประมาณ?(x)=a0+a1*x+… an * xm
· ตั้ง m - องศาของพหุนาม
· หมายเหตุ: ป้อน x1, xn, m จากแป้นพิมพ์
· หากต้องการรับข้อมูลเริ่มต้น (x, y) ซึ่งเป็นฟังก์ชันการประมาณที่สร้างขึ้น (x)=a0+a1*x+… an* xm ให้จัดเตรียม:
b การป้อนโหนดที่ตั้งแบบสุ่ม xi, i=1, n จากแป้นพิมพ์
b การคำนวณโหนด xi, i=1, n ซึ่งสอดคล้องกับตำแหน่งสม่ำเสมอของอาร์กิวเมนต์ x บนเซ็กเมนต์
ข ในย่อหน้า 1,2 ค่าของ yi, i=1, n จะถูกป้อนจากแป้นพิมพ์ (หากไม่ทราบฟังก์ชันดั้งเดิม) หรือคำนวณจากฟังก์ชันที่กำหนด f(x) นิพจน์ที่กำหนดฟังก์ชันจะถูกป้อนจากแป้นพิมพ์ และต้องเป็นไปตามกฎสำหรับการเขียนนิพจน์ใน MATLAB
b ป้อนข้อมูล (xi, yi, i=1, n) จากไฟล์
· แก้ระบบสมการเพื่อหาค่าสัมประสิทธิ์ของพหุนาม?(x)
· สร้างกราฟของฟังก์ชันตารางดั้งเดิมและพหุนาม?(x)
· หากข้อมูลต้นฉบับถูกกำหนดเป็นฟังก์ชัน f(x) ให้พล็อตข้อผิดพลาดในการประมาณค่า /f(x) - ?(x)/ คำนวณค่าสัมบูรณ์สูงสุดของข้อผิดพลาดการแก้ไขในช่วงเวลาที่กำหนด
เมื่อดำเนินการจุดสุดท้ายในส่วนนั้น ใช้เวลาอย่างน้อย 500 คะแนนในการคำนวณ
ข้อกำหนดสำหรับงานห้องปฏิบัติการ
รายงานจะต้องมี:
1. คำชี้แจงของปัญหา
2. ข้อความโปรแกรม
3. ผลการทดสอบ
หมายเหตุ: จะต้องระบุข้อความของโปรแกรมพร้อมกับความคิดเห็น
อ้างอิง
1. Anufriev I.E. คู่มือการใช้ด้วยตนเอง Matlab 5.3/6.x - เซนต์ปีเตอร์สเบิร์ก: BHV-Petersburg, 2003. - 736 pp.: ป่วย
2. วี.พี. Dyakonov MATLAB 6.5 SPI/7 + Simulink 5/6 ในวิชาคณิตศาสตร์และการสร้างแบบจำลอง ซีรีส์ "ห้องสมุดมืออาชีพ" - อ.: SOLON-Press, 2548. - 576 หน้า: ป่วย
3. Anufriev I.E., Smirnov A.B., Smirnova E.N. MathLab 7. - เซนต์ปีเตอร์สเบิร์ก: BHV-Petersburg, 2005. - 1104 หน้า: ป่วย
บ่อยครั้งเมื่อจัดระเบียบลูป คุณจะต้องวนซ้ำผ่านค่าตัวนับในช่วงของค่าที่กำหนดและตามขั้นตอนการเปลี่ยนแปลงที่กำหนด ตัวอย่างเช่น หากต้องการวนซ้ำองค์ประกอบของเวกเตอร์ (อาร์เรย์) คุณต้องจัดระเบียบตัวนับจาก 1 ถึง N ด้วยขั้นตอนที่ 1 โดยที่ N คือจำนวนองค์ประกอบของเวกเตอร์ ในการคำนวณผลรวมของอนุกรม จะมีการระบุตัวนับจาก a ถึง b ด้วยขั้นตอนขั้นตอนการเปลี่ยนแปลงที่ต้องการ และอื่นๆ เนื่องจากความจริงที่ว่างานดังกล่าวมักพบในการฝึกเขียนโปรแกรม จึงมีการเสนอตัวดำเนินการ for loop สำหรับการนำไปใช้งาน ซึ่งทำให้การนำลูปไปใช้กับตัวนับง่ายขึ้นและมองเห็นได้ชัดเจนยิ่งขึ้น
ไวยากรณ์ของตัวดำเนินการ for loop เป็นดังนี้:
สำหรับ<счетчик> =
<начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
จบ
ลองพิจารณาการทำงานของวงจรนี้โดยใช้ตัวอย่างการใช้อัลกอริทึมเพื่อค้นหาค่าสูงสุดขององค์ประกอบในเวกเตอร์:
ฟังก์ชั่น search_max
ก = ;
ม = ก(1); % ค่าสูงสุดในปัจจุบัน
สำหรับ i=1:length(a) % วนซ้ำตั้งแต่ 1 ถึงจุดสิ้นสุดของเวกเตอร์ c
% ในขั้นที่ 1 (ค่าเริ่มต้น)
ถ้าม< a(i) %
если a(i) >ม.
ม = ก(ฉัน); % จากนั้น ม. = ก(i)
จบ
% สิ้นสุด จุดสิ้นสุดของ for loop
กระจาย(m);
ในตัวอย่างนี้ for loop จะตั้งค่าตัวนับ i และเปลี่ยนค่าจาก 1 เป็น 10 ในขั้นตอนที่ 1 โปรดทราบว่าหากไม่ได้ระบุขนาดขั้นตอนไว้อย่างชัดเจน จะใช้ค่าเริ่มต้นเป็น 1
ในตัวอย่างถัดไป เราจะพิจารณาการนำอัลกอริธึมไปใช้ในการเลื่อนองค์ประกอบเวกเตอร์ไปทางขวา เช่น องค์ประกอบสุดท้ายจะถูกวางไว้ในตำแหน่งสุดท้าย องค์ประกอบถัดไปจะแทนที่องค์ประกอบสุดท้าย ฯลฯ ไปที่องค์ประกอบแรก:
คิวฟังก์ชัน
ก = ;
disp (ก);
สำหรับ i=length(a):-1:2 % วนจาก 10 ถึง 2 โดยมีขั้นตอน -1
ก(i)=ก(i-1); % เลื่อนองค์ประกอบของเวกเตอร์ a
% สิ้นสุด จุดสิ้นสุดของ for loop
disp (ก);
ผลลัพธ์ของโปรแกรม
3 6 5 3 6 9 5 3 1 0
3
3 6 5 3 6 9 5 3 1
ตัวอย่างด้านบนแสดงให้เห็นว่า ในการใช้ลูปกับตัวนับจากค่าที่มากกว่าไปหาค่าที่น้อยกว่า คุณจะต้องระบุขั้นตอนอย่างชัดเจน ในกรณีนี้คือ -1 หากไม่ดำเนินการวนซ้ำจะหยุดทันทีและโปรแกรมจะทำงานไม่ถูกต้อง
โดยสรุป มาดูการทำงานของตัวดำเนินการ for loop โดยใช้ตัวอย่างการสร้างแบบจำลองลำดับสุ่มด้วยกฎแห่งการเปลี่ยนแปลง
โดยที่ค่าสัมประสิทธิ์จาก -1 ถึง 1; - ตัวแปรสุ่มปกติที่ไม่มีความคาดหวังและความแปรปรวนทางคณิตศาสตร์เป็นศูนย์
,
ความแปรปรวนของกระบวนการสุ่มจำลองอยู่ที่ไหน ในกรณีนี้ ตัวอย่างแรกจะถูกจำลองเป็นตัวแปรสุ่มปกติโดยไม่มีความคาดหวังและความแปรปรวนทางคณิตศาสตร์เป็นศูนย์ โปรแกรมการสร้างแบบจำลองมีลักษณะดังนี้:
ฟังก์ชั่นการสร้างแบบจำลอง_x
ร = 0.95; % ค่าสัมประสิทธิ์แบบจำลอง
ยังไม่มีข้อความ = 100; % จำนวนจุดจำลอง
อดีต = 100; % ความแปรปรวนของกระบวนการ
และ = อดีต*(1-r^2); % ความแปรปรวนของการบวกแบบสุ่ม
x = ศูนย์(N,1); % เริ่มต้นเวกเตอร์ x
x(1) = sqrt(อดีต)*randn; % การจำลองตัวอย่างที่ 1
สำหรับ i=2:N % วงรอบจาก 2 ถึง N
x(i)=r*x(i-1)+sqrt(et)*randn; การสร้างแบบจำลอง % SP
% สิ้นสุด จุดสิ้นสุดของลูป
โครงเรื่อง(x); % แสดง SP เป็นกราฟ
เมื่อรันโปรแกรมนี้ การดำเนินการของลำดับสุ่มจำลองจะปรากฏขึ้น
ข้าว. 2.1. ผลลัพธ์ของการสร้างแบบจำลองลำดับสุ่ม
การทำงานของโปรแกรมเริ่มต้นด้วยคำจำกัดความของตัวแปร (ในโปรแกรมคือตัวแปร เช่น) และสำหรับการนำโมเดลที่ระบุไปใช้ จากนั้นจึงคำนวณความแปรปรวน และตัวอย่างแรกของกระบวนการสุ่มถูกจำลองโดยใช้ฟังก์ชัน randn ฟังก์ชัน randn สร้างตัวแปรสุ่มปกติโดยมีค่าเฉลี่ยและความแปรปรวนของหน่วยเป็นศูนย์ ในการสร้างตัวแปรสุ่มที่มีความแปรปรวน ก็เพียงพอที่จะคูณตัวแปรสุ่มที่มีความแปรปรวนหน่วยด้วย เนื่องจาก ความแปรปรวนคือกำลังสองเฉลี่ยของตัวแปรสุ่มที่สัมพันธ์กับความคาดหวังทางคณิตศาสตร์ ส่งผลให้เราได้สายโปรแกรม
x(1) = sqrt(อดีต)*randn;
จากนั้น for ลูปจะถูกนำไปใช้กับตัวนับ i จาก 2 ถึง N ด้วยขั้นตอนที่ 1 ภายในลูป ตัวอย่าง N-1 ที่เหลือของกระบวนการสุ่มจะถูกจำลองตามสูตรข้างต้น บรรทัดสุดท้ายของโปรแกรมประกอบด้วยฟังก์ชัน plot() ซึ่งแสดงลำดับจำลองบนหน้าจอในรูปแบบของกราฟ การทำงานกับการแสดงกราฟบนหน้าจอจะกล่าวถึงรายละเอียดเพิ่มเติมในบทถัดไป