gpt4 book ai didi

c++ - 计算能量的问题

转载 作者:行者123 更新时间:2023-11-28 03:31:11 24 4
gpt4 key购买 nike

我需要计算一个 vector 的能量,我可以在 Matlab 中这样做:

len = length(blocks);
n = sum(size(blocks)) - len;
currsum = sum(abs(blocks(n,1:len)));

这工作得很好,并给出了结果:4.8750 但是每当我在 C++ 中尝试时,我都会得到错误的结果,想知道是否有人知道我哪里出错了。这是代码:

int n = (this->width + this->height) - this->width;
double currsum = 0;

for(int i=0; (i < n); i++)
{
currsum += blocks[i];

}

C++ 中的结果:0.46875

希望有人能对此有所启发 :)

最佳答案

首先,我不确定您为什么将 vector 元素的绝对值之和称为“能量”。我原以为“能量”是元素的平方之和(或者范数的平方和,如果这是一个复 vector )。

其次,我觉得这是相当愚蠢的代码(相信我,我知道愚蠢的代码 ;-))。逐行查看:

len = length(blocks);

很简单,您正在获取 "length of vector or largest array dimension"

n = sum(size(blocks)) - len;

在您的问题中,您说您正在计算“vector ”中的能量,但如果 blocks 确实是一个 vector ,那么它总是返回数字 1,那么为什么还要计算它呢?如果 blocks 确实是一个二维数组,则 n 现在设置为两个维度中较小者的长度。如果 blocks 是一个 N 维数组……为什么要计算这个值?

currsum = sum(abs(blocks(n,1:len)));

在这里,您似乎假设 blocks 是二维的。但是您还假设最大的维度是第二个维度(请注意,如果您将 blocks 设置为类似 zeros(10,3) 的数组,这行代码将会失败,或列 vector )。

鉴于您的隐含假设(blocks 是一个二维数组,最长维度在最后一个维度),您可以将所有这些代码替换为:

currsum = sum(abs(blocks(end,:)))

现在很清楚发生了什么,但是为什么要计算数组中最后一行的绝对值之和呢?也许这真的是你想要的,但对我来说似乎很奇怪。

查看您的 C++ 代码:

int n = (this->width + this->height) - this->width;

为什么不直接说:

int n = this->height;

然后,在循环中你有

currsum += blocks[i];

首先,你为什么不调用 abs()?其次,C 和 C++ 以行优先顺序存储数组,所以您不是在此处对第一 行求和,而不是对最后 行求和吗?假设您的 MATLAB 代码确实在执行您想要的操作,我想您想要的是:

double currsum = 0;
for(int i=0; (i < this->width); i++)
{
currsum += abs(blocks[this->height-1][i]);
}

关于c++ - 计算能量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com