Ошибка при использовании Eigen: «несовпадающие типы» при умножении скалярных векторов.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Ошибка при использовании Eigen: «несовпадающие типы» при умножении скалярных векторов.

Сообщение Гость »

Я пытаюсь выполнить следующую операцию из 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»