PDA

View Full Version : Hoi ve phuong phap tinh



minh_tv
06-09-2004, 05:09
Toi dang thuc hien mot chuong trinh trong do co su dung thuat toan khu Gauss cho ma tran. Tuy nhien cac phan tu cua ma tran duoc bieu dien bang so thuc dau cham dong (kieu double) nen xuat hien sai so trong qua trinh tinh toan

Vi du: khi thuc hien phep gan
A[i,j] = A[i,j] -A[i,l]*A[k,j]/A[k,l];
Neu A[i,j]=2, A[i,l] =8/3; A[k,j] = 3/5; A[k,l] = 4/5 (gia tri ly thuyet neu tinh toan bang tay) thi ket qua nhan duoc phai la A[i,j]=0
Nhung do sai so tinh toan trong cac vong lap nen cac gia tri cua A khong chinh xac nhu o tren dan den la gia tri cua A[i,j] khong bang 0

Vay co cach ao de giam hoac loai tru cac sai so nay?

Mach2
06-09-2004, 05:39
chính xác để làm gì? Bạn muốn chính xác đến mức nào?
Numerical đương nhiên sẽ có sai số, thế bạn biểu diễn 8/3 thì sai số là bao nhiêu?
Nếu ko muốn sai số, chế ra symbolic và phép tính trên đó mà làm. Double precision chỉ bảo đảm đến 1e-16 trong khi single precision chỉ đến 1e-8. Bạn làm gì cũng ko thể vượt quá giới hạn đó nếu chỉ dùng các loại dữ liệu thông thường.
Theo tôi, "chính xác" chả để làm gì cả!

bete
06-09-2004, 14:14
Tui đồng ý với mach2: nếu sai số nhỏ đến mức bạn bỏ qua được thì đừng bận tâm.
Nếu hệ số ban đầu của bạn chỉ là số nguyên (không là số thực) => bạn có thể thử đặt thêm kiểu phân số (bạn phải cài đặt các toán tử +, -, *, /) (cũng không khó lắm)

-thân

minh_tv
13-09-2004, 02:11
Tat nhien la do chinh xac cua so thuc dau phai dong la co gioi han. Tuy nhien y toi muon hoi la thuc hien cac phep tinh theo trinh tu nao de giam duoc sai so
Vi du neu nhu toi su cung cong thuc A[i,j] = A[i,j] -A[i,l]*A[k,j]/A[k,l]; (nhan truoc khi chia) thi se ra ket qua dung voi truong hop A nhung sai voi truong hop B.
Con neu nhu toi su dung A[i,j] = A[i,j] -A[i,l]/A[k,l]*A[k,j]; (chia truoc khi nhan) thi se lai dung voi truong hop B va sai voi truong hop A.

Vay co cach nao de phep tinh cho ra ket qua dung trong tat ca cac truong hop?

Mach2
13-09-2004, 07:01
2 trường hợp của bạn chỉ "đúng" hay "sai" nếu làm bằng tay và tính theo lý thuyết.
Nếu đưa vào máy thì như nhau cả, vì đằng nào bạn cũng phải lưu 8/3 -> xuất hiện sai số epsilon.