Радиальная базисная функция в 3D (обращенная к матрице сингулярности) - PullRequest
0 голосов
/ 20 мая 2018

Я пишу код для 2D RBF-интерполяции, но сталкиваюсь с проблемой сингулярности:

`Raise LinAlgError ('Matrix is ​​singular.')

LinAlgError: Матрица в единственном числе.

У меня есть идея разложения QR, чтобы решить эту проблему, но я не знаю, в каком месте кода мне следует написать код для разложения QR?Я также удалил дубликаты очков!

import numpy as np
from scipy import interpolate
import pandas as pd
import xlsxwriter
#Read the Dataset from Excel File
dataset=pd.read_excel(r'C:\Users\Windows 10\.spyder-py3\Messwerte_FIBRE.xlsx')
dataset=dataset.drop([0])
dataset=dataset.drop_duplicates(subset=['T Heizstation','T GWK','P Presse','Bauteilverzug'])
index1=[1]
index2=[4]
index3=[5]
index4=[9]
x1=dataset.iloc[:, index1]
x2=dataset.iloc[:, index2]
x3=dataset.iloc[:, index3]
y=dataset.iloc[:, index4]
#converting string into array
x1np=np.array(x1,dtype=float)
x2np=np.array(x2,dtype=float)
x3np=np.array(x3,dtype=float)
ynp=np.array(y,dtype=float)
newfunc = interpolate.Rbf(x1np,x2np,x3np,ynp,function='linear')
estimation= newfunc(x1np,x2np,x3np)
estimation=np.array(estimation)
# Write the estimation output in Another Excel file
workbook = xlsxwriter.Workbook(r'C:\Users\Windows 10\.spyder-py3\RBF_Reg.xlsx')
worksheet = workbook.add_worksheet('est_output')
row=2
for outputverzug in enumerate(estimation):
    worksheet.write(row,0,outputverzug[1])
    row+=1
#for next column
row=2     
for outputverzug in enumerate(ynp):
      worksheet.write_column(row,1,outputverzug[1])
      row+=1
worksheet.write(0,0,"Predicted Angle Values")
worksheet.write(1,0,"°")
worksheet.write(0,1,"Original Angle Values")
worksheet.write(1,1,"°")
worksheet.conditional_format('A2:A202', {'type': '3_color_scale',
                                         'min_color': "#FF0000",
                                         'max_color': "#00FF00"})
worksheet.conditional_format('B2:B202', {'type':'3_color_scale',
                                         'min_color': "#00FF00",
                                        'max_color': "#FF0000"})
workbook.close()

1 Ответ

0 голосов
/ 25 июля 2019

Для эмпирических данных с дубликатами (или другой формой избыточности) целесообразно использовать сглаживание (вместо принудительной интерполяции по всем точкам).Rbf имеет параметр ключевого слова smooth, по умолчанию 0, у меня сработало 1,5.

Без сглаживания хуже, чем дубликаты, является "несовместимость рядом с дубликатами" (закрытие в плоскости X, Y, но заметноотличается в Z).«Почти особая» точка может испортить результат в непосредственной близости.

...