Thư Sinh Áo Trắng
Thành viên hoạt động
- Tham gia
- 26/3/21
- Bài viết
- 160
- Được thích
- 31
Với vòng lặp lớn tốc độ rất chậm, vấn đề quan trong hơn là không khống chế được sai số ví dụ sai số cho phép là 10^-8 thì tới lúc nào thỏa và dừng code?Theo tôi, là For lặp ít quá. Tôi cho
For k = 1 To 999999999 Step 2
và in k sau khi vòng For thì k=740457257
và KQ khác nhau không quá 10^-7
Các hàm triển khai Taylor là công thức gần đúng nên có sai số, nhiều khi khá lớn. Ví dụ
View attachment 260450
Đó là lý do có tới 3 công thức, dùng công thức nào phải hiểu nguồn gốc của nó
Nguồn gốc thì dễ hiểu thôi. Cái lỗi là phải tính sai số theo công thức chứ không phải theo một số hạng nào đó của khai triển. Cái lỗi này không chỉ ở bài #14 mà còn ở bài #12.Theo tôi, là For lặp ít quá. Tôi cho
For k = 1 To 999999999 Step 2
và in k sau khi vòng For thì k=740457257
và KQ khác nhau không quá 10^-7
Khi dùng dãy số rời rạc tính một hàm nào đó thường kèm theo công thức xác định sai số, dãy rời rạc khác nhau sẽ có công thức tính sai số khác nhau và công thức nầy phải tính được, chưa hình dung nguồn gốc và cách tính Sai số R(n) = f(n)(c)*(x-x0)^n/n! như thế nàoNguồn gốc thì dễ hiểu thôi. Cái lỗi là phải tính sai số theo công thức chứ không phải theo một số hạng nào đó của khai triển. Cái lỗi này không chỉ ở bài #14 mà còn ở bài #12.
Công thức dùng trong bài đúng với mọi x > 0. Vấn đề nằm ở chỗ tính bao nhiêu số hạng thì dừng. Lỗi code là không tính sai số theo công thức mà lại dùng số hạng n làm sai số.
Thực ra sai số được tính theo công thức, và chỉ ngừng tính khi sai số nhỏ hơn cho phép. Không thể có số hạng nào đó nhỏ hơn sai số cho phép thì khẳng định rằng sai số được chứng minh bằng công thức cũng nhỏ hơn sai số cho phép.
Sai số R(n) = f(n)(c)*(x-x0)^n/n!
Trong đó f(n)(c) là giá trị đạo hàm bậc n tại điểm c, với c nằm trong khoảng [x0;x].
Nếu tính điểm dừng dựa vào công thức sai số thì điểm dừng sẽ nằm ở rất xa. Khi đó với k rất lớn như ở bài của bạn haog thì độ chính xác sẽ lớn.
Khi học về định lý, công thức, khai triển Taylor thầy và sách có đưa ra mà. Tất nhiên người ta phải chứng minh được thì mới đưa ra.Sai số R(n) = f(n)(c)*(x-x0)^n/n! như thế nào
Thực ra rỗi hơi thì làm tiêu khiển thôi. Nếu bạn muốn bạn có thể tự viết từ A đến Z rồi đưa lên cho những ai cần mà. Tôi không cần. Còn người khác có thể có người chưa chắc viết được code trên cơ sở vài từ chung chung của bạn. Muốn thì làm từ A đến Z rồi đưa lên thôi.Phương pháp nhị phân kiểm soát được sai số và số vòng lặp thấp hơn nhiều
Theo bạn nghĩ thì chính máy tính (và/hoặc các ứng dụng) làm cách nào để tính các hàm như Log, hàm lượng giác?Các hàm triển khai Taylor là công thức gần đúng nên có sai số, nhiều khi khá lớn. Ví dụ
View attachment 260450
Đó là lý do có tới 3 công thức, dùng công thức nào phải hiểu nguồn gốc của nó