首先,我知道这些螺纹是存在的!所以请原谅我,我的问题没有被他们完全回答。
作为一个例子,假设我们处于一个四维向量空间,即R^4。我们正在研究两个线性方程组:
3*x1 - 2* x2 + 7*x3 - 2*x4 = 6
1*x1 + 3* x2 - 2*x3 + 5*x4 = -2 实际的问题是:是否有一种方法可以生成多个N点来求解,这两个方程的都是利用NumPy的线性求解器等等?
到目前为止,我尝试过的所有python库的主要问题是:它们需要n方程作为n-dimensional空间。
对于一个方程来说,求解这个问题非常容易,因为您可以简单地使用n-1随机生成的vlaues,并调整最后一个,这样向量就可以求解这个方程。
我的预期结果将是N“随机”生成的在n-dimensional空间中求解线性方程组的点的列表,其中k<n。
发布于 2019-01-11 22:16:29
谢谢你的回答,这既帮助了我,也为我指明了正确的方向。
对于任意的k<n,我现在有了一个简单的逐步解决方案。
1.给出了所有方程的一种解。这可以通过使用
solution_vec = numpy.linalg.lstsq(A,b)这给出了一个解决方案,如回答中所示。在我上面的例子中,矩阵A等于左侧方程的系数,b表示右侧的向量。
2.确定矩阵A的空空间。
这些都是向量v,因此skalar产品v*A_i = 0为每一个(!)A_i of A.下面的函数,found 在这个线程中可以用来获取A空空间的代表
def nullSpaceOfMatrix(A, eps=1e-15):
u, s, vh = scipy.linalg.svd(A)
null_mask = (s <= eps)
null_space = scipy.compress(null_mask, vh, axis=0)
return scipy.transpose(null_space) 3.生成任意数量(N)的“随机”线性组合(用随机系数表示)以及由此产生的矩阵的空空间向量!这是因为标量积是可加的,空间向量的标量积为0。这些线性组合必须始终包含solution_vec,如:
linear_combination = solution_vec + a*null_spacevec_1 + b*nullspacevec_2...可以随机选择a和b。
发布于 2019-01-11 14:55:30
一个变量比方程多的线性方程组称为欠定系统。
欠定线性系统要么没有解,要么有无穷多个解。 ..。 有一些算法可以决定一个欠定系统是否有解,如果它有解,则用变量k的线性函数表示所有的解(与上面的k相同)。最简单的方法是高斯消去。
正如您所说,库中的许多可用函数(例如np.linalg.solve)都需要一个平方矩阵(即n个未知数的n个方程),您要寻找的是线性系统的实现。
这不是“随机”,但np.linalg.lstsq (最小二乘)将解非平方矩阵:
将最小二乘解返回到线性矩阵方程. 解方程a x=b,通过计算向量x,使欧几里德2-范数x_b-a x_^2最小化。方程可以是在-,好的,也可以是过定的(即a的线性无关行数可以小于、等于或大于其线性独立列的数目)。如果a是平方的,并且是满秩的,那么x(但是对于舍入误差)是方程的“精确”解。
有关更多信息,请参见:用python求解非方阵A的Ax =b
发布于 2019-01-11 16:07:35
由于您有一个欠确定的方程组(对于您的解的约束太少,或者比变量更少),所以您只需为x3和x4选择一些任意值,并在x1,x2中求解这个系统(这里有2个变量/2个方程)。
您只需检查生成的系统是否不不一致(也就是说,它不允许任何解决方案),并且没有重复的解决方案。
例如,您可以修复x3=0并为x1,x2中的方程选择随机值的x4生成解。
下面是一个生成10个“随机”解决方案的示例
n = 10
x3 = 0
X = []
for x4 in np.random.choice(1000, n):
b = np.array([[6-7*x3+2*x4],[-2+2*x3-5*x4]])
x = np.linalg.solve(a, b)
X.append(np.append(x,[x3,x4]))
# check solution nr. 3
[x1, x2, x3, x4] = X[3]
3*x1 - 2* x2 + 7*x3 - 2*x4
# output: 6.0
1*x1 + 3* x2 - 2*x3 + 5*x4
# output: -2.0https://stackoverflow.com/questions/54148593
复制相似问题