我正在尝试插值奇异值分解的模态系数。我有一个二次方程ax^2 + bx
,随机a
和b
。然后我填充一个矩阵y
二次型的值,然后使用svd
。现在我需要插值第一个模式的结果系数,由代码中的c1
给出,对于a
和b
在0和1之间。在过去的几天里,我尝试了很多方法,但是没有一种是有效的,关于插值的其他问题也帮不了我。我的interplant在我指定的a
和b
和c1
处给出了精确的c1
值,但是在其他已知的c1
值处没有意义。你知道吗
另外,如何检查c1_interpolated
数组中特定a
和b
处的值?i、 每次都不调用函数?你知道吗
我非常感谢你的帮助,因为我已经在这个问题上纠缠了好几天了。你知道吗
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
def f(x, a, b):
return a*x*x + b*x + 1
end = 1.01
begin = 0
x = np.arange(begin,end,0.1)
npoints = int(1/0.1+1)
a = (np.random.uniform(0,1,npoints))
b = (np.random.uniform(0,1,npoints))
#c = np.random.uniform(0,1,npoints)
cols = 5
y = np.zeros((cols,a.size))
for i in range(cols):
y[i] = f(x, a[i], b[i])
u, s, vh = np.linalg.svd(y, full_matrices=True)
c1 = (vh[0])
c2 = vh[1]
c3 = vh[2]
sample = 8
input_arr = list(zip(a[:sample], b[:sample]))
A= np.linspace(min(a[:sample]), max(a[:sample]))
B = np.linspace(min(b[:sample]), max(b[:sample]))
A, B = np.meshgrid(A, B)
interp = scipy.interpolate.LinearNDInterpolator(input_arr, c1[:sample], fill_value=0)
c1_interpolated = interp(A, B)
我只想在这里总结一下我所理解的,因为这听起来非常混乱。你知道吗
你有一个矩阵。您正在对它执行奇异值分解,它将返回三个数组。然后,您希望通过第三个数组进行插值,该数组对应于矩阵的右奇异向量,是矩阵的厄米数与自身乘积的一组正交特征向量。甚至不询问如何执行插值,它会给你什么?如果我们考虑矩阵的第一行,它的每一个元素都是第一个数组的第一行与第二个数组的第一个元素的乘积与第三个数组的每一列的乘积。如果通过第三个数组的列进行插值,将得到矩阵的第一行,其中包含更多元素。那你为什么不马上插值呢?我真的不明白你想在这里得到什么。。。你知道吗
相关问题 更多 >
编程相关推荐