小编Cro*_*oCo的帖子

无法将'const Eigen :: GeneralProduct <Lhs,Rhs,ProductType>'转换为'double'

每次计算此行时,我都会收到此错误

double k = b.transpose()*Z.inverse()*b;
Run Code Online (Sandbox Code Playgroud)

哪里Eigen::MatrixXd Z(3,3), b(3,1);.我试过铸造但没有运气.有什么建议?

c++ eigen3

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

从矩阵中删除零行(优雅的方式)

我有一个零行的矩阵.我想删除零行.矩阵是Nx3.我所做的很简单.我创建std::vector其中每三个元素代表一行然后我将其转换为Eigen::MatrixXd.是否有一种优雅的方法来删除零行?

#include <iostream>
#include <vector>
#include <Eigen/Dense>



Eigen::MatrixXd VecToMat(const std::vector<double> vec)
{
    int rows(vec.size()/3) , cols(3);
    Eigen::MatrixXd temp( rows , cols);
    int count(0);
    for ( int i(0); i < rows; ++i)
    {
        temp(i,0) = vec[count]; 
        temp(i,1) = vec[count+1]; 
        temp(i,2) = vec[count+2]; 
        count += 3;
    }

    return temp;
}

Eigen::MatrixXd  getNewMat(Eigen::MatrixXd& Z)
{
    std::vector<double> vec;

    for ( int i(0); i < Z.rows(); ++i)
    {
        if ( (Z(i,0) && Z(i,1) && Z(i,2)) != 0 ){
            vec.push_back(Z(i,0));
            vec.push_back(Z(i,1));
            vec.push_back(Z(i,2)); …
Run Code Online (Sandbox Code Playgroud)

c++ matrix eigen3

5
推荐指数
2
解决办法
2283
查看次数

LNK1168:无法打开debug \ file.exe进行写入

我有qt项目,但是如果我编辑代码,Qt创建者会抛出此错误

:-1: error: LNK1168: cannot open debug\GettingStarted.exe for writing

我什至无法删除调试文件夹(即以管理员身份)。我必须注销然后再回来。有什么问题,我该如何解决?

c++ windows qt-creator qt5

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

播种default_random_engine?

我正在使用不支持的visual studio 2010 <chrono>,所以我必须播种default_random_engine.因此,我决定将其播种rand如下

srand((unsigned int)time(NULL));
std::default_random_engine engine(rand());
std::normal_distribution<double> randn(0.0, 0.3);
Run Code Online (Sandbox Code Playgroud)

而不是以下

unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine engine(seed);
std::normal_distribution<double> randn(0.0, 0.3);
Run Code Online (Sandbox Code Playgroud)

我得到了我期望为这两种方法获得的东西.我的问题是,我应该注意使用rand()吗?(注意:我别无选择<chrono>

random visual-studio-2010 c++11

4
推荐指数
2
解决办法
5960
查看次数

特征库分配矩阵的元素?

我在这里遇到了以下在Eigen Library中分配矩阵的问题

Matrix3f m;
m << 1, 2, 3,
     4, 5, 6,
     7, 8, 9;
Run Code Online (Sandbox Code Playgroud)

作为无聊(m(0,0) = 1;...等)的一种替代方式。我的问题是,使用第一种方法应注意哪些注意事项?因为我知道任何简化都是有代价的。

c++ matrix variable-assignment eigen

4
推荐指数
1
解决办法
4147
查看次数

odeint的runge_kutta4与Matlab的ode45的比较

我想runge_kutta4odeint C++库中使用方法.我在Matlab中解决了这个问题.在Matlab我以下代码来解决x'' = -x - g*x',具有初始值的x1 = 1,x2 = 0是如下

main.m

clear all
clc
t = 0:0.1:10;
x0 = [1; 0];
[t, x] = ode45('ODESolver', t, x0);
plot(t, x(:,1));
title('Position');
xlabel('time (sec)');
ylabel('x(t)');
Run Code Online (Sandbox Code Playgroud)

ODESolver.m

function dx = ODESolver(t, x)
dx = zeros(2,1);
g  = 0.15;
dx(1) =  x(2);
dx(2) = -x(1) - g*x(2);
end
Run Code Online (Sandbox Code Playgroud)

我已经安装了odeint库.我的使用代码runge_kutta4如下

#include <iostream>

#include <boost/numeric/odeint.hpp>

using namespace std;
using namespace boost::numeric::odeint;

/* The type …
Run Code Online (Sandbox Code Playgroud)

c++ matlab boost numerical-integration odeint

4
推荐指数
1
解决办法
3088
查看次数

为什么鼠标没有 GLFW_REPEAT?

具有用于按住鼠标按钮的此类功能似乎很自然,但此功能仅适用于按键事件。根据 glfw 文档:

#define GLFW_REPEAT 2

键被按住直到它重复。

但是按下和释放按钮,我们可以处理键盘和鼠标输入。

#define GLFW_PRESS 1

按键或鼠标按钮被按下。

#define GLFW_RELEASE 0

键或鼠标按钮被释放。

我想知道是否有解决此问题的方法。此外,为什么鼠标忽略此功能。

c++ glfw

4
推荐指数
1
解决办法
1548
查看次数

如何在一个setw中包含两个>>的调用?

拿这个最小的工作示例

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{

    cout    << setw(10) << "aaaaaaa"
            << setw(10) << "bbbb"
            << setw(10) << "ccc"
            << setw(10) << "ddd"
            << setw(10) << endl; 

    for(int i(0); i < 5; ++i){

        char ch = ' ';
        if ( i == 0 )
            ch = '%';
        cout << setw(10) << i
             << setw(10) << i << ch
             << setw(10) << i
             << setw(10) << i
             << setw(10) << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是 …

c++ io iomanip

4
推荐指数
2
解决办法
257
查看次数

system()的返回值不是执行程序的返回值

我想执行一个可执行文件,其main()返回2使用system().这就是我做的

#include <stdio.h>
#include <string.h>

int main(int argc, char *agrv[])
{
    char command[7];
    strcpy(command, "./test1");
    printf("The return value: %d\n", system(command));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且test1

#include <stdio.h>

int main(void)
{
    printf("test1 has been executed and its return value is 2\n");

    return 2;
}
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

test1 has been executed and its return value is 2
The return value: 512
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我得到了512.

c program-entry-point return

3
推荐指数
2
解决办法
2942
查看次数

为什么 Simulink 从非零值开始?

我正在为控制系统做一些模拟。我注意到开始时间不为零,即使在模拟参数中,开始时间设置为零。例如,在下图中,

在此处输入图片说明

在此处输入图片说明

信号的输出为

在此处输入图片说明

使用以下设置

在此处输入图片说明

我已经导入了数据,起始值是

a =
    1.0010    1.0010
    1.0020    1.0020
    1.0030    1.0030
    1.0040    1.0040
Run Code Online (Sandbox Code Playgroud)

如何重置开始时间以便模拟应该从零开始而不是从一开始?

matlab simulink

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