| | | |

Minicurso de C++ para Matemática

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

4.4 Operações elemento-a-elemento

Operações aritméticas elemento-a-elemento podem ser feitas com objetos da classe Eigen::Array (Eigen::ArrayXd e Eigen::ArrayXXd, por exemplo). Para matrizes é necessário usar o método array() para converter a matriz em um objeto do tipo Eigen::Array. Estudemos o seguinte código.

Código 21: ExOpElem.cpp
1#include <iostream>
2#include <cmath>
3#include <eigen3/Eigen/Eigen>
4
5int main()
6{
7 // mult. elemento-a-elemento
8 Eigen::ArrayXd arr {{1,2,3}};
9 Eigen::VectorXd vec {{4,5,6}};
10
11 std::cout << "arr * vec.array() =\n"
12 << arr * vec.array() << std::endl;
13
14 // divisão elemento-a-elemento
15 Eigen::MatrixXd a {{3, 6}, {12, 21}};
16 Eigen::MatrixXd b {{3, 2}, {2, 7}};
17
18 std::cout << "a.array() * b.array() =\n"
19 << a.array() / b.array() << std::endl;
20
21 // funções elementares
22 arr.resize(5);
23 arr << 0.0 , M_PI/3, M_PI_4,
24 M_PI/3, M_PI_2;
25 std::cout << "sin(arr) =\n"
26 << arr.sin() << std::endl;
27
28 std::cout << "b**2 =\n"
29 << b.array().pow(2) << std::endl;
30
31 return 0;
32}
arr * vec.array() =
4
10
18
a.array() * b.array() =
1 3
6 3
sin(arr) =
0
0.866025
0.707107
0.866025
1
b**2 =
9 4
4 49
Observação 4.4.1.(Mais sobre operações elemento-a-elemento)

Consulte mais sobre operações elemento-a-elemento em Eigen::The Array class and coefficient-wise operations.

E. 4.4.1.

Faça um código para computar os valores da função cosseno aplicada ao vetor

𝜽=(0,30,45,60,90). (4.12)

1#include <iostream>
2#include <cmath>
3#include <eigen3/Eigen/Eigen>
4
5int main()
6{
7 Eigen::VectorXd theta {{0.0,
8 M_PI/6,
9 M_PI/4,
10 M_PI/3,
11 M_PI/2}};
12 std::cout << "cos(theta) = " << std::endl
13 << theta.array().cos() << std::endl;
14
15 return 0;
16}
E. 4.4.2.

Considere que os seguintes objetos estão declarados declarados:

1Eigen::ArrayXd arr {{1,2,3}};
2Eigen::VectorXd vec {{4,5,6}};
3Eigen::MatrixXd a {{3, 6, 4},
4 {2, 5, 3}};

Antes de implementar para verificar, forneça o resultado, quando definido, de cada uma das seguintes operações:

  1. a)

    arr - vec.array();

  2. b)

    a.array() * vec;

  3. c)

    a * vec;

  4. d)

    a.row(0).array() * arr;

  5. e)

    a.col(1) * vec;

  6. f)

    a.col(1).array() * arr;


a) (3,3,3); b) não definido; c) (66,51); d) não definido.; e) 51; f) não definido.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |