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

Liên hệ QC

street

Thành viên mới
Tham gia
1/6/08
Bài viết
32
Được thích
81
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:

1392744960_aa7cfb8a5f_o.jpg


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ẽ:

1388909795_e8f141cc9b_o.jpg


Khi đó sẽ hiện ra:

1389805672_42da00fe41_o.jpg


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ẽ:

1389806598_b57c5f9974_o.jpg


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:

1388912329_424aa0b161_o.jpg


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ẽ:

1392744960_aa7cfb8a5f_o.jpg


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

1392745282_a2464a6bdb_o.jpg
 

File đính kèm

  • hpt.rar
    8.3 KB · Đọc: 4,602
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:
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

  • Giai_phuong_trinh_bac_n.xls
    26 KB · Đọc: 1,346
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:
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

  • Giai_phuong_trinh_bac_n.xls
    39.5 KB · Đọc: 793
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
 
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.
 
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
 
À, 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.
 
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:

15701499ir7.jpg
 

File đính kèm

  • He_phuong_trinh.xls
    29 KB · Đọc: 700
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
 
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:
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
 
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ẽ:

1388909795_e8f141cc9b_o.jpg


Khi đó sẽ hiện ra:

1389805672_42da00fe41_o.jpg


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ẽ:

1389806598_b57c5f9974_o.jpg


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:

1388912329_424aa0b161_o.jpg


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:
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.
 
Hay lắm! Nhưng càn vấn đề khống chế giá trị x, y, z
 
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 " ???????
 
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

  • Giai PT.xls
    25 KB · Đọc: 540
Lần chỉnh sửa cuối:
ban oi...minh dung word 2007 sao k co phan visual basic nhu cua ban...co can cai chuong trjnh visual basic luon ko
 
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.
 
Web KT
Back
Top Bottom