Cod VBA giải hệ phương trình n nghiệm bị lỗi

Liên hệ QC

tuan.chemi

Thành viên mới
Tham gia
4/1/13
Bài viết
39
Được thích
1
Em chào quý anh chị, hiện tại em có tải một file giải hệ phương trình n ẩn về, nhưng khi sử dụng bị lỗi overflow. em không hiểu về VBA nên nhờ anh chị giúp. em có gửi theo hình, cám ơn anh chị
 

File đính kèm

  • Untitled.png
    Untitled.png
    105 KB · Đọc: 26
Em chào quý anh chị, hiện tại em có tải một file giải hệ phương trình n ẩn về, nhưng khi sử dụng bị lỗi overflow. em không hiểu về VBA nên nhờ anh chị giúp. em có gửi theo hình, cám ơn anh chị
Bạn nên đưa dữ liệu của mình và giải thích cụ thể nhé.Và cho cái đáp án nhé.
 
Dòng vàng
Mã:
c(i, j) = c(i, j) / s

1. Nếu c(i, j) <> 0, s = 0 thì có lỗi "chia cho 0" (dạng a / 0)
2. Nếu c(i, j) = 0, s = 0 thì có lỗi overflow (dạng 0 / 0)
----------
Nhìn
Mã:
For i = 2 to n + 1
    for j = 2 to n + 2
        c(i, j) = Cells(i, j)     
    Next j
Next i
Thì thấy với i = j có c(i, i) = Cells(i, i)

Tức vd. với i = 7, j = 7 có c(7, 7) = Cells(7, 7) = G7 = 0
Nhìn
Mã:
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
...
Next i

Ta thấy với i = 7, j = 7 thì:
- s = c(7, 7) = 0
- c(i, j) = c(7, 7) = 0

Vậy sẽ có lỗi tại dòng
Mã:
c(i, j) = c(i, j) / s

Tức c(7, 7) = c(7, 7) / s = 0 / 0
---------
0. Thực ra lỗi sảy ra ngay khi j = 2 chứ chưa đợi tới j = 7.
Với i = 7, j = 2 có
- s = c(7, 7) = 0
- c(i, j) = c(7, 2) = B7 = 0.

Tức đã có dạng 0 / 0
Với i = 7:
- Khi j = 2, 3, 7 -> lỗi overflow
- Khi j = 4, 5, 6 -> lỗi "chia cho 0"

1. Tất nhiên c(8, 8), c(9, 9), ... có thể cũng = 0 nhưng nhìn ảnh bị che chịu không dám phán.
2. Cũng chả hiểu tại sao c() là ma trận không vuông.
3. Nên nhớ GPE không là diễn đàn dành cho những người đam mê chụp ảnh.
 
Lần chỉnh sửa cuối:
Lỗi ngay tại i = 2, j = 2 luôn đó anh.
s = c(i, i) = c(2, 2) = B2 = 0
B2 là ô đang được chọn (dòng 2 ẩn) và thanh công thức không có gì cả.
Nhìn ảnh mà lại nhìn lướt qua nên tôi nghĩ là B2 = 99,5. :D

tuan.chemi: Tóm lại lỗi chia cho 0 khi c(i, i) = 0 và c(i, j) <> 0. Lỗi overflow khi c(i, i) = 0 và c(i, j) = 0
 
Rốt cuộc lại thì mấy bác có hiểu thuật toán bài này không? Sao tôi nhìn thấy ghê quá.

Mình nhớ là ngoài ba nguyên tắc chung về hoán vị, cộng trừ, và nhân dòng/cột thì để giải hệ thống phương trình còn cần một thuật toán tối ưu số liệu, nếu không chia một hồi sẽ bị sai số lệch hết.
(chương trình toán ĐH dạy bài này 2-3 tiết mới xong)
 
Web KT

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

Back
Top Bottom