Giải hệ phương trình n ẩn n phương trình

street

Thành viên mới
Tham gia ngày
1 Tháng sáu 2008
Bài viết
32
Được thích
81
Điểm
675
Chương trình này mình viết bằng ngôn ngữ Visual Basic dùng trong Excel. File này có thể giải hệ phương trình n ẩn n phương trình. File này viết dựa trên thuật toán giải hệ phương trình của Gauss đã được học hồi cấp 3. File này mình viết code để có thể giải hệ phương trình tối đa là 100 phương trình 100 ẩn. Nếu các bạn muốn giải hệ phương trình nhiều hơn 100 phương trình thì chỉ cần chỉnh lại code là được.
Nhấn vào file.
Ví dụ giải hệ 3 phương trình 3 ẩn:
2x + 4y + 6z = 22
4x + 4y + 2z = -10
-x + 4y - 5z = -15
Nghiệm sẽ là x=-6, y=1, z=5 như các bạn thấy trong hình:



Gọi ô A1 là cells(1,1), ô C2 là cells(2,3), ...
Đây là hệ 3 phương trình 3 ẩn nên viết số 3 ở cells(1,1)
Các hệ số của hệ phương trình lần lượt bắt đầu viết từ cells(2,2)
Các bạn đảo thứ tự các phương trình sao cho các cells(i,i) khác 0
(cells(i,i) là cells(2,2), cells(3,3),...)
Tiếp theo làm như sau:
Nhấn chuột phải vào thanh menu rồi nhấn vào "Visual Basic" như hình vẽ:



Khi đó sẽ hiện ra:



Nhấn vào "Visual Basic Editor" nằm ở vòng tròn đỏ nhỏ trong hình trên
Sẽ hiện ra 1 cửa sổ như hình vẽ:



Nhấn vào nút trong hình tròn màu đỏ như hình trên (hoặc nhấn nút F5). Sẽ xuất hiện:



Nhấn vào nút "Tinh toan", thì nghiệm x, y, z sẽ lần lượt là các ô trong cột cuối cùng như hình vẽ:



Khi giải hệ 5 phương trình 5 ẩn thì kết quả là:

 

File đính kèm

vucuong51

Thành viên mới
Tham gia ngày
1 Tháng mười một 2008
Bài viết
37
Được thích
29
Điểm
665
Nơi ở
Hà Nội
Tôi thích bài viết của Bạn Street. 100 ẩn cũng đã lắm rồi, tuy nhiên nếu bạn nêu nguyên tắc chỉnh code như thế nào (trong trường hợp n>100) thì tốt quá (vì mình mới học mà). Xin cảm ơn
 
Lần chỉnh sửa cuối:

Po_Pikachu

Po_pikachu@ymail.com
Tham gia ngày
29 Tháng tư 2008
Bài viết
2,209
Được thích
3,567
Điểm
0
Nơi ở
#VALUE!
Xin lỗi tác giả trước!
Mình xin mạng phép sữa lại như sau để giải phương trình bậc cao hơn 100. Nhưng thật sự không dám chắc là giải được. Vì đọc sơ qua code thì chẳng hiểu là giải như thế nào cả?
Đây là file đã sữa.
Thân.
 

File đính kèm

le tin

Học mãi
Tham gia ngày
22 Tháng mười 2007
Bài viết
724
Được thích
558
Điểm
860
Xin hỏi bạn , nghiệm số và hệ số cần phải chính xác (dạng phân số) ,trường hợp đó bài toán giải quyết được khộng .Vấn đề nữa là , số ở cell(1,1) không nhập mà tự tính luôn bằng cách đếm dòng được chứ .
 
Lần chỉnh sửa cuối:

Po_Pikachu

Po_pikachu@ymail.com
Tham gia ngày
29 Tháng tư 2008
Bài viết
2,209
Được thích
3,567
Điểm
0
Nơi ở
#VALUE!
Vế vấn đề phân số thì bạn tham khảo thêm ở đây.
Còn ở Cell(1,1) thì muốn tự tính luôn cũng được. Bạn xem lại file này nha!
Thân.
 

File đính kèm

street

Thành viên mới
Tham gia ngày
1 Tháng sáu 2008
Bài viết
32
Được thích
81
Điểm
675
Trong code, nếu bạn thay Dim c(100, 101) bằng Dim c(252, 253) thì sẽ giải được hệ phương trình 252 ẩn, 252 phương trình
 

Po_Pikachu

Po_pikachu@ymail.com
Tham gia ngày
29 Tháng tư 2008
Bài viết
2,209
Được thích
3,567
Điểm
0
Nơi ở
#VALUE!
Vậy bác nên mở code của em ra xem thêm nha!
Viết như vầy nè... Nó sẽ mang tính tổng quát luôn. Phụ thuộc vào hằng số n nếu nhiều thì nó tự sẽ nhiều, nếu ít thì nó sẽ tự vừa khít. Không dư không thiếu mà còn tiết kiệm được dung lượng ổ nhớ. Tránh việc dư thừa không đáng.
PHP:
c(n + 1, n + 2)
Thân.
 

street

Thành viên mới
Tham gia ngày
1 Tháng sáu 2008
Bài viết
32
Được thích
81
Điểm
675
Mình cũng đã từng viết dim c(n,n+1) nhưng không biết sao không được. Hình như phải là 1 số cụ thể thì mới được
 

Po_Pikachu

Po_pikachu@ymail.com
Tham gia ngày
29 Tháng tư 2008
Bài viết
2,209
Được thích
3,567
Điểm
0
Nơi ở
#VALUE!
À, thì ra là thầy quên dùng lệnh Redim nên không thể thêm biến động vào được.
Thầy mở file này ra xem code là hiểu ngay.
Thân.
 

street

Thành viên mới
Tham gia ngày
1 Tháng sáu 2008
Bài viết
32
Được thích
81
Điểm
675
File sau trong code dùng lệnh MMult nên các bạn có thể nhập số 0 vào cells(i,i) cũng được. Phía dưới chữ "Nghich dao" là ma trận nghịch đảo của ma trận các hệ số của các biến:

 

File đính kèm

trungnt

Thành viên hoạt động
Tham gia ngày
2 Tháng hai 2007
Bài viết
135
Được thích
87
Điểm
680
Tuổi
44
Tôi có tải về đoạn code giải hệ phương trình của hai a Po_Pikachu và Street. Tuy đã cố gắng đọc đi đọc lại để hiểu đoạn code nhưng vẫn không hiểu được cách gán giá trị như thế nào theo cách giải bài toán hệ pt của Gauss. Rất mong các anh giải thích thêm đoạn code của mình.........cảm ơn các anh nhìu nhìu. Tôi chép lại đoạn code sau của các a mà đến nay tôi vẫn chưa hiểu ra:
For i = 2 To n + 1
s = c(i, i)
For j = 2 To n + 2
c(i, j) = c(i, j) / s
Next j
For j = 2 To n + 1
If j <> i Then
a = c(j, i)
For k = 2 To n + 2
c(j, k) = c(j, k) - a * c(i, k)
Next k
End If
Next j
Next i
For i = 2 To n + 1
Cells(i, n + 3) = " x" & i - 1
Cells(i, n + 4) = PhanSo(Val(c(i, n + 2)))
'Cells(i, n + 4) = c(i, n + 2)
Next i
 

xuanhoa7604

Thành viên hoạt động
Tham gia ngày
9 Tháng sáu 2008
Bài viết
169
Được thích
79
Điểm
0
Nơi ở
Điện Biên
Mình muốn giải hệ phương trình nhiều ẩn nhưng kết quả ra chính xác (nghiệm ở dạng phân số chứ không phải là mấy phẩy) thì làm thế nào vậy bạn?
 
Lần chỉnh sửa cuối:

daicatxtn

Thành viên mới
Tham gia ngày
3 Tháng chín 2009
Bài viết
1
Được thích
0
Điểm
0
Tuổi
40
sao bấm zo phần visual basic rồi bấm f5 nó hện lên cái bảng " the marcos in this project are disabled. please refer to the online help or documentation of the host application to determine how to enalble marcos "
rồi bấm ok nó hiện ra 1 cái bảng nữa là sao
 

hoangcam02

Thành viên mới
Tham gia ngày
31 Tháng tám 2009
Bài viết
1
Được thích
0
Điểm
0
Tuổi
35
Chương trình này mình viết bằng ngôn ngữ Visual Basic dùng trong Excel. File này có thể giải hệ phương trình n ẩn n phương trình. File này viết dựa trên thuật toán giải hệ phương trình của Gauss đã được học hồi cấp 3. File này mình viết code để có thể giải hệ phương trình tối đa là 100 phương trình 100 ẩn. Nếu các bạn muốn giải hệ phương trình nhiều hơn 100 phương trình thì chỉ cần chỉnh lại code là được.
Nhấn vào file.
Ví dụ giải hệ 3 phương trình 3 ẩn:
2x + 4y + 6z = 22
4x + 4y + 2z = -10
-x + 4y - 5z = -15
Nghiệm sẽ là x=-6, y=1, z=5 như các bạn thấy trong hình:



Gọi ô A1 là cells(1,1), ô C2 là cells(2,3), ...
Đây là hệ 3 phương trình 3 ẩn nên viết số 3 ở cells(1,1)
Các hệ số của hệ phương trình lần lượt bắt đầu viết từ cells(2,2)
Các bạn đảo thứ tự các phương trình sao cho các cells(i,i) khác 0
(cells(i,i) là cells(2,2), cells(3,3),...)
Tiếp theo làm như sau:
Nhấn chuột phải vào thanh menu rồi nhấn vào "Visual Basic" như hình vẽ:



Khi đó sẽ hiện ra:



Nhấn vào "Visual Basic Editor" nằm ở vòng tròn đỏ nhỏ trong hình trên
Sẽ hiện ra 1 cửa sổ như hình vẽ:



Nhấn vào nút trong hình tròn màu đỏ như hình trên (hoặc nhấn nút F5). Sẽ xuất hiện:



Nhấn vào nút "Tinh toan", thì nghiệm x, y, z sẽ lần lượt là các ô trong cột cuối cùng như hình vẽ:



Khi giải hệ 5 phương trình 5 ẩn thì kết quả là:
Các bạn thăm gia ý kiến đây nhé
 
Lần chỉnh sửa cuối:

trungnt

Thành viên hoạt động
Tham gia ngày
2 Tháng hai 2007
Bài viết
135
Được thích
87
Điểm
680
Tuổi
44
Tôi cố gắng đợi 2 a Po_Pikachu và Street giải thích nhưng o đủ kiên nhẫn chờ, đành đánh liều học lại Pascal may qúa trong lúc bí thủ lại bắt gặp tia sáng ở cuối đường hầm thì tôi mới hiểu đoạn code nói trên.
 

cua

Thành viên mới
Tham gia ngày
6 Tháng hai 2007
Bài viết
3
Được thích
0
Điểm
663
Hay lắm! Nhưng càn vấn đề khống chế giá trị x, y, z
 

khương minh phương

Thành viên mới
Tham gia ngày
20 Tháng ba 2010
Bài viết
1
Được thích
0
Điểm
0
Sao em ấn f5 rùi mà lại hiện lên dòng này " the marcos in this project are disabled. please refer to the online help or documentation of the host application to determine how to enalble marcos " ???????
 

thaycung

Thành viên hoạt động
Tham gia ngày
27 Tháng một 2008
Bài viết
100
Được thích
87
Điểm
680
Ví dụ giải hệ 3 phương trình 3 ẩn:
2x + 4y + 6z = 22
4x + 4y + 2z = -10
-x + 4y - 5z = -15
Nghiệm sẽ là x=-6, y=1, z=5 như các bạn thấy trong hình:
Tôi giải bằng các hàm có sẵn trong Excel (đối với trường hợp n phương trình với n ẩn cũng làm tương tự), mọi người tham khảo.
 

File đính kèm

Lần chỉnh sửa cuối:

hoailinh1112

Thành viên mới
Tham gia ngày
17 Tháng tư 2011
Bài viết
1
Được thích
0
Điểm
0
Tuổi
30
ban oi...minh dung word 2007 sao k co phan visual basic nhu cua ban...co can cai chuong trjnh visual basic luon ko
 

pexcel

Thành viên mới
Tham gia ngày
29 Tháng mười 2011
Bài viết
2
Được thích
0
Điểm
363
Chào bạn street,
Mình dùng hàm =MMULT và =MINVERSE để giải hệ 90 pt (90 ẩn) thì thấy báo lỗi, lệnh "MMULT" trong code VBA bạn đã viết có đáp ứng được ko ạ ?
Mình đang cần giải một hpt với ma trận 90x90 (90 ẩn), lại bập bẹ VBA, nên rất quan tâm.
Cám ơn bạn.
 
Top Bottom