Help me về hàm nội suy 2 chiều với! (1 người xem)

Liên hệ QC

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

Tiêu đề vi phạm nội qui, lần sau đọc kỹ nội qui đăng bài
Bạn sử dụng code mới
Mã:
Function noisuy1(vungtra As Range, X As Double, cot As Integer) As Double
    'ham noi suy 1 chieu
    Dim ktra As Boolean
    Dim i As Integer
    Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
    For i = 1 To vungtra.Cells.Count
     If (vungtra.Cells(i, 1) <= X And vungtra.Cells(i + 1, 1) >= X) Or _
        (vungtra.Cells(i + 1, 1) <= X And vungtra.Cells(i, 1) >= X) Then
      x1 = vungtra.Cells(i, 1): x2 = vungtra.Cells(i + 1, 1)
      y1 = vungtra.Cells(i, cot): y2 = vungtra.Cells(i + 1, cot)
      noisuy1 = (y2 - y1) * (X - x1) / (x2 - x1) + y1
     Exit Function
     End If
    Next i
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function

Function noisuy2(vtra As Range, X As Double, Y As Double) As Double
    'ham noi suy 2 chieu
    Dim ktra As Boolean, vungtra
    Dim i As Integer, j As Integer
    Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
    Dim a11 As Double, a12 As Double, a21 As Double, a22 As Double
    Dim t1 As Double, t2 As Double
    vungtra = vtra
    For j = 2 To UBound(vungtra, 2) - 1
      If (vungtra(1, j) <= Y And vungtra(1, j + 1) >= Y) Or _
            (vungtra(1, j + 1) <= Y And vungtra(1, j) >= Y) Then
       For i = 2 To UBound(vungtra, 1) - 1
        If (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Or _
            (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Then
         x1 = vungtra(i, 1): x2 = vungtra(i + 1, 1)
         y1 = vungtra(1, j): y2 = vungtra(1, j + 1)
         a11 = vungtra(i, j): a12 = vungtra(i, j + 1)
         a21 = vungtra(i + 1, j): a22 = vungtra(i + 1, j + 1)
         t1 = (a12 - a11) * (Y - y1) / (y2 - y1) + a11
         t2 = (a22 - a21) * (Y - y1) / (y2 - y1) + a21
         noisuy2 = (t2 - t1) * (X - x1) / (x2 - x1) + t1
         Exit Function
        End If
       Next i
      End If
    Next j
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function
 
{MÌnh có gửi file phụ lục 10 đó mình có làm vd nội suy 2 chiều nhưng k được bạn vào đó xem hộ mình với]

@#!^%//**/;;;;;;;;;;;



Tiêu đề vi phạm nội qui, lần sau đọc kỹ nội qui đăng bài
Bạn sử dụng code mới
Mã:
Function noisuy1(vungtra As Range, X As Double, cot As Integer) As Double
    'ham noi suy 1 chieu
    Dim ktra As Boolean
    Dim i As Integer
    Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
    For i = 1 To vungtra.Cells.Count
     If (vungtra.Cells(i, 1) <= X And vungtra.Cells(i + 1, 1) >= X) Or _
        (vungtra.Cells(i + 1, 1) <= X And vungtra.Cells(i, 1) >= X) Then
      x1 = vungtra.Cells(i, 1): x2 = vungtra.Cells(i + 1, 1)
      y1 = vungtra.Cells(i, cot): y2 = vungtra.Cells(i + 1, cot)
      noisuy1 = (y2 - y1) * (X - x1) / (x2 - x1) + y1
     Exit Function
     End If
    Next i
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function

Function noisuy2(vtra As Range, X As Double, Y As Double) As Double
    'ham noi suy 2 chieu
    Dim ktra As Boolean, vungtra
    Dim i As Integer, j As Integer
    Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
    Dim a11 As Double, a12 As Double, a21 As Double, a22 As Double
    Dim t1 As Double, t2 As Double
    vungtra = vtra
    For j = 2 To UBound(vungtra, 2) - 1
      If (vungtra(1, j) <= Y And vungtra(1, j + 1) >= Y) Or _
            (vungtra(1, j + 1) <= Y And vungtra(1, j) >= Y) Then
       For i = 2 To UBound(vungtra, 1) - 1
        If (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Or _
            (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Then
         x1 = vungtra(i, 1): x2 = vungtra(i + 1, 1)
         y1 = vungtra(1, j): y2 = vungtra(1, j + 1)
         a11 = vungtra(i, j): a12 = vungtra(i, j + 1)
         a21 = vungtra(i + 1, j): a22 = vungtra(i + 1, j + 1)
         t1 = (a12 - a11) * (Y - y1) / (y2 - y1) + a11
         t2 = (a22 - a21) * (Y - y1) / (y2 - y1) + a21
         noisuy2 = (t2 - t1) * (X - x1) / (x2 - x1) + t1
         Exit Function
        End If
       Next i
      End If
    Next j
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function
 

File đính kèm

{MÌnh có gửi file phụ lục 10 đó mình có làm vd nội suy 2 chiều nhưng k được bạn vào đó xem hộ mình với]

@#!^%//**/;;;;;;;;;;;
bạn chỉnh lại code
Mã:
Function noisuy2(vtra As Range, X As Double, Y As Double) As Double
    'ham noi suy 2 chieu
    Dim ktra As Boolean, vungtra
    Dim i As Integer, j As Integer
    Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
    Dim a11 As Double, a12 As Double, a21 As Double, a22 As Double
    Dim t1 As Double, t2 As Double
    vungtra = vtra
    For j = 2 To UBound(vungtra, 2) - 1
      If WorksheetFunction.IsNumber(vungtra(1, j)) And _
            WorksheetFunction.IsNumber(vungtra(1, j + 1)) And _
            ((vungtra(1, j) <= Y And vungtra(1, j + 1) >= Y) Or _
            (vungtra(1, j + 1) <= Y And vungtra(1, j) >= Y)) Then
       For i = 2 To UBound(vungtra, 1) - 1
        If WorksheetFunction.IsNumber(vungtra(i, 1)) And _
            WorksheetFunction.IsNumber(vungtra(i + 1, 1)) And _
            ((vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X) Or _
            (vungtra(i, 1) <= X And vungtra(i + 1, 1) >= X)) Then
         x1 = vungtra(i, 1): x2 = vungtra(i + 1, 1)
         y1 = vungtra(1, j): y2 = vungtra(1, j + 1)
         a11 = vungtra(i, j): a12 = vungtra(i, j + 1)
         a21 = vungtra(i + 1, j): a22 = vungtra(i + 1, j + 1)
         t1 = (a12 - a11) * (Y - y1) / (y2 - y1) + a11
         t2 = (a22 - a21) * (Y - y1) / (y2 - y1) + a21
         noisuy2 = (t2 - t1) * (X - x1) / (x2 - x1) + t1
         Exit Function
        End If
       Next i
      End If
    Next j
     MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
End Function
Lưu ý trong bảng tra xóa "-" ở vùng không có dữ liệu
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom