Tài liệu phương pháp tính lập trình (2)

17 328 0
Tài liệu phương pháp tính   lập trình (2)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG 2: GIẢI GẦN ĐÚNG PHƯƠNG TRÌNH ĐẠI SỐ VÀ SIÊU VIỆT §1 KHÁI NIỆM CHUNG Nếu phương trình đại số hay siêu việt phức tạp tìm nghiệm Bởi việc tìm nghiệm gần ước lượng sai số cần thiết Ta xét phương trình : f(x) = (1) với f(x) hàm cho trước biến x Chúng ta cần tìm giá trị gần nghiệm phương trình Quá trình giải thường chia làm hai bước: bước sơ bước kiện toàn nghiệm Bước giải sơ có nhiệm vụ: vây nghiệm, tách nghiệm thu hẹp khoảng chứa nghiệm Vây nghiệm tìm xem nghiệm phương trình nằm đoạn trục x Tách nghiệm tìm khoảng chứa nghiệm soa cho khoảng có nghiệm Thu hẹp khoảng chứa nghiệm làm cho khoảng chứa nghiệm nhỏ tốt Sau bước sơ ta có khoảng chứa nghiệm đủ nhỏ Bước kiện toàn nghiệm tìm nghiệm gần theo yêu cầu đặt Có nhiều phương pháp xác định nghiệm (1) Sau xét phương pháp §2.PHƯƠNG PHÁP LẶP ĐƠN Giả sử phương trình (1) đưa dạng tương đương : x = g(x) 2) từ giá trị xo gọi giá trị lặp ta lập dãy xấp xỉ công thức: xn = g(x+ -1) (3) với n = 1,2, Hàm g(x) gọi hàm lặp Nếu dãy x n → α n →∝ ta nói phép lặp (3) hội tụ x1 xo xo x1 Ta có định lí: Xét phương pháp lặp (3), giả sử : - [a,b] khoảng phân li nghiệm α phương trình (1) tức (2) - xn tính theo (3) thuộc [a, b] - g(x) có đạo hàm thoả mãn : g′( x) ≤ q < ,a < x < b (4) q số phương pháp lặp (3) hội tụ Ta minh hoạ phép lặp hình vẽ Cách đưa phương trình f(x) = dạng x = g(x) thực sau: ta thấy f(x) = biến đổi thành x = x + λf(x) với λ ≠ Sau đặt x+λf(x) = g(x) cho điều kiện (4) thoả mãn Ví dụ: xét phương trình x3 + x - 1000 = Sau bước giải sơ ta có nghiệm x ∈ ( 9,10 ) Nếu đưa phương trình dạng: x = 1000 - x3 = g(x) ' dễ thấy | g (x) | > khoảng ( 9, 10 ) nên không thoả mãn điều kiện (4) 13 Chúng ta đưa phương trình dạng x = 1000 − x ta thấy điều kiện (4) thoả mãn.Xây dựng dãy xấp xỉ xn+1 = 1000 − xn với xo chọn ( 9, 10 ) Trên sở phương pháp có chương trình tính toán sau: Chương trình giải phương trình exp((1/3)*ln(1000-x)) với số lần lặp cho trước Chương trình 2-1 //lap don #include #include #include void main() { int i,n; float x,x0; float f(float); clrscr(); printf("Cho so lan lap n = "); scanf("%d",&n); printf("Cho gia tri ban dau cua nghiem x0 = "); scanf("%f",&x0); x=x0; for (i=1;iepsi) { x=y; y=f(x); } printf("Nghiem cua phuong trinh la %.6f",y); getch(); } float f(float x) { float a=exp((1./3.)*log(1000-x)); return(a); } Cho giá trị đầu xo = 1.Kết tính toán x = 9.966555 §3.PHƯƠNG PHÁP CHIA ĐÔI CUNG Giả sử cho phương trình f(x) = với f(x) liên tục đoạn [a, b] f(a).f(b) < Chia đoạn [a, b] thành phần điểm chia (a + b)/2 y b a ξ b1 x Nếu f((a+b)/2) = ξ = (a+b)/2 Nếu f((a + b)/2) ≠ chọn [a,(a+b)/2] hay [(a + b)/2, b] mà giá trị hàm hai đầu trái dấu kí hiệu [a 1,b1].Đối với [a 1, b1] ta lại tiến hành [a, b] Cách làm mô tả chương trình sau dùng để tìm nghiệm phương trình: x4 + 2x3 - x - = đoạn [0, 1] Chương trình 2-3 //chia doi cung #include #include #include #define epsi 0.00001 void main() { float x0,x1,x2; float y0,y1,y2; float f(float); 15 int maxlap,demlap; clrscr(); printf("Tim nghiem cua phuong trinh phi tuyen"); printf("\nbang cach chia doi cung\n"); printf("Cho cac gia tri x0,x1,maxlap\n"); printf("Cho gia tri x0 = "); scanf("%f",&x0); printf("Cho gia tri x1 = "); scanf("%f",&x1); printf("Cho so lan lap maxlap = "); scanf("%d",&maxlap); y0=f(x0); y1=f(x1); if ((y0*y1)>0) { printf("Nghiem khong nam doan x0 - x1\n"); printf(" x0 = %.2f\n",x0); printf(" x1 = %.2f\n",x1); printf(" f(x0) = %.2f\n",y0); printf(" f(x1) = %.2f\n",y1); } demlap=0; { x2=(x0+x1)/2; y2=f(x2); y0=f(x0); if (y0*y2>0) x0=x2; else x1=x2; demlap=demlap+1; } while(((abs((y2-y0))>epsi)||(demlapmaxlap) { printf("Phep lap khong hoi tu sau %d lan lap ",maxlap); printf(" x0 = %.2f\n",x0); printf(" x1 = %.2f\n",x1); printf(" f(x2) = %.2f\n",y2); } else { printf("Phep lap hoi tu sau %d lan lap\n",demlap); printf("Nghiem x = %.2f",x2); } getch(); } float f(float x) { float a=x*x*x*x+2*x*x*x-x-1 ; return(a); 16 } Kết tính cho nghiệm: x = 0.87 §4 PHƯƠNG PHÁP DÂY CUNG Giả sử f(x) liên tục trên đoạn [a, b] f(a).f(b) < Cần tìm nghiệm f(x) = Để xác định ta xem f(a) < f(b) > Khi thay chia đôi đoạn [a, b] ta chia [a, b] theo tỉ lệ -f(a)/f(b) Điều cho ta nghiệm gần : x1 = a + h Trong −f(a) h1 = −f(a)+ f( b) ( b−a) Tiếp theo dùng cách với đoạn [ a, x 1] hay [x 1, b] mà hai đầu hàm nhận giá trị trái dấu ta nghiệm gần x2 v.v Về mặt hình học, phương pháp có nghĩa kẻ dây cung đường cong f(x) qua hai điểm A[a, f(a)] B[b, f(b)] Thật phương trình dây cung AB có dạng: y − f (a ) x−a = b − a f ( b) − f ( a ) a x1 ξ b Cho x = x1 y = ta có x1 = a − f (a ) ( b − a) f ( b) − f (a ) Trên sở phương pháp ta có chương trình tính nghiệm phương trình x4 + 2x3 - x - = đoạn [0,1] Chương trình 2-4 //phuong phap day cung #include #include #include #define epsi 0.00001 void main() { float a,b,fa,fb,dx,x; float f(float); clrscr(); printf("Tim nghiem cua phuong trinh phi tuyen\n"); printf("bang phuong phap day cung\n"); printf("Cho cac gia tri a,b\n"); 17 printf("Cho gia tri cua a = "); scanf("%f",&a); printf("Cho gia tri cua b = "); scanf("%f",&b); fa=f(a); fb=f(b); dx=fa*(b-a)/(fa-fb); while (fabs(dx)>epsi) { x=a+dx; fa=f(x); if((fa*fb)

Ngày đăng: 08/05/2017, 12:26

Từ khóa liên quan

Mục lục

  • Chương trình 2-1

  • Chương trình 2-2

    • Chương trình 2-3

    • Chương trình 2-4

    • Chương trình 2-5

    • Chương trình 2-6

    • Chương trình 2-7

    • Chương trình 2-8

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan