Python 三维径向基函数(面向奇异矩阵)

Python 三维径向基函数(面向奇异矩阵),python,python-3.x,interpolation,spyder,matrix-inverse,Python,Python 3.x,Interpolation,Spyder,Matrix Inverse,我正在为2D RBF插值编写代码,但面临奇点问题: `raise LinAlgError('矩阵是奇异的') 线性误差:矩阵是奇异的` 我有一个QR分解的想法来解决这个问题,但我不知道应该在代码的哪个位置为QR分解编写代码?我也删除了重复点 import numpy as np from scipy import interpolate import pandas as pd import xlsxwriter #Read the Dataset from Excel File dataset=

我正在为2D RBF插值编写代码,但面临奇点问题:

`raise 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()

对于具有重复(或其他形式的冗余)的经验数据,使用平滑(而不是通过所有点强制插值)是合适的

如果没有平滑,比复制更糟糕的是“不兼容的近复制”(在X、Y平面上接近,但在Z平面上明显不同)。“几乎奇异”点会破坏附近的结果

Rbf
有一个
smooth
关键字参数,float:

大于零的值会增加近似的平滑度。 0表示插值(默认),函数将始终通过 这种情况下的节点

我设计了一个具有近似奇异点的示例。使用不同的
平滑
参数值进行尝试

import numpy as np
from scipy.interpolate import Rbf
import matplotlib.pyplot as plt
np.random.seed(99)

x, y = np.random.rand(2, 100)
x[0] = 0.
for i in range(1,len(x)): # Generate clumpy distribution.
    x[i] = x[i-1] + np.exp(-6.*x[i])
y += 2.*np.sin(x)

fig, ax = plt.subplots(figsize=(15,4))
ax.plot(x ,y ,'ko')
xi = np.linspace(x[0], x[-1], 1000)
for smooth in [.01, 1, 100]:
    rbfi = Rbf(x, y, smooth=smooth)
    yi = rbfi(xi)
    ax.plot(xi,yi,'k-')
fig.show()

首先,我会检查您的数据中是否存在重复点,如果存在重复点?那么如何管理这些重复点呢?这两个变量即x1np和ynp的矩阵顺序是201x1。如何检查重复点以及如何处理这些重复点?查看并了解如何使用搜索功能这两个问题在Stackoverflow上已被多次询问