Hỏi về hàm nội suy

Thảo luận trong 'Excel và Kỹ Thuật' bắt đầu bởi nguyenthinu168, 22 Tháng sáu 2006.

  1. nguyenthinu168

    nguyenthinu168 New Member

    tôi muốn hỏi cách nội suy hàng và cột, ví dụ
    1 25
    2 30
    3 45
    4 50
    tôi muốn tìm giá trị của 2.5 của cột thứ nhất tìm giá trị tương ứng của cột thú hai.
     
    Last edited: 22 Tháng sáu 2006
  2. OverAC

    OverAC Đỗ Nguyên Bình Staff Member

    Đọc bài của bác tôi thấy toát mồ hôi hột vì hai từ "căn bản" và "nội suy" :.
    Bác thử dùng hàm này nhé: giả sử 2 cột của bác là cột A và B
    =forecast(2.5, B1:B4, A1:A4) = 37.5


    (em chuyển nó sang box Excel và các công thức nhé)
     
  3. nguyenthinu168

    nguyenthinu168 New Member

    excel căn bản

    Tôi đã thử dùng hàm forecast trong việc tìm giá trị cột A, nhưng nếu cột B có giá trị không tăng tuyến tính, hoặc cột A là giá trị bất kỳ thì không được?
    Vi dụ
    A B
    2 9
    4 5
    1 4
    5 7
    8 8
    Hãy tìm một giá trị bất kỳ trong cột A giúp với!
     
  4. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    Bạn thử tải file này về nghiên cứu xem, có 3 cách đó. NGoài ra có thể dễ dàng lập khi dùng VB.
     

    Các file đính kèm:

  5. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    Hàm Forecast như bạn OverAC đưa ra chỉ áp dụng khi dãy số tăng hoặc giảm dần theo quy luật tuyến tính, không thì sẽ cho kết quả sai đấy, cần hết sức lưu ý. :*
    Kết quả cho ra tương ứng với giá trị của phương trình tương quan.
    Các bạn có thể tham khảo ở phần Excel và kỹ thuật.
     
    Last edited: 12 Tháng bảy 2006
  6. PMXD

    PMXD Thành viên danh dự

    Các bạn dùng thử hàm nội suy 2 chiều
    '======================================================
    Function TraBang2Chieu(ByVal GiaTriCot, ByVal GiaTriHang, VungChon As Range)
    Dim i As Long, j As Long
    Dim TangAnPha
    Dim NoiSuy1 As Double, NoiSuy2 As Double

    For i = 1 To UBound(VungChon.Value, 2) ' Theo phuong ngang
    If GiaTriCot = VungChon(1, i) Then
    For j = 1 To UBound(VungChon.Value, 1) - 1
    If (GiaTriHang - VungChon(j, 1)) * (GiaTriHang - VungChon(j + 1, 1)) <= 0 Then
    TangAnPha = (VungChon(j + 1, i) - VungChon(j, i)) / (VungChon(j + 1, 1) - VungChon(j, 1))
    TraBang2Chieu = VungChon(j, i) + (GiaTriHang - VungChon(j, 1)) * TangAnPha
    GoTo Thoat:
    End If
    Next j
    ElseIf (GiaTriCot - VungChon(1, i)) * (GiaTriCot - VungChon(1, i + 1)) < 0 Then
    For j = 1 To UBound(VungChon.Value, 1) - 1
    If (GiaTriHang - VungChon(j, 1)) * (GiaTriHang - VungChon(j + 1, 1)) < 0 Then
    TangAnPha = (VungChon(j, i + 1) - VungChon(j, i)) / (VungChon(1, i + 1) - VungChon(1, i))
    NoiSuy1 = VungChon(j, i) + (GiaTriCot - VungChon(1, i)) * TangAnPha

    TangAnPha = (VungChon(j + 1, i + 1) - VungChon(j + 1, i)) / (VungChon(1, i + 1) - VungChon(1, i))
    NoiSuy2 = VungChon(j + 1, i) + (GiaTriCot - VungChon(1, i)) * TangAnPha

    TangAnPha = (NoiSuy2 - NoiSuy1) / (VungChon(j + 1, 1) - VungChon(j, 1))
    TraBang2Chieu = NoiSuy1 + (GiaTriHang - VungChon(j, 1)) * TangAnPha
    GoTo Thoat:
    End If
    Next j
    End If
    Next i

    Thoat:
    'TraBang = UBound(VungChon.Value, 2)
    End Function
     
  7. plka

    plka New Member

    Bác PMXD ở bên ketcau.com đã mò sang đây rùi! Em câu bài cái nha hi hi!
     
  8. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    Để hiểu thêm về sử dụng hàm forecast, mời bạn sang Excel và Kỹ thuật.
     
  9. HAiNV

    HAiNV New Member

    Trên ketcau.com, có nhiều người đã viết hàm nội suy này rồi. Rất tiện dụng!
    Tuy nhiên, hàm nội suy của bác PMXD là tuyệt vời nhất, nội suy 1 hay 2 chiều đều được, bất kể dãy số tăng hay giảm.
    Theo tôi, có thể viết lại code của bác PMXD một cách gọn hơn và nên đưa ra thông báo trong trường hợp mốc nội suy nằm ngoài hàng hay ngoài cột để người dùng tiện xử lý!
    Các bác có gì thắc mắc về món VBA, cứ liên hệ bác PMXD ấy. Cao thủ!
     
  10. Nguyễn Duy Tuân

    Nguyễn Duy Tuân Nghị Hách

    Để viết hàm Nội suy đúng thì bạn cần quan tâm tới các vấn đề này:
    + Biến thiên của số liệu: Bạn hãy insert chart chọn kiểu "Line", xem hướng của đồ thị trên đồ thị.
    + Xác định kiểu hàm số, tìm tham số a,b,c - Phương pháp "Hồi quy - Tương quan"
    Nếu thấy nó có hướng một đường thẳng - Tuyến tính thì dùng ngay hàm Forecast. Bản chất của hàm Forecast là nội suy theo hàm số Y=aX+b (đường thẳng).
    Nếu hai mảng số liệu X,Y có phân bố "tương quan" chặt chẽ thì kết quả nội suy của bạn có có thể tin cậy. Vậy thế nào đển đánh giá mối quan hệ tương quan của X và Y là chặt chẽ? Bạn phải dùng thêm hàm CORREL. Hàm CORREL tính ra hệ số tương quan (r), -1<=r<=1, nếu r-trị tuyệt đối gần bằng 1 (0.9x) thì đáng tin cậy còn ngược lại.

    Dạng đồ thì thứ 2 có biểu hiện của hàm số Hypebol Y=a/X+b
    Khi đó cách dùng của cách trên (Y=aX+b) là không được vì mối quan hệ của X,Y không theo luật đường thẳng. Bạn phải dùng nội suy theo cách "Hồi quy phi tuyến tính" theo hàm số Hypebol.

    Dạng thứ 3 là biểu hiện của hình Parabol Y=aX^2+bX+c
    Đương nhiên cũng phải dùng phương pháp "Hồi quy phi tuyến tính"

    * Với phương pháp "Hồi quy phi tuyến tính", để đánh giá tính quan hệ chặt chẽ người ta dùng chỉ tiêu "Tỷ số tương quan" chứ không phải r-Hệ số tương quan.

    Khi nào có dịp I sẽ nói chi tiết thêm về phương pháp nội suy này nhưng ví dụ minh họa sẽ là kinh tế, trong kinh tế thì gọi đây là dự báo chỉ tiêu ngắn hạn.
     
    Last edited: 31 Tháng bảy 2006
  11. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    Mục này nên để ở Excel và kỹ thuật, nghe có vẻ phù hợp hơn.
     
  12. ptlong04x1

    ptlong04x1 Well-Known Member

    Không biết sao em không sử dụng được hàm này, các anh chỉ giúp em với.

    [​IMG]


     

    Các file đính kèm:

    • NS2C.xls
      Kích thước:
      24 KB
      Đọc:
      291
    Last edited: 24 Tháng ba 2009
  13. tuan_tram77

    tuan_tram77 New Member

    Noi suy 2 chieu

    Mình chép vào không chạy được?
    Có thể giúp mình không?
     
  14. giaptk3

    giaptk3 New Member

    Public Function NOISUY(day1, day2, x, n) As Variant
    Dim i As Integer
    j = 0
    For i = 1 To n - 1
    If (day1(i) - x) * (day1(i + 1) - x) <= 0 Then
    j = i
    End If
    Next i
    If j <> 0 Then
    NOISUY = (x - day1(j)) * (day2(j + 1) - day2(j)) / (day1(j + 1) - day1(j)) + day2(j)
    Else: NOISUY = "FALSE"
    End If

    End Function
     
  15. tuanpmkn

    tuanpmkn New Member

    Nội suy Ko

    Bác nào có file tính nội suy Ko chỉ đơn giản bằng hàm Match và index kết hợp, cho em xin?
    Em dăng mắc, không làm được.
    Có thể gửi vào địa chỉ tuanpmkn@gmail.com
    Thank you Bác.
     
  16. bravery10

    bravery10 New Member

    Về nội suy thì phải hỏi Anh Cao văn Dũng 52TL2 ĐHXD. Nội suy 1 biến, 2 biến, 3 biến, nội suy đường cong đều có hàm do anh viết.
    Mã:
    Function NSZ(Xo, Yo, Z) As Single  'Ham Noi suy 2 bien
    Dim i, j As Integer
            cao = Z.Rows.Count 'Xac dinh so hang
            Rong = Z.Columns.Count 'Xac dinh so cot
        Dim A1, A2, B1, B2, Y, X, Tim As Single 'Cac diem chan
        For i = 2 To cao
             If Z(i, 1) <= Xo And Xo <= Z(i + 1, 1) Then
                    n = i
                        For j = 2 To Rong
                            If Z(1, j) <= Yo And Yo <= Z(1, j + 1) Then
                                m = j
                                Y = Z(1, m + 1) - Z(1, m)
                                X = Z(n + 1, 1) - Z(n, 1)
                                B1 = Z(n, m + 1)
                                B2 = Z(n + 1, m + 1)
                                A1 = Z(n, m)
                                A2 = Z(n + 1, m)
                                Tim = (A1 * (Z(1, m + 1) - Yo) * (Z(n + 1, 1) - Xo) + A2 * (Xo - Z(n, 1)) * (Z(1, m + 1) - Yo) + B1 * (Yo - Z(1, m)) * (Z(n + 1, 1) - Xo) + B2 * (Xo - Z(n, 1)) * (Yo - Z(1, m))) / (X * Y)
                            End If
                        Next j
        Exit For
            End If
        Next i
            NSZ = Tim
    End Function
    Function NS(SoX, X, Y) As Double
        Dim i As Integer
        Dim n, cao As Integer
        cao = X.Rows.Count
            For i = 1 To cao
                If X(i) <= SoX And SoX <= X(i + 1) Then
                    n = i
                    NS = Y(n) + (SoX - X(n)) * (Y(n + 1) - Y(n)) / (X(n + 1) - X(n))
            Exit For
                End If
            Next i
    End Function
    Function NSP(SoX, X, Y) As Double 'Ham noi suy parabol
    Dim a, b, c, Ya, Yb, Yc, t As Double
    Dim i, n, cao As Integer
    cao = X.Rows.Count
        For i = 1 To cao - 2
            a = X(i)
            b = X(i + 2)
                If a <= SoX And SoX <= b Then
                n = i
                c = X(i + 1)
                Ya = Y(n)
                Yb = Y(n + 2)
                Yc = Y(n + 1)
                t = 2 * (SoX - a) / (b - a)
                NSP = Ya + (Yc - Ya) * t + (Yb - 2 * Yc + Ya) * t * (t - 1) / 2
            Exit For
                End If
        Next i
    End Function
     

    Các file đính kèm:

  17. bravery10

    bravery10 New Member

    Các bạn phải có chút kiến thức về VBA để khi copy CODE về thì còn biết mà sử dụng. Ví dụ khi copy thường mắc lỗi cú pháp như 1 câu lệnh mà đặt trên 2 dòng. Khắc phục bằng cách nối 2 dòng bằng dấu '':'', hoặc để trên 1 dòng.
     
  18. SA_DQ

    SA_DQ Thành viên danh dự

    Tính nội suy 2 chiều không dùng vòng lặp đây, xin mời!

    PHP:
     Option Explicit
    Function NS_GPE(LookupRange As RangeX0 As DoubleY0 As Double) As Double
     Dim Rd 
    As RangeRc As RangeRng As Range
     Dim Cot 
    As Byte:                            Dim Yy As DoubleXx As Double
     
     Set Rng 
    LookupRange
     With Rng
    .Cells(11)
       
    Set Rd = .Resize(Rng.Rows.Count)
       
    Set Rc = .Resize(, Rng.Columns.Count)
     
    End With
     With Application
    .WorksheetFunction
       Cot 
    Rc.Find(.Lookup(Y0Rc), , xlFormulasxlWhole).Column
       Set Rc 
    Rng.Cells(1Cot)
       
    Yy Rng.Cells(1Cot 1).Value Rng.Cells(1Cot).Value
       
       Set Rng 
    Rd.Find(.Lookup(X0Rd))
       
    Xx Rng.Offset(1).Value Rng.Value
       Set Rd 
    Rng:                             Set Rng Rd.Offset(, Cot 1)
     
    End With
     
     NS_GPE 
    = (Rng * (Rc.Offset(, 1) - Y0) * (Rng.Offset(1Cot) - X0_
       
    Rng.Offset(1) * (X0 Rd) * (Rc.Offset(, 1) - Y0_
       
    Rng.Offset(, 1) * (Y0 Rc) * (Rd.Offset(1) - X0_
       
    Rng.Offset(11) * (X0 Rd) * (Y0 Rc)) / (Xx Yy)
    End Function
    Mời các bạn xem hình trong file
    Mô tả cú fáp dùng hàm tại [H3] ( =NS_GPe(BangTra,12,8))
     

    Các file đính kèm:

    • GPE00.rar
      Kích thước:
      10.6 KB
      Đọc:
      259
    Last edited: 24 Tháng năm 2010
  19. PhanTuHuong

    PhanTuHuong Excel & AutoCad & VBA

    Hầuhư chủ yếu ở đây là nội suy tuyến tính, còn phi tuyến thì chưa có. Bác nào am hiểu cùng trao đổi nhé!!!
     
  20. dieplv

    dieplv New Member

    Nội suy

    Giúp em tìm giá trị của thông số này với!
     

    Các file đính kèm:

    • Book.xlsx
      Kích thước:
      11.1 KB
      Đọc:
      27

Chia sẻ trang này