230 likes | 430 Views
ปฏิบัติการคอมพิวเตอร์ เรื่อง ระบบสมการหลายตัวแปร. อ . ดร . ชโล ธร ธรรมแท้ สาขาวิชาวิศวกรรมเครื่องกล มหาวิทยาลัยเทคโนโลยี สุร นารี. Linear Systems: GAUSS Elimination. ปัญหา n สมการ - n ตัวแปร. หรือเขียนในรูป [A]{x} ={b}. GAUSS Elimination. กำจัดไปข้างหน้า
E N D
ปฏิบัติการคอมพิวเตอร์ เรื่อง ระบบสมการหลายตัวแปร อ.ดร.ชโลธร ธรรมแท้ สาขาวิชาวิศวกรรมเครื่องกล มหาวิทยาลัยเทคโนโลยีสุรนารี
Linear Systems: GAUSS Elimination ปัญหา n สมการ - n ตัวแปร หรือเขียนในรูป [A]{x}={b}
GAUSS Elimination • กำจัดไปข้างหน้า • แปลง Matrix ให้เป็น Matrix สามเหลี่ยมบน • จะเหลือสมการสุดท้ายเป็น 1 สมการ 1 ตัวแปร • จะได้คำตอบของตัวแปรสุดท้าย • จากนั้นแทนค่ากลับขึ้นมาทีละสมการ
Forward Elimination แถวล่าง = แถวล่าง - (สปส ล่าง / สปส บน )แถวบน
Back Substitution จาก Forward Elimination ได้ Matrix สามเหลี่ยมบน แทนค่า กลับ หรือ
MATLAB: GaussElim.m % ขั้นตอน Forward Elimination % factor = A(i,j)/A(j,j); % factor = สปส ล่าง / สปส บน A(i,j:n) = A(i,j:n) - factor*A(j,j:n); %แถวล่าง-factor*แถวบน b(i)= b(i) - factor*b(j); %แถวล่าง-factor*แถวบน % ขั้นตอน Back Substitution% for k = n-1:-1:1 % loop Back sub x(k) = (b(k) - A(k,k+1:n)*x(k+1:n))/A(k,k) end Download ได้จาก http://eng.sut.ac.th/me/subject.html
ปัญหาของวิธี GAUSS Elimination สมการในรูปต่อไปนี้ จะไม่สามารถทำ Gauss Elimination ได้ • เนื่องจาก a11เป็น 0 ทำให้ขั้นตอนการกำจัด row2 เกิดการหารด้วย 0 • แก้ปัญหาโดยสลับ Row3 กับ Row1 แล้วจึงเริ่มคำนวณ • ระหว่างการคำนวณอาจเกิด สปส ของ column ซ้ายเป็นศูนย์ ให้ข้ามการทำงานในแถวนั้นไป ใน MATLAB คือบรรทัด: if A(i,j)~=0 • เรียกว่าการทำ Pivoting
ปัญหาของวิธี GAUSS Elimination The exact solution is ทำ Forward Elimination หากปัดเศษ x2 จะได้คำตอบ x1 ต่างกันอย่างมาก ดังนี้
สมการชุดเดียวกัน หากสลับแถว ทำ Forward Elimination หากปัดเศษ x2 จะได้คำตอบ x1 ต่างกันเล็กน้อย : Partial Pivoting
แบบฝึกหัด จงหาคำตอบของระบบสมการ 1. 2.
Linear Systems: LU factorization เมื่อ [A] เป็นค่าที่ทราบ แก้สมการทั้ง 9 ทีละสมการ จะได้ [L] และ [U]
LU factorization ให้ [U]{x}={y} ทำให้[L]{y}={b} หาคำตอบของ {y} ได้ง่ายจาก matrix สามเหลี่ยมล่าง แก้ [L]{y}={b} ให้ [U]{x}={y} หาคำตอบของ {x} ได้ง่ายจาก matrix สามเหลี่ยมบน
MATLAB function: lu() [L,U]=lu(A) สมการ
MATLAB function: \ • คำสั่ง \ ใน MATLAB ใช้ในการหาคำตอบของสมการ [A]{x}={b} • ต้องการหาคำตอบ [L]{y}={b} พิมพ์ >> y=L\b • ต้องการหาคำตอบ [U]{x}={y} พิมพ์ >> x=U\y คำถาม: A\b ไห้ผลลัพธ์เป็น อะไร
MATLAB function: inv() • inv() ใช้ในการหา inverse matrix เช่น inv(A) • ดังนั้นหาคำตอบของสมการ [A]{x}={b} ได้จากคำสั่ง >> x=inv(A)*b จากคุณสมบัติ คูณเข้าทางซ้าย ทำให้ได้ {x}
Linear Systems: : Jacobi Iteration จัดรูป สมการ เดาค่าเริ่มต้น x1,x2,x3 เช่น =0 แล้วแทนค่ากลับลงไปในสมการที่จัดรูปแล้ว Iteration 1:
Linear Systems: : Jacobi Iteration แทนค่า x1,x2,x3 จาก iteration 1 ในสมการที่จัดรูปแล้ว Iteration 2: ทำซ้ำ แทนค่า x1,x2,x3 จาก iteration 2 และทำไปเรื่อยๆ Iteration 3 : X1=2.904500, X2=-2.674905, X3=7.111217 Iteration 4 : X1=2.907117, X2=-2.674157, X3=7.110955
Jacobi.m X1old=0; X2old=0; X3old=0; % กำหนดค่าเริ่มต้น for i=1:10 X1new = (7.85 + 0.1*X2old + 0.2*X3old) /3 ; %สมการ 1 X2new = (-19.3 - 0.1*X1old + 0.3*X3old) /7; %สมการ 2 X3new = (71.4 - 0.3*X1old + 0.2*X2old) /10; %สมการ 3 X1old=X1new; X2old=X1new; X3old=X1new; %เก็บค่าเก่า fprintf ('iter=%d X1=%f X2=%f X3=%f \n', i,X1new,X2new,X3new); end Download ได้จาก http://eng.sut.ac.th/me/subject.html
แบบฝึกหัด • จงหาผลเฉลยของสมการ โดยใช้วิธี Jacobi Iteration • เปรียบเทียบผลที่ได้กับวิธีอื่นๆ
Nonlinear Systems สมการไม่เชิงเส้นดังในบท root of equations สามารถมีหลายสมการ หลายตัวแปร คำตอบของสมการคือจุดตัดกันของเส้นกราฟทั้ง 2
Nonlinear Systems: Jacobi Iteration สามารถประยุกต์ใช้ Jacobi Iteration ในการหาคำตอบของ Nonlinear systems Case1 Case2
แบบฝึกหัด • จงหาผลเฉลยของสมการ โดยใช้วิธี Jacobi Iteration • เปรียบเทียบระหว่างการจัดรูปสมการ Case1 กับ Case2 ให้ผลลัพธ์ต่างกันอย่างไร • กำหนดค่าเริ่มต้น X1=2, X2=3 ทำซ้ำ 5ครั้ง