Tự động tính nội suy hàm 2 chiều (1 người xem)

  • Thread starter Thread starter ibraa
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

ibraa

Thành viên mới
Tham gia
15/3/11
Bài viết
13
Được thích
0
Mình đang muốn viết 1 hàm trong excel để tự tính nội suy giá trị theo những giá trị có trong bảng nhưng chưa viết được. Mọi người có thể hướng dẫn mình viết được ko? Mình mới chỉ viết được tự động nội suy 1 chiều thôi
Hàm có dạng như " noisuy(Q,Z)" với Q và Z là những giá trị cần tra bảng và có sẵn
Nếu Z(Q)<=Z(Q)min thì giá trị nội suy ra sẽ bằng giá trị của Z(Q)min
Nếu Z(Q)>=Z(Q)max thì giá trị nội suy ra sẽ bằng giá trị của
Z(Q)max
Đây là hàm nội suy 1 chiều do mình viết
PHP:
Function Q_Zhl(Q1 As Double) As Double
Dim a As Integer
Dim b As Integer
Dim Q(62), Zhl(62) As Double
 For a = 1 To 62
 Q(a) = Sheet2.Cells(7, a + 1)
 Zhl(a) = Sheet2.Cells(8, a + 1)
 Next a
 If Q1 <= Q(1) Then
    Q_Zhl = Zhl(1)
 Else
    If Q1 >= Q(62) Then
    Q_Zhl = Zhl(62)
    Else
     a = 1
     Do While Q1 > Q(a)
        a = a + 1
        b = a
     Loop
     Q_Zhl = Zhl(b - 1) + (Q1 - Q(b - 1)) * (Zhl(b) - Zhl(b - 1)) / (Q(b) - Q(b - 1))
        End If
     End If
     

End Function
 
quan trong la ban noi suy theo phuong phap nao, noi suy tuyen tinh hay lagrang ..
sau day la doan code noi suy theo tuyen tinh , ban co the tham khao:


Mã:
Public Function Noi_suy(gt1 As Double, gt2 As Double, A As Range) As Double
' gt1 la gia tri tim kiem theo hang, gt2 la gia tri tim kiem theo cot
Dim i, j, m, n As Integer
Dim a11, a21, a12, a22, b1, b2 As Double
' mang gom m hang va n cot
 m = A.Rows.Count
n = A.Columns.Count
'tim khoang noi suy
If gt2 = 0 And gt1 = 0 Then
    Noi_suy = A(2, 2)
Else
    If gt2 = 0 Then
        j = 2
        For i = 1 To m Step 1
            If A(i, 1) >= gt1 Then
                Exit For
            End If
        Next
        b1 = A(i - 1, j)
        b2 = A(i, j)
        Noi_suy = b1 + (gt1 - A(i - 1, 1)) * (b2 - b1) / (A(i, 1) - A(i - 1, 1))
    Else
            If gt1 = 0 Then
                i = 2
                For j = 1 To n Step 1
                    If A(1, j) >= gt2 Then
                        Exit For
                    End If
                Next
                    b1 = A(i, j - 1)
                    b2 = A(i, j)
                    Noi_suy = b1 + (gt2 - A(1, j - 1)) * (b2 - b1) / (A(1, j) - A(i, j - 1))
            Else
                        For i = 1 To m Step 1
                                 If A(i, 1) >= gt1 Then
                                    Exit For
                                End If
                        Next
                        For j = 1 To n Step 1
                                 If A(1, j) >= gt2 Then
                                    Exit For
                                 End If
                        Next
                    ' noi suy gia tri
                                a11 = A(i - 1, j - 1): a21 = A(i - 1, j): a12 = A(i, j - 1): a22 = A(i, j)
                                b1 = a11 + (gt2 - A(1, j - 1)) * (a21 - a11) / (A(1, j) - A(1, j - 1))
                                b2 = a12 + (gt2 - A(1, j - 1)) * (a22 - a12) / (A(1, j) - A(1, j - 1))
                                Noi_suy = b1 + (gt1 - A(i - 1, 1)) * (b2 - b1) / (A(i, 1) - A(i - 1, 1))
            End If
    End If
End If
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
nội suy tuyến tính thôi bạn ak. Mình thấy hàm của bạn chạy rất ổn
 
Upvote 0
Các bác có thể giúp em viết một hàm nội suy tự tạo được không ah? Nói ra thì dài mời các bác xem file đính kèm của em cho rõ.
 

File đính kèm

Upvote 0

Bài viết mới nhất

Back
Top Bottom