Я пытаюсь выполнить следующую операцию из MATLAB, используя собственные матрицы в C++.
Приведен пример в MATLAB:
clearvars; clc; close all;
Nx = 8;
Ny = 8;
Lx=2*pi;
dx = Lx/Nx;
Vec = fftshift(-Nx/2:Nx/2-1);
Vector1 = (sin( Vec * dx/2)/(dx/2)).^2 ;
[Matrix2,x] = cheb(Ny);
for m = 1:length(Vec)
Matrix1 = -1 * (Vector1(m))+ Matrix2;
end
Функция Cheb в MATLAB:
function [ D, x ] = cheb ( N )
if ( N == 0 )
D = 0.0;
x = 1.0;
return
end
x = cos ( pi * ( 0 : N ) / N )';
c = [ 2.0; ones(N-1,1); 2.0 ] .* (-1.0).^(0:N)';
X = repmat ( x, 1, N + 1 );
dX = X - X';
% Set the off diagonal entries.
D =( c * (1.0 ./ c )' ) ./ ( dX + ( eye ( N + 1 ) ) );
D = D - diag ( sum ( D' ) );
return
end
Где Matrix1 и Matrix2 имеют одинаковый размер (Ny+1 на Ny+1) и являются квадратными матрицами, а Vector1 представляет собой вектор-строка размером 1 на Nx, так же как и Vec — это вектор-строка размером 1 на Nx.
Теперь в Eigen я обычно просто не могу выполните вышеуказанную операцию, например:
Собственный код:
static const int nx = 8;
static const int ny = 8;
Eigen::MatrixXcd Matrix1((ny+1),(ny+1));
Matrix1.setZero();
Eigen::MatrixXd Matrix2((ny+1),(ny+1));
Matrix2.setZero();
Eigen::MatrixXd Vec((1),nx);
Vec.setZero();
Eigen::MatrixXd Vector1((1),nx);
Vector1.setZero();
for (int l = 0; l < (Vec.size()-1); l++){
Matrix1 = -1. * Vector1(l)+ Matrix2;//error here
}
Раньше мне удавалось инициализировать Vector1 как «матрицу», а затем использовать что-то вроде Vector1.asDigona(), но я не думаю, что это работает здесь. Есть ли более простой способ умножить на -1?
Полная ошибка:
error: no match for ‘operator+’ (operand types are ‘Eigen::DenseCoeffsBase::Scalar’ {aka ‘double’} and ‘Eigen::MatrixXd’ {aka ‘Eigen::Matrix’})
Подробнее здесь: https://stackoverflow.com/questions/787 ... iplication
Ошибка при использовании Eigen: «несовпадающие типы» при умножении скалярных векторов. ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Операция eigen::vector3d или eigen::matrix3d, приводящая к случайному результату nan или -nan
Anonymous » » в форуме C++ - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Операция eigen::vector3d или eigen::matrix3d, приводящая к случайному результату nan или -nan
Anonymous » » в форуме C++ - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-