小编Nae*_*sis的帖子

使用 DFT 的一维热方程产生不正确的结果 (FFTW)

我正在尝试使用复杂到复杂的 IDFT 来求解一维热方程。问题是单个时间步长后的输出似乎不正确。我在下面包含了一个简单的例子来说明这个问题。

我初始化温度状态如下:
温度域的初始状态

频域中的初始模式为:
k[ 0] = 12.5 + 0i
k[ 1] = 12.5 + 0i
k[ 2] = 12.5 + 0i
k[ 3] = 12.5 + 0i
k[ 4] = 12.5 + 0i
k[-3] = 12.5 + 0i
k[-2] = 12.5 + 0i
k[-1] = 12.5 + 0i

然后我将频域的状态推进到t=0.02使用标准的一维热方程:

double alpha = 0.2; // Thermal conductivity constant
double timestep = 0.02;

for (int i = 0; i < N; i++) {
    int k = (i <= …
Run Code Online (Sandbox Code Playgroud)

c++ fftw dft

6
推荐指数
1
解决办法
137
查看次数

`glm::linearRand(-1.0f, 1.0f)` 给出的负数多于正数。这是为什么?“兰德”似乎没问题

我用来生成和glm::linearRand(-1.0f, 1.0f)之间的随机浮点数。然后,我输出正数(或以上)的百分比。-110.0f

std::srand(time(0)); // Give glm a new seed

uint32_t samples = 1000000000;
uint32_t positive = 0;
uint32_t negative = 0;

for (uint32_t i = 0; i < samples; i++) {
    float rand = glm::linearRand(-1.0f, 1.0f);

    if (rand >= 0.0f) {
        positive++;
    } else {
        negative++;
    }
}

std::cout << "positive %: " << std::setprecision(6) << ((float)positive / samples) * 100 << std::endl;
Run Code Online (Sandbox Code Playgroud)

49.6%无论我运行程序的频率如何(使用不同的种子!),正数的百分比总是以 左右结束。如果我正确理解浮点数,则-1.0f0.0f之间的数与0.0f和之间的数同样多1.0f

那么为什么这个程序生成的负数总是多于正数呢? …

c++ random glm-math

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

标签 统计

c++ ×2

dft ×1

fftw ×1

glm-math ×1

random ×1