Hotline: 024.62511017

024.62511081

  Trang chủ   Sản phẩm   Phần mềm Dành cho nhà trường   Phần mềm Hỗ trợ học tập   Kho phần mềm   Liên hệ   Đăng nhập | Đăng ký

Tìm kiếm

School@net
 
Xem bài viết theo các chủ đề hiện có
  • Hoạt động của công ty (726 bài viết)
  • Hỗ trợ khách hàng (498 bài viết)
  • Thông tin tuyển dụng (57 bài viết)
  • Thông tin khuyến mại (80 bài viết)
  • Sản phẩm mới (216 bài viết)
  • Dành cho Giáo viên (549 bài viết)
  • Lập trình Scratch (3 bài viết)
  • Mô hình & Giải pháp (156 bài viết)
  • IQB và mô hình Ngân hàng đề kiểm tra (127 bài viết)
  • TKB và bài toán xếp Thời khóa biểu (242 bài viết)
  • Học tiếng Việt (183 bài viết)
  • Download - Archive- Update (289 bài viết)
  • Các Website hữu ích (70 bài viết)
  • Cùng học (92 bài viết)
  • Learning Math: Tin học hỗ trợ học Toán trong nhà trường (78 bài viết)
  • School@net 15 năm (154 bài viết)
  • Mỗi ngày một phần mềm (7 bài viết)
  • Dành cho cha mẹ học sinh (124 bài viết)
  • Khám phá phần mềm (122 bài viết)
  • GeoMath: Giải pháp hỗ trợ học dạy môn Toán trong trường phổ thông (36 bài viết)
  • Phần mềm cho em (13 bài viết)
  • ĐỐ VUI - THƯ GIÃN (363 bài viết)
  • Các vấn đề giáo dục (1210 bài viết)
  • Bài học trực tuyến (1037 bài viết)
  • Hoàng Sa - Trường Sa (17 bài viết)
  • Vui học đường (275 bài viết)
  • Tin học và Toán học (220 bài viết)
  • Truyện cổ tích - Truyện thiếu nhi (180 bài viết)
  • Việt Nam - 4000 năm lịch sử (97 bài viết)
  • Xem toàn bộ bài viết (8223 bài viết)
  •  
    Đăng nhập/Đăng ký
    Bí danh
    Mật khẩu
    Mã kiểm traMã kiểm tra
    Lặp lại mã kiểm tra
    Ghi nhớ
     
    Quên mật khẩu | Đăng ký mới
     
    Thành viên có mặt
    Khách: 10
    Thành viên: 0
    Tổng cộng: 10
     
    Số người truy cập
    Hiện đã có 89592133 lượt người đến thăm trang Web của chúng tôi.

    Khớp đường cong và thuật toán nội suy Spline

    Ngày gửi bài: 30/09/2008
    Số lượt đọc: 4989

    Thuật ngữ đường cong (curvefitting) hay điều chỉnh dữ liệu được dùng để mô tả bài toán tổng quát của việc tìm các hàm khớp với một tập các giá trị đang được quan sát ứng với một tập điểm.

    Cho các điểm:

    x1, x2,…, xN

    và các giá trị tương ứng

    y1, y2,…, yN

    Mục đích là tìm các hàm sao cho

    f(x1) = y1, f(x2)=y2, …, f(xN)=yN

    và sao cho f(x) được giả sử “hợp lý” ở những điểm dữ liệu khác. Có thể rằng một x và y được liên hệ bởi hàm f(x) ẩn danh nào đó và mục tiêu của ta là tìm ra hàm đó, nhưng định nghĩa của từ “hợp lý” phụ thuộc vào từng ứng dụng. Ta thấy rằng thường thì xác định hàm “không hợp lý” thì dễ hơn.

    Khớp đường cong có ứng dụng hiển nhiên trong sự phân tích các dữ liệu thuộc thí nghiệm và còn nhiều ứng dụng khác nữa…Ví dụ, nó có thể dùng trong đồ hoạ máy tính để sản sinh ra đường cong “coi được” mà không cần pảhi lưu một số lượng lớn các điểm vẽ. Một ứng dụng có liên hệ là dùng chỉnh đường cong để cho ra một thuật giải nhanh trong tính toán giá trị của hàm chưa biết ở một điểm bất kỳ: Giữ một bảng nhỏ chứa các giá trị chính xác, sự hiệu chỉnh đường cong sẽ suy ra các điểm khác.

    Bài viết này sẽ đề cập tới một trong các phương pháp cơ bản để tiếp cận bài toán này đó là phương pháp nội suy: tìm một hàm liên tục khớp với các giá trị đã cho.

    Các đa thức bậc thấp là những đường cong đơn giản được sử dụng rộng rãi trong nối đường cong. Thay vì dùng các đa thức khác nhau để nối các điểm kề nhau, nối các đoạn sao cho thật mịn. Một trường hợp đặc biệt liên hệ sự tính toán tương đối trực tiếp, phương pháp này còn gọi là nội suy spline.

    Spline là một thiết bị cơ học được người vẽ sơ đồ thiết kế dùng để vẽ các đường cong đẹp, có thẩm mỹ: chỉ cần xác định tập hợp các điểm (nút) rồi bẻ cong một giải plastic hay miếng gỗ linh hoạt (spline) quanh chúng và lấy vết chúng để tạo thành một đường cong. Nội suy spline thì tương đương về mặt toán học với tiến trình này và cho ra cùng một kết quả. Hình dưới minh hoạ một spline qua 10 điểm. 

     

    Có thể thấy rằng hình dạng của một đường cong tạo bởi spline giữa hai nút kề nhau là một đa thức bậc ba. Trở lại bài toán nối dữ liệu, điều này có nghĩa là ta nên xem đường cong là N-1 đa thức khác nhau có bậc ba.

    si(x) = aix3 + bix2+ cix + di i = 1, 2…N-1

    Với si(x) là đa thức bậc ba xác định giữa khoảng xi và xi+1. Spline có thể được biểu diễn trong một mảng bốn chiều (hay trong 4x(N-1) mảng hai chiều). Việc tạo một spline gồm việc tính các hệ số a, b,c, d từ các điểm x và các giá trị y đã cho. Việc bẻ cong một spline về mặt vật lý tương ứng với việc giải hệ phương trình với nghiệm là các hệ số. Ví dụ, Hiển nhiên ta phải có: si(xi) = yi và si+1(xi+1) = yi+1 với i = 1, 2, …, N-1 vì spline phải chạm vác nút. Không những nó phải chạm mặt toán học được này nghĩa là các đạo hàm bậc nhất của các đa thức spline phải bằng nhau ở mỗi nút (s’i-1(xi)= s’i(xi) với i=2, 3, …N-1). Thật sự thì các đạo hàm bậc hai của các đa thức cũng phải bằng nhau ở mỗi nút. Các điều kiện này cho ra 4N-6 phương trình với 4(N-1) hệ số là ẩn. Cần xác định thêm hai điều kiện nữa để mô tả tình trạng ở hai điểm cuối của spline. Có nhiều cách: dùng cái gọi là spline ‘tự nhiên’ được rút từ s”i(xi) = 0 và s”N-1(xN) = 0. Các điều kiện này cho ra một hệ đầy đủ 4N-4 phương trình với 4N- 4 ẩn số, hệ phương trình này giải được bằng phép khử Gauss với ẩn là các hệ số.

    Tuy nhiên, cũng cùng một spline nhưng có thể tính toán khá hiệu quả hơn vì thật sự chỉ N-2 ẩn: hầu hết các điều kiện của spline là thừa. Ví dụ, giả sử pi là đạo hàm bậc hai của spline tại điểm xi, vì s”i-1(xi) = s”i(xi) = pi với i=2, 3, …, N-1 và pi= pN = 0 nếu biết trước các giá trị pi và pN, thì tất cả các hệ số a, b, c, d có thể được tính trên các đoạn spline, vì ta có bốn phương trình với bốn ẩn số trên các đoạn: với i=1, 2, …,N-1 ta phải có:

    si(xi) = yi ; si(xi+1) = yi+1 ; s”i(xi) = pi ; s”i(xi+1) = pi+1

    Các giá trị x, y đã cho trước, để xác định đầy đủ spline chỉ cần tính các giá trị p2, …, pN. Để tính được, dùng điều kiện đạo hàm bậc nhất phải bằng nhau: có N-2 điều kiện ứng với N-2 phương trình cần để giải N-2 ẩn, theo pi .Để diễn tả các hệ số các hệ số a, b, c, d theo p, các giá trị đạo hàm bậc hai, ta thay các biểu thức vào bốn phương trình trên trên mỗi đoạn spline, điều này dẫn đến một số biểu thức phức tạp không cần thiết. Thay vì diễn tả các phương trình trên từng đoạn spline ở dạng chuẩn liên hệ đến ít ẩn số hơn. Nếu ta thay các biến là t = (x-xi)/(xi+1-xi) thì spline được biểu diễn như sau:

    si(t) = tyi+1 + (1-t)yi + (xi+1 -xi)2((t3- t)pi+1 – ((1-t)3 – (1-t)pi)/6

    bây giờ mỗi spline được xác định trên đoạn [0,1]. Phương trình này đơn giản hơn là hình thức bên ngoài của nó, vì ta chỉ quan tâm đến hai điểm nút 0 và 1 và hoặc t hoặc (1-t) bằng 0 ở những điểm mút này. Cách biểu diễn này dễ kiểm spline được nội suy và liên tục vì si-1(1) = si(0) = yi với i = 2,…, N-1, nó chỉ hơi khó chứng minh bậc hai liên tục vì s”i(1) = s”i+1(0)= pi+1. Có các đa thức bậc ba thoả những điều kiện này tại các điểm mút, vì thế chúng tương đương với các đoạn spline mô tả ở trên. Nếu ta thay thành t và tìm hệ số của x3,… thì ta sẽ có cùng biểu thức ẩn là a, b, c, d theo x, y và p giống như ta dùng phương pháp được mô tả ở đoạn trước. Nhưng không có lý do gì làm như vậy, vì ta đã kiểm rằng các đoạn spline này thoả các điều kiện cuối, và có thể lượng giá từng spline ở bất kỳ điểm nào trong đoạn của nó bằng cách tính t và dùng công thức trên (khi đã biết p).

    Để tính p, ta gán các đạo hàm cấp một của các đoạn spline bằng các điểm cuối. Đạo hàm cấp 1 (theo x) của các phương trình trên là:

    s’i(t) = zi + (xi+1 - xi)((3t2 - 1)pi+1– (3(1-t)2 – 1)pi)/6

    Trong đó zi= (yi+1 - yi)/(xi+1 - xi). Kế đến gán s’i-1(1) = s’i(0) với i = 2…N-1, ta sẽ có hệ N-2 phương trình:

    (xi-xi-1)pi-1 + 2(xi+1 – xi-1)pi + (xi+1 - xi)pi+1 = 6(zi – zi-1)

    Hệ phương trình này thuộc dạng tam giác đơn giản dùng phép khử Gauss để giải. Ví dụ, nếu đặt ui = xi+1– xi, di = 2(xi+1 – xi-1), và wi = 6(zi – zi+1), ta có hệ phương trình với N=7:

     

    Thật sự, hệ tam giác đối xứng này có nửa dưới bằng với nửa trên của đường chéo chính. Nó được xoay trên phần tử có sẵn lớn nhất nếu khong cần tìm lời giải đúng cho hệ phương trình này.

    Phương pháp được mô tả ở đoạn t rên để tính spline bậc ba được dễ dàng viết dưới dạng Pascal như thủ tục makesplinedưới đây:

    ++++

    procedure makespline;

    var i: integer;

    begin

    readln(N);

    for i:= 1 to N do readln(x[i], y[i]);

    for i:= 2 to N-1 do d[i]: = 2 + (x[i+1] - x[i-1]);

    for i:= 1 to N-1 do u[i]: = x[i+1] - x[i];

    for i:= 2 to N-1 do

    w[i]: = 6.0 * ((y[i+1) - y[i])/u[i] – (y[i] - y[i-1])/u[i-1]);

    p[1]:= 0.0; p[N]:= 0.0;

    for i:= 2 to N-2 do

    begin

    w[i+1]:= w[i+1] - w[i]* u[i]/d[i];

    d[i+1]:= d[i+1] - u[i]* u[i]/d[i];

    end;

    for i:= N-1 downto N-1 do

    p[i]:= (w[i] - u[i]*p[i+1])/d[i];

    end;

    +++

    Các mảng d và u là đại diện matrận tam giác.

    *** Mộ spline bậc ba trên N điểm có thể thực hiện theo thời gian tuyến tính.

    Điều này hiển nhiên có được từ chương trình.

    Ví dụ xây dựng một spline bậc ba từ năm điểm: (1.0, 2.0), (2.0, 1.5), (4.0, 1.25), (5.0,1.2), (8.0, 1.125), (10.0, 1.1).

    (Các điểm trên lấy từ hàm 1+1/x). Các tham số spline tìm được bằng cách giải hệ phương trình:

     

    với kết quả: p2 = 0.39541, p3 = -0.06123, p4 = 0.02658, p5 = -0.00047

    Để lượng giá spline cho bất kỳ giá trị x nào trong khoảng [x1, xN], đơn giản ta tìm khoảng [xi, xi+i] có chứa x, rồi tính t và dùng công thức trên cho si(x) (rồi dùng lại hàm này để tính pi và pi+1).

     

    function eval(v: real):real;

    var t: real; i: integer;

    funtion f(x: real):real;

    begin f:= x*x*x-x; end;

    begin i:= 0;

    repeat i:=i+1 until v[i+1];

    t:= (u-x[i])/u[i];

    eval:=t*y[i+1]+(1t)*y[i]+u[i]*(f(t)*p[i+1] + f(t-1]+f(t-1)*p[i] )/6.0;

    end;

    Chương trình này không kiểm tra khi v không nằm giữa x[1] và x[N]. Nếu số đoạn spline nhiều (nghĩa là N lớn) có một số phương pháp tìm có hiệu quả hơn.

    Có nhiều thay đổi tư tưởng điều chỉnh đường cong bằng cách ráp các đoạn đa thức sao cho thật mịn. Việc tính toán các spline thuộc lĩnh vực nghiên cứu đã phát triển rất tốt. Các kiểu spline khác liên hệ đến các chuẩn làm mịn cũng như các thay đổi khác như nới lỏng điều kiện các spline phải chạm đúng vào mỗi điểm dữ liệu. Về mặt tính toán, chúng liên hệ cùng một số bước xác định các hệ số cho mỗi đoạn spline bằng cách giải hệ phương trình tuyến tính rút từ các giới hạn được đưa ra trên sự kiện chúng được nối với nhau như thế nào.

    School@net (Theo THNT)



     Bản để in  Lưu dạng file  Gửi tin qua email


    Những bài viết khác:



    Lên đầu trang

     
    CÔNG TY CÔNG NGHỆ TIN HỌC NHÀ TRƯỜNG
     
    Phòng 804 - Nhà 17T1 - Khu Trung Hoà Nhân Chính - Quận Cầu Giấy - Hà Nội
    Phone: 024.62511017 - 024.62511081
    Email: kinhdoanh@schoolnet.vn


    Bản quyền thông tin trên trang điện tử này thuộc về công ty School@net
    Ghi rõ nguồn www.vnschool.net khi bạn phát hành lại thông tin từ website này
    Site xây dựng trên cơ sở hệ thống NukeViet - phát triển từ PHP-Nuke, lưu hành theo giấy phép của GNU/GPL.