gpt4 book ai didi

c++ - C++ 中的特征库给出错误 C2660 : 'Eigen::MatrixBase::eigenvalues' : function does not take 2 arguments

转载 作者:太空宇宙 更新时间:2023-11-04 11:42:44 25 4
gpt4 key购买 nike

#include <iostream>
#include <math.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <dense>
#include <Eigenvalues>

using namespace Eigen;
using namespace std;

void main()
{
int i, j;
float S = 2.5, g = 1, B = 1, H = 1, D = 1, E = 1, G, Sz1, Sz2, Sz3, Sz4, Kp, Kpp, Km, Kmm, E1, E2;

Sz1 = -S;
Sz2 = -S;
G = g * B * H;
G = 1;

MatrixXf Ham(6, 6);

for (i = 1; i <= 2 * S + 1; i++)
{
Sz2 = -S;
for (j = 1; j <= 2 * S + 1; j++)
{
E1 = 0;
Kp = 0;
E2 = 0;
Kpp = 0;
Km = 0;
Kmm = 0;

Sz3 = Sz2;
Sz4 = Sz2;

if (i == j)
{
Ham(i, j) = (G * Sz2) + D * (Sz2 * Sz2 - (1 / 3) * S * (S + 1));
}
else
{
Kp = sqrt(S * (S + 1) - Sz3 * (Sz3 + 1));
Sz3 = Sz3 + 1;
Kpp = sqrt(S * (S + 1) - Sz3 * (Sz3 + 1));
Sz3 = Sz3 + 1;

if (Sz3 == Sz1)
{
E1 = Kp * Kpp;
}
else
{
E1 = 0;
}

Km = sqrt(S * (S + 1) - Sz4 * (Sz4 - 1));
Sz4 = Sz4 - 1;
Kmm = sqrt(S * (S + 1) - Sz4 * (Sz4 - 1));
Sz4 = Sz4 - 1;

if (Sz4 == Sz1)
{
E2 = Km * Kmm;
}
else
{
E2 = 0;
}
Ham(i, j) = (E1 + E2) / 2;
}
Sz2 = Sz2 + 1;
}
Sz1 = Sz1 + 1;
}

VectorXf eivals = Ham.eigenvalues(6, 6);
cout << "The eigenvalues of the Hamiltonian matrix are:" << endl << eivals << endl;

system("pause");
}

当我想编译这段代码时,我得到一个错误:

error C2660: 'Eigen::MatrixBase<Derived>::eigenvalues' : function does not take 2 arguments with

Derived = Eigen::Matrix<float, -1, -1>

谁能帮我解决这个问题?

最佳答案

下面的代码在 Ubuntu/Linaro 下使用 g++ 4.7.3 编译并运行 libeigen3-dev 包。

代码中的问题:

  1. 不要给出特征值的参数
  2. 不是索引范围 1...size,而是 0...size-1(我通过将 Ham(i,j) 替换为 Ham(i-1,j- 1)
  3. 特征值的返回类型是 VectorXcf 而不是 VectorXf

#include <iostream>
#include <math.h>
// #include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/Eigenvalues>

using namespace Eigen;
using namespace std;

int main()
{
int i, j;
float S = 2.5, g = 1, B = 1, H = 1, D = 1, E = 1, G, Sz1, Sz2, Sz3, Sz4, Kp, Kpp, Km, Kmm, E1, E2;

Sz1 = -S;
Sz2 = -S;
G = g * B * H;
G = 1;

MatrixXf Ham(6, 6);

for (i = 1; i <= 2 * S + 1; i++)
{
Sz2 = -S;
for (j = 1; j <= 2 * S + 1; j++)
{
E1 = 0;
Kp = 0;
E2 = 0;
Kpp = 0;
Km = 0;
Kmm = 0;

Sz3 = Sz2;
Sz4 = Sz2;

if (i == j)
{
Ham(i-1, j-1) = (G * Sz2) + D * (Sz2 * Sz2 - (1 / 3) * S * (S + 1));
}
else
{
Kp = sqrt(S * (S + 1) - Sz3 * (Sz3 + 1));
Sz3 = Sz3 + 1;
Kpp = sqrt(S * (S + 1) - Sz3 * (Sz3 + 1));
Sz3 = Sz3 + 1;

if (Sz3 == Sz1)
{
E1 = Kp * Kpp;
}
else
{
E1 = 0;
}

Km = sqrt(S * (S + 1) - Sz4 * (Sz4 - 1));
Sz4 = Sz4 - 1;
Kmm = sqrt(S * (S + 1) - Sz4 * (Sz4 - 1));
Sz4 = Sz4 - 1;

if (Sz4 == Sz1)
{
E2 = Km * Kmm;
}
else
{
E2 = 0;
}
Ham(i-1, j-1) = (E1 + E2) / 2;
}
Sz2 = Sz2 + 1;
}
Sz1 = Sz1 + 1;
}

VectorXcf eivals = Ham.eigenvalues();

cout << "The eigenvalues of the Hamiltonian matrix are:" << endl << eivals << endl;



system("pause");
}

关于c++ - C++ 中的特征库给出错误 C2660 : 'Eigen::MatrixBase<Derived>::eigenvalues' : function does not take 2 arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791387/

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