- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要计算一个 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/
很简单的问题,可能很难回答: 例如,将 SSE 指令用于并行 sum/min/max/average 运算是否比执行任何其他指令(例如单个和)消耗更多的功率? 例如,在 Wikipedia我找不到这方
我想使用流体库的模型。谁能解释一下(我是建模/模拟的新手):质量/能量/动量平衡的公式:稳态、动态和初始猜测初始固定-->之间有什么区别以及对初始化时间/计算的影响是什么时间;我什么时候需要哪一个。
我是一名优秀的程序员,十分优秀!