Giúp chuyển bảng dữ liệu (x>0) thành bảng dữ liệu mới sau khi Loga nê pe các phần tử!

Liên hệ QC MyVTV Add-ins

HieuCD

Chuyên gia GPE
Tham gia ngày
14 Tháng chín 2010
Bài viết
8,146
Được thích
16,686
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
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?
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
4,250
Được thích
6,767
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ó
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
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.

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.
 

haog

Thành viên mới
Tham gia ngày
14 Tháng chín 2017
Bài viết
46
Được thích
29
Giới tính
Nam
Vì ví dụ của HieuCD sai đến 8 đơn vị nên phải kiểm tra thuật toán. Vì dùng For nên chưa thỏa điều kiện số hạng tổng quát < số epxilon đã chọn (0.00.......0) đã lặp xong 1000 lần, nên tôi sửa để nó lặp thêm nhiều hơn. Thế thôi. CT chạy cũng nhanh lắm. Tất nhiên tôi phải thử thay 1000 bằng 10000, rồi 100000... đến khi in k thấy nó < cận cuối của For (là số sau To của For)

Còn đây không là chuỗi đan dấu, mà là chuỗi dương nên điều kiện kết thúc tính toán chính như Batman1 viết:
R(n) = f(n)(c)*(x-x0)^n/n!

Nhưng mà chúng ta đang xa rời chủ đề của mục này rồi. Cảm ơn mọi người.
 

HieuCD

Chuyên gia GPE
Tham gia ngày
14 Tháng chín 2010
Bài viết
8,146
Được thích
16,686
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.

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 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ào
Nếu chỉ án chừng For k = 1 To 999999999 Step 2 như bạn haog cũng không chuẩn vì còn lệ thuộc vào giá trị cần tính log, với con số khá lớn như trong thiên văn học mình e rằng sai số sẽ tăng nhiều
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, lũy thừa chỉ là phép nhân nhiều lần
 

anhtuanle123

Thành viên thường trực
Tham gia ngày
8 Tháng sáu 2009
Bài viết
315
Được thích
171
hùi rài hay đọc các bài viết về số e , mình thấy nó là 1 con số rất là khó , không hiểu cách người ta xây dựng công thức để tính toán với nó thế nào nhỉ , hoặc bản thân số e đã có 1 quy luật tính toán sẵn rồi , trước đi học cứ ráp công thức là xong , mặc dù mình ko giỏi toán lém @@
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
4,250
Được thích
6,767
Sai số R(n) = f(n)(c)*(x-x0)^n/n! như thế nào
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.

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
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.
--------------
Chẳng qua là thử viết code cho khai triển Taylor mà bác VetMini đưa ra ở bài #8 thôi. Tôi không bàn về các thuật toán có thể có. Càng không phán thuật toán nào tối ưu.
 
Lần chỉnh sửa cuối:

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
11,741
Được thích
14,865
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ó
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?

Trả lời luôn: máy tính dùng CORDIC (COordinate Rotation DIgital Computer), hoặc đa thức Cherbyshev, hoặc máy xưa thì dùng chuỗi Taylor.
 
Top Bottom