| | | |

Minicurso de C++ para Matemática

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

4.6 Reduções

Reduções são operações que transformam uma matriz ou um arranjo em um escalar.

  • sum()

    1Eigen::MatrixXd a {{1,2,3},
    2 {4,5,6}};
    3double s = a.sum();
    4std::cout << "s = " << s << std::endl;
    s = 21
  • prod()

    1double p = a.prod();
    2std::cout << "p = " << p << std::endl;
    p = 720
  • mean()

    1double m = a.mean();
    2std::cout << "m = " << m << std::endl;
    m = 3.5
  • minCoeff()/maxCoeff()

    1double min = a.minCoeff();
    2std::cout << "min = " << min << std::endl;
    3double max = a.maxCoeff();
    4std::cout << "max = " << max << std::endl;
    min = 1
    max = 6
  • trace()

    1Eigen::MatrixXd b {{1,3},
    2 {4,6}};
    3
    4double tr = b.trace();
    5std::cout << "tr = " << tr << std::endl;
    tr = 7
  • norm()

    1Eigen::VectorXd v {{1,2,3}};
    2Eigen::MatrixXd m {{1,2},
    3 {3,4}};
    4// norma l2
    5double v_norm = v.norm();
    6std::cout << "v_norm = " << v_norm << std::endl;
    7// norma L2 (Frobenius)
    8double m_norm = m.norm();
    9std::cout << "m_norm = " << m_norm << std::endl;
    n = 3.74166
    m_norm = 5.47723
E. 4.6.1.

Faça um código que aloque os seguintes vetores

u=(1,2,3), (4.16)
v=(4,5,6), (4.17)

e compute a o produto interno (ou escalar) uv. Verifique seu resultado com o método u.dot(v) da Eigen.


1#include <iostream>
2#include <eigen3/Eigen/Eigen>
3
4int main()
5{
6 Eigen::VectorXd u {{1,2,3}};
7 Eigen::VectorXd v {{4,5,6}};
8
9 Eigen::VectorXd w(u.size());
10 w << u.array() * v.array();
11 std::cout << "u.v = " << w.sum() << std::endl;
12 std::cout << "u.dot(v) = " << u.dot(v) << std::endl;
13
14 return 0;
15}
E. 4.6.2.

Implemente uma função para computar o erro médio quadrático entre dois vetores u e v de mesmo tamanho. O erro médio quadrático é dado por

EMQ=1ni=1n(uivi)2. (4.18)

1double EMQ(const Eigen::VectorXd& u, const Eigen::VectorXd& v)
2{
3 return ((u - v).array().pow(2)).sum() / u.size();
4}

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
| | | |