我想测试一下我用C++编写的简单的Cholesky代码.所以我生成一个随机的低三角形L并乘以它的转置来生成A.
A = L * Lt;
Run Code Online (Sandbox Code Playgroud)
但我的代码无法考虑因素A.所以我在Matlab中尝试了这个:
N=200; L=tril(rand(N, N)); A=L*L'; [lc,p]=chol(A,'lower'); p
Run Code Online (Sandbox Code Playgroud)
这输出非零p,这意味着Matlab也没有考虑因子A.我猜测随机性会产生秩不足的矩阵.我对吗?
更新:
我忘了提到以下Matlab代码似乎正如下面Malife所指出的那样:
N=200; L=rand(N, N); A=L*L'; [lc,p]=chol(A,'lower'); p
Run Code Online (Sandbox Code Playgroud)
差异是L在第一个代码中是低三角形而不是第二个代码.为什么要这么重要?
在阅读了用于生成正半定矩阵的简单算法后,我还尝试了以下scipy :
from scipy import random, linalg
A = random.rand(100, 100)
B = A*A.transpose()
linalg.cholesky(B)
Run Code Online (Sandbox Code Playgroud)
但它出错了:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/scipy/linalg/decomp_cholesky.py", line 66, in cholesky
c, lower = _cholesky(a, lower=lower, overwrite_a=overwrite_a, clean=True)
File "/usr/lib/python2.7/dist-packages/scipy/linalg/decomp_cholesky.py", line 24, in _cholesky
raise LinAlgError("%d-th leading minor not positive definite" % info) …Run Code Online (Sandbox Code Playgroud) 根据我的理解,信号量应该可以在相关进程中使用,而不必放在共享内存中。如果是这样,为什么以下代码会死锁?
#include <iostream>
#include <semaphore.h>
#include <sys/wait.h>
using namespace std;
static int MAX = 100;
int main(int argc, char* argv[]) {
int retval;
sem_t mutex;
cout << sem_init(&mutex, 1, 0) << endl;
pid_t pid = fork();
if (0 == pid) {
// sem_wait(&mutex);
cout << endl;
for (int i = 0; i < MAX; i++) {
cout << i << ",";
}
cout << endl;
sem_post(&mutex);
} else if(pid > 0) {
sem_wait(&mutex);
cout << endl;
for (int i = …Run Code Online (Sandbox Code Playgroud) 我试图识别可以在C++中为变量分配存储的语句.到现在为止,我想出了:
int a;与各种存储,范围符(auto,static,global).malloc,new等等.虽然在技术上对存储pointer在其声明中进行分配.我在这里计算所有这些案件.
malloc/new/calloc或被调用函数可能分配存储的函数调用.我无法想到任何其他方式,但我有一个暗示可能会有更多.我希望人们能够理解我所要求的内容,即使这个问题可能没有正确表达.:)欢迎任何输入.