Đến nội dung

Hình ảnh

Sai số máy tính

- - - - - matlab

  • Please log in to reply
Chủ đề này có 2 trả lời

#1
ssupermeo

ssupermeo

    Binh nhì

  • Thành viên
  • 13 Bài viết

cho biết lệnh sau thực hiện việc gì? vòng while lặp bao nhiêu lần.

x=1; while x+1>1 , y = x; x = x/2; end, y

 

câu hỏi tương tự với lệnh sau:

x=1; while x+x>x , y = x; x = x/2; end, y

 

Tôi thực hiện 2 lệnh trên, trên matlab thì được 2 số y có giá trị lần lượt: 2.2204e-16 và 4.9407e-324

Nhưng không hiểu tại sao lại thu được hai số khác nhau như vậy.


Bài viết đã được chỉnh sửa nội dung bởi ssupermeo: 24-09-2015 - 07:49


#2
Mai Thanh Binh

Mai Thanh Binh

    Binh nhì

  • Thành viên
  • 13 Bài viết

Do phép làm tròn trong công cụ mathlab đó. Để đảm bảo thời gian tính toán và đảm bảo trong việc lưu trữ nó thường làm tròn  (có lẽ là chặt cụt). 
Nó làm trò kĩ hơn ở số 0. vì mathlab là phần miền nghiên cứu, chạy những thuật toán khủng và kiểm tra sai số ở hàng 3,4 chữ số  thập phân nên nó thường so sánh chặt chẽ khi  $x$ tiến về 0, Nếu bài 1 bạn cho điều kiên $x>0$  thì đáp số chắc gần với bài 2 hoặc là nhỏ hơn nữa :v.
 



#3
nuoccam

nuoccam

    Thượng sĩ

  • Thành viên
  • 200 Bài viết

Những câu lệnh trong công cụ mathlab tuy rất bình thường nhưng khi xử lí nó lại rất cồng kềnh, mình đồng ý với bạn Mai Thanh Binh, đơn giản là dùng nguyên lí "chặt cụt", tuy vậy nó lại làm đc cả những thuật toán cao cho nên việc sai số cx là chuyện thông thường bạn ạ.

Bạn cũng có thể dùng x:0:0 hoặc x:m:n thay cho số e ở kết quả

==> như thế dễ nhìn hơn  :)


Bài viết đã được chỉnh sửa nội dung bởi nuoccam: 22-12-2015 - 21:21






Được gắn nhãn với một hoặc nhiều trong số những từ khóa sau: matlab

1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh