小编Nil*_*esh的帖子

生成一个pseduo-random正定矩阵

我想测试一下我用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)

c++ math matlab matrix scipy

5
推荐指数
1
解决办法
3031
查看次数

了解posix进程间信号量

根据我的理解,信号量应该可以在相关进程中使用,而不必放在共享内存中。如果是这样,为什么以下代码会死锁?

#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++ posix semaphore

3
推荐指数
1
解决办法
4471
查看次数

C++中的存储分配语句

我试图识别可以在C++中为变量分配存储的语句.到现在为止,我想出了:

  1. 声明语句:像报表int a;与各种存储,范围符(auto,static,global).
  2. 表达式语句:
    上堆存储可以使用分配malloc,new等等.虽然在技术上对存储pointer在其声明中进行分配.我在这里计算所有这些案件.
    • 具有右侧的赋值expr malloc/new/calloc或被调用函数可能分配存储的函数调用.
    • 函数调用expr,该函数通过引用传递,并在被调用函数中分配存储.

我无法想到任何其他方式,但我有一个暗示可能会有更多.我希望人们能够理解我所要求的内容,即使这个问题可能没有正确表达.:)欢迎任何输入.

c++ variables global-variables

3
推荐指数
1
解决办法
231
查看次数

标签 统计

c++ ×3

global-variables ×1

math ×1

matlab ×1

matrix ×1

posix ×1

scipy ×1

semaphore ×1

variables ×1