Khái niệm về phương pháp tính: Phương pháp tính là môn học về những lí luận cơ bản và các phương pháp giải gần đúng, cho ra kết quả bằng số của các bài toán thường gặp trong toán học cũ
Trang 1§1 KHÁI NIỆM CHUNG
1 Khái niệm về phương pháp tính: Phương pháp tính là môn học về những lí luận cơ
bản và các phương pháp giải gần đúng, cho ra kết quả bằng số của các bài toán thường gặp trong toán học cũng như trong kĩ thuật
Chúng ta thấy rằng hầu hết các bài toán trong toán học như giải các phương trình đại số hay siêu việt, các hệ phương trình tuyến tính hay phi tuyến, các phương trình vi phân thường hay đạo hàm riêng,tính các tích phân, thường khó giải đúng được, nghĩa
là khó tìm kết quả dưới dạng các biểu thức
Một số bài toán có thể giải đúng được nhưng biểu thức kết quả lại cồng kềnh, phức tạp khối lượng tính toán rất lớn Vì những lí do trên, việc giải gần đúng các bài toán là vô cùng cần thiết
Các bài toán trong kĩ thuật thường dựa trên số liệu thực nghiệm và các giả thiết gần đúng Do vậy việc tìm ra kết quả gần đúng với sai số cho phép là hoàn toàn có ý nghĩa thực tế
Từ lâu người ta đã nghiên cứu phương pháp tính và đạt nhiều kết quả đáng kể Tuy nhiên để lời giải đạt được độ chính xác cao, khối lượng tính toán thường rất lớn Với các phương tiện tính toán thô sơ, nhiều phương pháp tính đã được đề xuất không thể thực hiện được vì khối lượng tính toán quá lớn Khó khăn trên đã làm phương pháp tính không phát triển được
Ngày nay nhờ máy tính điện tử người ta đã giải rất nhanh các bài toán khổng lồ, phức tạp, đã kiểm nghiệm được các phương pháp tính cũ và đề ra các phương pháp tính mới Phương pháp tính nhờ đó phát triển rất mạnh mẽ Nó là cầu nối giữa toán học và thực tiễn Nó là môn học không thể thiếu đối với các kĩ sư
Ngoài nhiệm vụ chính của phương pháp tính là tìm các phương pháp giải gần đúng các bài toán,nó còn có nhiệm vụ khác như nghiên cứu tính chất nghiệm, nghiên cứu bài toán cực trị, xấp xỉ hàm v.v Trong phần này chúng ta sẽ nghiên cứu một loạt bài toán thường gặp trong thực tế và đưa ra chương trình giải chúng
2 Các đặc điểm của phương pháp tính: Đặc điểm về phương pháp của môn học này là
hữu hạn hoá và rời rạc hoá
Phương pháp tính thường biến cái vô hạn thành cái hữu hạn, cái liên tục thành cái rời rạc và sau cùng lại trở về với cái vô hạn, cái liên tục Nhưng cần chú ý rằng quá trình trở lại cái vô hạn, cái liên tục phải trả giá đắt vì khối lượng tính toán tăng lên rất nhiều Cho nên trong thực tế người ta dừng lại khi nghiệm gần đúng sát với nghiệm đúng ở một mức độ nào đó
Đặc điểm thứ hai của môn học là sự tiến đến kết quả bằng quá trình liên tiếp Đó
là quá trình chia ngày càng nhỏ hơn, càng dày đặc hơn hoặc quá trình tính toán bước sau dựa vào các kết quả của các bước trước Công việc tính toán lặp đi lặp lại này rất thích hợp với máy điện toán
Khi nghiên cứu phương pháp tính người ta thường triệt để lợi dụng các kết quả đạt được trong toán học Cùng một bài toán có thể có nhiều phương pháp tính khác nhau Một phương pháp tính được coi là tốt nếu nó đạt các yêu cầu sau:
Trang 2- đánh giá được sai số và sai số càng nhỏ càng tốt
- thuật toán thực hiện được trên máy điện toán và thời gian chạy máy ít nhất
3 Các loại sai số: Trong việc thiết lập và giải các bài toán thực tế ta thường gặp các loại
sai số Giả sử ta xét bài toán A nào đó Nghiên cứu các quy luật liên hệ giữa các đại lượng trong bài toán đẫn đến phương trình có dạng tổng quát :
y = Bx
Trong đó : x - đại lượng đã biết
y - đại lượng chưa biết
B - quy luật biến đổi từ x sang y
Bài toán thực tế thường rất phức tạp Để đơn giản và có thể diễn đạt nó bằng toán học, người ta đưa ra một số giả thiết không hoàn toàn chính xác để nhận được phương trình trên
Vì vậy nếu gọi y1 là giá trị đúng của y thì khi đó y y1 Giá trị | y - y1| được gọi là
sai số giả thiết của bài toán
Do x là số liệu ban đầu của bài toán,thu được từ đo lường,thí nghiệm nên nó chỉ là
giá trị gần đúng Sai số này được gọi là sai số của các số liệu ban đầu
Để giải gần đúng phương trình trên ta thường thay B bằng C hay x bằng t để phương trình đơn giản hơn và có thể giải được Bằng cách đó ta tìm được y2 gần đúng với y Giá trị | y 2 - y| được gọi là sai số phương pháp của bài toán
Cuối cùng khi thực hiện các phép tính ta thường thu gọn các kết quả trung gian hay kết quả cuối cùng nên đáp số của bài toán là y3 Giá trị |y3-y| là sai số tính toán
Trong phần này chúng ta quan tâm tới sai số phương pháp
4 Xấp xỉ và hội tụ: Xét bài toán
y = Bx
Giả sử y là nghiệm đúng của bài toán mà ta chưa biết Bằng phương pháp nào đó
ta lấy y1 thay cho y và khi đó y1 gọi là xấp xỉ thứ nhất của nghiệm và viết :
y1 y
Cũng bằng phương pháp tương tự, ta xây dựng được một dãy các xấp xỉ y 1 ,y 2 ,y 3 , y n Nếu ta có :
yy
lim n
thì ta nói dãy xấp xỉ hội tụ tới nghiệm y
§2 TÍNH GIÁ TRỊ CỦA ĐA THỨC
1 Sơ đồ Horner: Giả sử chúng ta cần tìm giá trị của một đa thức tổng quát dạng:
Trang 3Bước n-1 k = n - 1 P = P(x o ) = ( ((a o x + a 1 )x+a 2 x)+ +a n-1 )x
Bước n k = n P = P(x o ) = ( ((a o x + a 1 )x+a 2 x)+ +a n-1 )x + a n
Sau đây là chương trình thực hiên thuật toán trên
Trang 42 Sơ đồ Horner tổng quát: Giả sử chúng ta có đa thức :
P n (x) = a 0 x n + a 1 x n - 1 + a 2 x n - 2 + + a n (1)
Khai triển Taylor của đa thức tại x = x o có dạng :
n 0 0
) n ( 2
0
0 0
0 0
n
!2
)x(P)
xx(
!2
)x(P)xx(
!1
)x(P)x
) n (
2 0
0 0
0 0
n 0 n 0 1 n 0
)xx(
!2
)x(P
)xx(
!2
)x(P)xx(
!1
)x(P)x(P)x(P)x(P)
) n ( 2
0
0 0
0 1
n
!2
)x(P)
xx(
!2
)x(P)xx(
!1
)x(P)x(P)x
0 0
1
!2
)x(P)
xx(
!2
)x(P
!1
)x(P)x
)x(P)x(
0 1 n
Trang 6}
printf("\nSo do Horner tong quat");
printf("\nKhai trien tai x = %.4f\n",x);
1 Phép cộng hai đa thức: Giả sử chúng ta có hai đa thức A(x) bậc n và B(x) bậc m với n >
m Khi cộng hai đa thức này, chúng ta cộng lần lượt các hệ số cùng bậc của chúng với nhau Ta có chương trình sau :
Trang 72 Phép nhân hai đa thức: Để thấy rõ thuật toán xác định các hệ số của đa thức C(x) là
kết quả của phép nhân hai đa thức A(x) và B(x) ta cho một ví dụ cụ thể :
A(x) = a o x 5 + a 1 x 4 + a 2 x 3 + a 3 x 2 + a 4 x + a 5
B(x) = b o x 3 + b 1 x 2 + b 2 x + b 3
C(x) = A(x).B(x)
= a o b o x 8 + (a o b 1 + a 1 b o )x 7 +( a o b 2 + a 1 b 1 + a 2 b o )x 6
+ (aob3 + a1b2 + a2b1+ a3bo )x 5 + (a1b3 + a2b2 + a3b1 + a4bo)x 4
+ (a2b3 + a3b2 + a4b1 + a5b+)x 3 + ( a3b3 + a4b2 + a5b1)x 2 + a5b2x + a5b3
Các hệ số của đa thức kết quả là :
C5 = a2b3 + a3b2 + a4b1 + a5bo
C6 = a3b3 + a4b2 + a5b1
C7 = a5b2
C8 = a5b3
Ta nhận thấy là hệ số C k của C(x) là tổng các tích các hệ số của đơn thức bậc i của A(x)
và bậc (k-i) của B(x) Chỉ số i = 0 khi k <= m + 1 và i = k + m khi k > m+1 Chỉ số j = k khi k
<= n + 1 và j = n +1 khi k > n + 1 Chương trình tính tích hai đa thức :
Trang 8else j=n+1;
if (k<=(m+1)) p=1;
else p= k-m;
c[k]=0;
for (i=p;i<=j;i++) c[k] = c[k] + a[i]*b[k-i+1];
)x(R)x(Q)x(B
)x(A
m
1 m m
n m
Trang 9j=n;
for (k=1;k<=l;k++) {
for (i=1;i<=j;i++)
Trang 10if (abs(r[1])<epsi) r[1]=0.0;
Trang 11Nếu phương trình đại số hay siêu việt khá phức tạp thì ít khi tìm được nghiệm đúng Bởi vậy việc tìm nghiệm gần đúng và ước lượng sai số là rất cần thiết
Ta xét phương trình :
với f(x) là hàm cho trước của biến x Chúng ta cần tìm giá trị gần đúng của nghiệm của phương trình này
Quá trình giải thường chia làm hai bước: bước sơ bộ và bước kiện toàn nghiệm
Bước giải sơ bộ có 3 nhiệm vụ: vây nghiệm, tách nghiệm và thu hẹp khoảng chứa nghiệm
Vây nghiệm là tìm xem các nghiệm của phương trình có thể nằm trên những đoạn nào của trục x Tách nghiệm là tìm các khoảng chứa nghiệm soa cho trong mỗi khoảng chỉ có đúng một nghiệm Thu hẹp khoảng chứa nghiệm là làm cho khoảng chứa nghiệm càng nhỏ càng tốt Sau bước sơ bộ ta có khoảng chứa nghiệm đủ nhỏ
Bước kiện toàn nghiệm tìm các nghiệm gần đúng theo yêu cầu đặt ra
Có rất nhiều phương pháp xác định nghiệm của (1) Sau đây chúng ta xét từng phương pháp
- [a,b] là khoảng phân li nghiệm của phương trình (1) tức là của (2)
- mọi x n tính theo (3) đều thuộc [a, b]
- g(x) có đạo hàm thoả mãn :
trong đó q là một hằng số thì phương pháp lặp (3) hội tụ
Ta có thể minh hoạ phép lặp trên bằng hình vẽ trên
Cách đưa phương trình f(x) = 0 về dạng x = g(x) được thực hiện như sau: ta thấy f(x) = 0 có thể biến đổi thành x = x + f(x) với 0 Sau đó đặt x+ f(x) = g(x) sao cho điều kiện (4) được thoả mãn
Ví dụ: xét phương trình
x 3 + x - 1000 = 0 Sau bước giải sơ bộ ta có nghiệm x 1 ( 9,10 )
Nếu đưa phương trình về dạng:
x = 1000 - x 3 = g(x) thì dễ thấy | g ' (x) | > 1 trong khoảng ( 9, 10 ) nên không thoả mãn điều kiện (4)
Chúng ta đưa phương trình về dạng
3 1000 x
Trang 12Chươ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
Trang 13Cho giá trị đầu xo = 1.Kết quả tính toán x = 9.966555
§3.PHƯƠNG PHÁP CHIA ĐÔI CUNG
Giả sử cho phương trình f(x) = 0 với f(x) liên tục
trên đoạn [a, b] và f(a).f(b) < 0 Chia đoạn [a, b] thành 2
phần bởi chính điểm chia (a + b)/2
1 Nếu f((a+b)/2) = 0 thì = (a+b)/2
2 Nếu f((a + b)/2) 0 thì chọn [a,(a+b)/2] hay [(a +
b)/2, b] mà giá trị hàm hai đầu trái dấu và kí hiệu là
[a 1 ,b 1 ].Đối với [a 1 , b 1 ] ta lại tiến hành như [a, b]
Cách làm trên được mô tả trong chương trình sau
dùng để tìm nghiệm của phương trình:
x 4 + 2x 3 - x - 1 = 0 trên đoạn [0, 1]
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 = ");
y
x
Trang 14else x1=x2;
Kết quả 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 trên đoạn [a, b] và f(a).f(b) < 0 Cần tìm nghiệm của f(x) = 0 Để xác định ta
xem f(a) < 0 và f(b) > 0 Khi đó thay vì 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 đúng :
x1 = a + h1
Trong đó
) a b ( ) b ( ) a
(
) a (
h 1
Tiếp theo dùng cách đó với đoạn [ a, x1] hay [x1, b] mà hai đầu hàm nhận giá trị trái dấu ta được nghiệm gần đúng x 2 v.v
Trang 15Cho x = x1 y = 0 ta có
)a()b(
)a(a
Trên cơ sở của phương pháp ta có chương trình tính
nghiệm của phương trình
printf("Tim nghiem cua phuong trinh phi tuyen\n");
printf("bang phuong phap day cung\n");
printf("Cho cac gia tri a,b\n");
printf("Cho gia tri cua a = ");
else b=x;
a x 1 b
Trang 16
Kết quả tính cho nghiệm: x = 0.876
§5 PHƯƠNG PHÁP LẶP NEWTON
Phương pháp lặp Newton (còn gọi là phương pháp tiếp tuyến) được dùng nhiều vì nó hội tụ nhanh Giả sử f(x) có nghiệm là đã được tách trên đoạn [a,
b] đồng thời f'(x) và f"(x) liên tục và giữ nguyên dấu trên
đoạn [a, b] Khi đã tìm được xấp xỉ nào đó xn [a, b] ta có
thể kiện toàn nó theo phương pháp Newton Từ mút B ta vẽ
tiếp tuyến với đường cong Phương trình đường tiếp tuyến
là
)xx)(
b(f)x(
y 0 0
Tiếp tuyến này cắt trục hoành tại điểm có y = 0, nghĩa là:
)xx)(
b(f)x
( 0 1 0
hay :
)x(f
)x(x
x
0
0 0
1
Từ x 1 ta lại tiếp tục vẽ tiếp tuyến với đường cong thì giao điểm x i sẽ tiến tới nghiệm của phương trình
Việc chọn điểm ban đầu x o rất quan trọng Trên hình vẽ trên ta thấy nếu chọn điểm ban đầu x o = a thì tiếp tuyến sẽ cắt trục tại một điểm nằm ngoài đoạn [a, b] Chọn x o = b sẽ thuận lợi cho việc tính toán Chúng ta có định lí:
Nếu f(a).f(b) < 0 ; f(x) và f"(x) khác không và giữ nguyên dấu xác định khi x [a, b] thì xuất phát từ xo
[a, b] thoả mãn điều kiện f(x o ).f(x o ) > 0 có thể tính theo phương pháp Newton nghiệm duy nhất với độ chính xác tuỳ ý
Khi dùng phương pháp Newton cần lấy xo là đầu mút của đoạn [a,b] để tại đó f(xo).f"(xo) > 0 Áp dụng lí thuyết trên chúng ta xây dựng chương trình tính sau:
printf("Tim nghiem cua phuong trinh phi tuyen\n");
printf("bang phuong phap lap Newton\n");
printf("Cho gia tri cua x0 = ");
Trang 17t = fabs(x[i+1]-x[i]);
x[i]=x[i+1];
i=i+1;
if (i>100) {
printf("Bai toan khong hoi tu\n");
getch();
exit(1);
} else ;
Trang 182 2
2 2
2(x x ) ah bh c fh
1
2 1
2 0
b
)1(h
f)1(ffa
c2x
n
2 0
45312
0)
11(2.01
07385
0)11()0907.0()2915.0(1
c
91338
02
.0
2.0)45312
0()097.0(2915.0b
1)0907.0()45312
0(4)91338
0(91338
0
)0907.0(20
.2
2 4
109184
1
c
81826
010474
.0
10474
0)4728.0(109184.10907.0b
4728.09095
.110474
09095.0
07385
09095.1)109184.1()0907.0(9095.0
110
9184.1)4728.0(4)81826
0(81826
0
109184.1289526
Ta có thể lấy n1 = 1.895494 làm nghiệm của bài toán
Chương trình giải bài toán bằng phương pháp Muller như sau:
Trang 19printf("Cho khoang can tim nghiem [a,b]\n");
printf("Cho gia tri duoi a = ");
n1=-c/b;
n2=n1;
}
if ((a!=0)&&(b==0)) {
n1=(-sqrt(-c/a));
n2=(sqrt(-c/a));
}
if ((a!=0)&&(b!=0)) {
n1=x0-2*c/(b+(sqrt(b*b-4*a*c)));
n2=x0-2*c/(b-(sqrt(b*b-4*a*c)));
Trang 20xr=n1;
if (xr>x0) {
x2=x0;
x0=xr;
} else {
x1=x0;
x0=xr;
} }
Sau đó lại tiếp tục các bước trên cho đến khi tìm hết các nghiệm của Pn(x)
Chúng ta khảo sát phương trình sai phân có dạng như sau :
Đây là một phương trình sai phân tuyến tính hệ số hằng Khi cho trước các giá trị đầu yo, y1, yn-1 ta tìm được các giá trị yn, yn+1, Chúng được gọi là nghiệm của phương trình sai phân tuyến tính (1)
Đa thức
với cùng một hệ số ai như (1) được gọi là đa thức đặc tính của phương trình sai phân tuyến tính (1) Nếu (2) có n nghiệm phân biệt x1, x2, , xn thì (1) có các nghiệm riêng là
k i
i x
y
Nếu y i là các nghiệm của phương trình sai phân là tuyến tính (1),thì
k n n
k 2 2
k 1 1
với các hệ số ci bất kì cũng là nghiệm của phương trình sai phân tuyến tính hệ số hằng (1)
Nếu các nghiệm cần sao cho :
1 1 k
x
xc
c1xcy
Trang 211 k
1
2
2 1
1 k
1
k
x
xc
c1
x
xc
c1xy
1 2 k
1 k
1 k
Nếu phương trình vi phân gồm n+1 hệ số, một nghiệm riêng yk có thể được xác định từ n giá trị
yk-1, yk-2, ,yn-1 Điều cho phép tính toán bằng cách
truy hồi các nghiệm riêng của phương trình vi phân
Để tính nghiệm lớn nhất của đa thức, ta xuất phát từ các nghiệm riêng y1 = 0, y1 = 0, , yn =1 để tính yn+1 Cách tính này được tiếp tục để tính yn+2 xuất phát từ y1 = 0, y2 = 0, ,yn+1 và tiếp tục cho đến khi yk+1/yk không biến đổi nữa Trị số của yk+n được tính theo công thức truy hồi :
0 n
a
1
Ví dụ: Tính nghiệm của đa thức Pn(x) = P3(x) = x 3 - 10x 2 + 31x - 30
Như vậy ao = 1, a1 = -10,a2 = 31 và a3 = -30
Phương trình sai phân tương ứng là :
yk+3 -10yk+2 + 31yk+1 - 30yk = 0
Ta cho trước các giá trị y1 = 0; y2 = 0 và y3 = 1 Theo (4) ta tính được :
y4 = - (-10y3 + 31y2 - 30y1) = 10
y5 = - (-10y4 + 31y3 - 30y2) = 69
y6 = - (-10y5 + 31y5 - 30y3) = 410
y7 = - (-10y6 + 31y5 - 30y4) = 2261
y8 = - (-10y7 + 31y6 - 30y5) = 11970
y9 = - (-10y8 + 31y7 - 30y6) = 61909
y10 = - (-10y9 + 31y8 - 30y8) = 315850
y11 = - (-10y10 + 31y9 - 30y8) = 1598421
y12 = - (-10y11 + 31y10 - 30y9) = 8050130
y13 = - (-10y12 + 31y11 - 30y10) = 40425749
y14 = - (-10y13 + 31y12 - 30y11) = 202656090
y15 = - (-10y14 + 31y13 - 30y12) = 1014866581
y 16 = - (-10y 15 + 31y 14 - 30y 13 ) = 5079099490
y 17 = - (-10y 16 + 31y 15 - 30y 14 ) = 24409813589
y 18 = - (-10y 17 + 31y 16 - 30y 15 ) = 127092049130
y 19 = - (-10y 18 + 31y 17 - 30y 16 ) = 635589254740
Tỉ số các số y k+1 /y k lập thành dãy :
10 ; 6.9 ; 5.942 ; 5.5146 ; 5.2941 ; 5.172 ; 5.1018 ; 5.0607 ; 5.0363 ; 5.0218 ; 5.013 ; 5.0078 ; 5.0047 ; 5.0028 ; 5.0017 ; 5.001
nghĩa là chúng sẽ hội tụ tới nghiệm lớn nhất là 5 của đa thức
Trang 23Kết quả nghiệm của đa thức x 3 - 10x 2 + 31x - 30 là:5 ; 3 và 2
§8 PHƯƠNG PHÁP LẶP BIRGE - VIETTE
Các nghiệm thực, đơn giản của một đa thức P n (x) được tính toán khi sử dụng phương pháp Newton
)x(P
)x(Pxx
i n
i n i 1
Để bắt đầu tính toán cần chọn một giá trị ban đầu x o Chúng ta có thể chọn một giá trị x o nào đó, ví
dụ :
1 n
n 0
a
ax
)x(Px
x
0 n
0 n 0
1
)x(P
)x(Px
x
1 n
1 n 1
x
(
Pn i n1 n1
Trang 24một giá trị x o mới hay chọn chính x o = 1 Khi bậc của đa thức giảm xuống còn bằng 2 ta dùng các công thức tìm nghiệm của tam thức để tìm các nghiệm còn lại
Ví dụ: Tìm nghiệm của đa thức P3 (x) = x 3 - x 2 -16x + 24
375.15.3)x(P
)x(Px
x
0 n
0 n 0
096.06.3)x(P
)x(Px
x
1 n
1 n 1
Trang 25p[k]=p[k-1]*x0+a[k];
d[k]=d[k-1]*x0+p[k-1];
} x1=x0-p[n]/d[n];
e2=fabs(x1-x0);
if (e2>e1) x0=x1;
Trang 26Ngoài ra các hệ số b i phụ thuộc vào s và p và bây giờ chúng ta cần phải tìm các giá trị đặc biệt s * và
p * để cho b n-1 và b n triệt tiêu Khi đó r 1 (x)= 0 và nghiệm của tam thức x 2 - s * x + p * x sẽ là nghiệm của đa thức
s
(
g
0)p
Trang 27f)
gss
g
)p,s(pp
fss
f
i i
i i
Theo công thức Cramer ta có :
gfs
fgp
s
gp
fp
gs
Các đạo hàm này được
tính theo công thức truy hồi
Do b o = a o nên
0s
b0
0p
)sb(s
as
a2
1 1
s
)b(ss
)sb
bsbs
Trang 28n 3
n 2
s
fc
s
fc
s
fc
3 n n 2 n 1 n
cc
c
cbc
bs
2 n n 1 n 1 n
cc
c
cbc
bp
- Chọn các giá trị ban đầu bất kì s0 và p0
- Tính các giá trị bo, ,bn theo (1)
- Tính các giá trị co, ,cn theo (2)
- Tính so và po theo (3) và (4)
- Tính s1 = s0 + so và p1 = po+ po
- Lặp lại bước 1 cho đến khi pi+1 = pi = p và si+1 = si = s
- Giải phương trình x2 - sx + p để tìm 2 nghiệm của đa thức
- Bắt đầu quá trình trên cho đa thức Pn-2(x)
Ví dụ: Tìm nghiệm của đa thức P4 (x) = x 4 - 1.1x 3 + 2.3x 2 + 0.5x 2 + 3.3
Với lần lặp ban đầu ta chọn s = -1 và p =1, nghĩa là tam thức có dạng: x 2 +x+1
1.35
.5
5.57.0
1.38
.0
Trang 29.403.1
88.251
.4
5.57.0
88.207.0
88.251
.4
17.003.1
07.051.4
Trang 30b[n-1]=b[n]*p+a[n-1];
c[n-1]=b[n-1]+b[n]*p;
for (i=n-2;i>=0;i ) {
b[i]=b[i+2]*q+b[i+1]*p+a[i];
c[i]=c[i+2]*q+c[i+1]*p+b[i];
} r=c[2]*c[2]-c[1]*c[3];
p1=p-(b[1]*c[2]-b[0]*c[3])/r;
q1=q-(b[0]*c[2]-b[1]*c[1])/r;
if ((fabs(b[0])<e1)&&(fabs(b[1])<e1)) goto tt;
v=v+1;
p=p1;
q=q1;
} while (v<=40);
if(v>40) {
printf("Khong hoi tu sau 40 lan lap");
getch();
exit(1);
} tt:s=p1/2;
t=p1*p1+4*q1;
if(t<0) {
Trang 31printf("\n");
} for (i=2;i<=n;i++) a[i-2]=b[i];
§11 HỆ PHƯƠNG TRÌNH PHI TUYẾN
Phương pháp Newton có thể được tổng quát hoá để giải hệ phương trình phi tuyến dạng :
(
f
0)x, ,x,x,x
(
f
0)x, ,x,x,x
(
f
0)x, ,x,x,x
(
f
n 3
2 1 n
n 3 2 1 3
n 3 2 1 2
n 3
2 1 1
Trang 32x
fx
fx
fx
f
x
fx
fx
fx
f
x
fx
fx
fx
Dưới đây là chương trình giải hệ phương trình phi tuyến
x
2
04x8x25
05xxxx
08xxx3xx
4 3 2 1
3
2 1
4 3 2 1
4 2 1
2 2
x2x
x2x
x2
08
0x
25
1
xx30
xx3x3x
x3x
3
2 1 3
1 3
2
2 1 1
2 1 4
1
2 2 4
Trang 33s=0 ; for (i=k;i<=n;i++) {
t=fabs(a[i][k]);
if (s<=t) {
s=t;
l=i;
} }
for (j=k;j<=n+1;j++) {
printf("Cac phan tu duong cheo cua ma tran bang khong");
getch();
exit(1);
} else {
if (fabs(a[k][k]/a[1][1])<(1e-08)) {
printf("Ma tran suy bien");
goto mot;
} }
for (i=k+1;i<=n;i++) {
if (a[k][k]==0) {
printf("Cac phan tu duong cheo cua ma tran bang khong\n"); goto mot;
Trang 34a[i][j]=a[i][j]-s*a[k][j];
} y[n]=a[n][n+1]/a[n][n];
for (i=n-1;i>=1;i ) {
s=a[i][n+1];
for (j=i+1;j<=n;j++) s=s-a[i][j]*y[j];
if (a[i][i]==0) {
printf("Cac phan tu duong cheo cua ma tran bang khong\n"); goto mot;
} y[i]=s/a[i][i];
} }
if (r!=1) for (i=1;i<=n;i++)
{
if (fabs(y[i])<e*fabs(x[i]))
goto ba;
} for (i=1;i<=n;i++) x[i]=x[i]-y[i];
Trang 3634 33 32 31
24 23 22 21
14 13 12 11
aaaa
aaaa
aaaa
aaaa
34 33 32 31
24 23 22 21
14 13 12
aaaa
aaaa
aaaa
aaa1
Lấy hàng 2 trừ đi hàng 1 đã nhân với a21, lấy hàng 3 trừ đi hàng 1 đã nhân với a31 và lấy hàng 4 trừ đi hàng 1 đã nhân với a41 (thay hàng bằng tổ hợp tuyến tính của các hàng còn lại) thì định thức vẫn là D/p1 và ma trận là:
34 33 32
24 23 22
14 13 12
aaa
0
aaa
0
aaa
0
aaa1
Lấy giá trị trụ là p2 a22.Ta chia các phần tử của hàng thứ hai cho p2 thì định thức sẽ là D/(p1p2) và ma trận còn lại là:
34 33 32
24 23
14 13 12
aaa
0
aaa
0
aa10
aaa1
Lấy hàng 1 trừ đi hàng 2 đã nhân vớia12, lấy hàng 3 trừ đi hàng 2 đã nhân
với a32và lấy hàng 4 trừ đi hàng 2 đã nhân với a42 thì thì định thức vẫn là
Trang 3734 33
24 23
14 13
aa00
aa00
aa10
aa01
Tiếp tục lấy hàng 3 rồi hàng 4 làm trụ thì ma trận sẽ là:
0
010
0
001
0
000
Trang 38printf("Dong %d:\n",i);
for (j=1;j<=n;j++) {
printf("a[%d][%d] = ",i,j);
scanf("%f",&a[i][j]);
} printf("\n");
printf("Cho chi so hang can sua : ");
}
printf("Ma tran a ban dau\n");
printf("\n");
for (i=1;i<=n;i++)
Trang 39{
for (j=1;j<=n;j++) printf("%.5f\t",a[i][j]);
{ c=a[i][j];
a[i][j]=a[k][j];
a[k][j]=c;
} d=-d;
ok1=0;
} else
k=k+1;
if (k>n) {
if (a[i][i]!=0) {
Trang 40c=a[i][i];
for (j=i+1;j<=n;j++) a[i][j]=a[i][j]/c;
for (k=i+1;k<=n;k++)
{ c=a[k][i];
for (j=i+1;j<=n;j++)
a[k][j]=a[k][j]-a[i][j]*c;
} }
0100
0010
0001
E
Phương pháp loại trừ để nhận được ma trận nghịch đảo A-1 được thực hiện qua nhiều giai đoạn (n), mỗi một giai đoạn gồm hai bước Đối với giai đoạn thứ k:
- chuẩn hoá phần tử akk bằng cách nhân hàng với nghịch đảo của nó
- làm cho bằng không các phần tử phía trên và phía dưới đường chéo
cho đến cột thứ k Khi k = n thì A(k) sẽ trở thành ma trận đơn vị và E trở thành A-1
Ví dụ: Tính ma trận nghịch đảo của ma trận