Giải hệ phương trình n ẩn n phương trình (1 người xem)

  • Thread starter Thread starter street
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

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

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

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

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

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

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.
 
Chào thầy,
Tôi dùng hàm MMULT và MINVERSE, chỉ giải được phương trình tầm 20 ẩn. Hiện nay tôi đang cần giải pt tới 90 ẩn (Ma trận90x90) nên có thử như cách của thầy đang dùng đây ạ, nhưng kết quả lại là báo lỗi.
 
cho em hỏi là muốn tăng sô ẩn lên (không phải là 3) thì làm như nào ạ?
 
mình đang học về LP (linearing program)..Không biết anh em nào có tài liệu cho mình xin ạ

Thanks các bạn
 
mình đang học về LP (linearing program)..Không biết anh em nào có tài liệu cho mình xin ạ

Thanks các bạn

Linear Programming là một môn trong ngành toán Quy Hoạch (Operation Research).
Hệ phương trình n ẩn số là Systems of Linear Equations. Trong ngành toán, một trong những phươngg pháp giải hệ là Gaussion Elimination.
Dùng tiếng Anh như thế này thì làm sao tìm nổi tài liệu. Từ 'cám ơn' khó gõ lắm sao mà phải bày đặt thanh với thiếc.
 
chào thầy, thầy cho em hỏi nếu em giải phương trình mà có chứa căn ở hệ số, giải phương trình ra kết quả là số thập phân,
vậy làm thế nào để kết quả ra số căn được vậy ạ !
 
mình đang là sinh viên. Theo mình biết thì không có cách chuyển thập phân sang căn. pexcel: mình thấy file ở bài số 10 trong mục này giải được khi cells(i,i)=0
 
chào anh. cho em hỏi là gio muốn giải phương trình 9 ẩn từ file của anh thi phải làm sao vậy.
 
Sao mình kích chuột phải vào thanh menu no hiện ra hình như này các bạn. Nhờ chỉ giúp vì mình mới làm quen với tin học thôi. Thanks
upload_2017-10-24_14-10-14.pngupload_2017-10-24_14-9-42.png upload_2017-10-24_14-10-14.png
 
xin cho em hỏi em giải phương trình 10 ẩn nhưng báo lỗi overflow là sao ạ
 
bác nào có giải pháp giải hệ 3 phương trình 2 ẩn không
round(x,0) = a => làm tròn x đến phần nguyên
round(y,0) = b => làm tròn y đến phần nguyên
x + y = c

a, b, c là số đã biết trước

ví dụ:
round(x,0) = 75 => x nhận giá trị từ 74.5 đến 75.4
round(y,0) = 4 => y nhận giá trị từ 3.5 đến 4.4
x + y = 78.8

bác nào có giải pháp cho hệ phương trìn kiểu này không?
 
bác nào có giải pháp giải hệ 3 phương trình 2 ẩn không
round(x,0) = a => làm tròn x đến phần nguyên
round(y,0) = b => làm tròn y đến phần nguyên
x + y = c

a, b, c là số đã biết trước

ví dụ:
round(x,0) = 75 => x nhận giá trị từ 74.5 đến 75.4
round(y,0) = 4 => y nhận giá trị từ 3.5 đến 4.4
x + y = 78.8

bác nào có giải pháp cho hệ phương trìn kiểu này không?
Có nhưng mở thớt khác mà hỏi. Ở đây là hệ phương trình n.
Phương trình 2 ẩn giải dễ hơn nhiều.
 

Bài viết mới nhất

Back
Top Bottom