<!DOCTYPE html>
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi,</p>
    <p>I want to use ginac to evaluate some complex expressions that
      evolve some vector algebra. However, have some trouble working
      with the matrix class. I have 2 questions:</p>
    <p>    1: Am I correct, that if i want to compute the Subtraction of
      two vectors I should use the indexed variant?</p>
    <p>    2: How do I access elements of an expression?<br>
    </p>
    <p>I have included a small file that illustrates my problem?</p>
    <p><br>
    </p>
    <p>Kind regards,</p>
    <p>Spooky<br>
    </p>
    <div style="background-color:#1e1f22;color:#bcbec4">
      <pre
      style="font-family:'JetBrains Mono',monospace;font-size:15.0pt;"><span
      style="color:#b3ae60;">#include </span><span
      style="color:#6aab73;"><ginac/ginac.h>
</span><span style="color:#b3ae60;">#include </span><span
      style="color:#6aab73;"><iostream>
</span><span style="color:#cf8e6d;">int </span><span
      style="color:#56a8f5;">main</span>(<span style="color:#cf8e6d;">int </span>argc, <span
      style="color:#cf8e6d;">char </span>**argv) {
    <span style="color:#cf8e6d;">using namespace </span><span
      style="color:#b5b6e3;">GiNaC</span>;
    <span style="color:#b5b6e3;">idx </span>d(symbol(<span
      style="color:#6aab73;">"d"</span>), <span style="color:#2aacb8;">3</span>);

    <span style="color:#b5b6e3;">matrix </span>m0 = matrix(<span
      style="font-weight:bold;">{</span>{<span style="color:#2aacb8;">0</span>, <span
      style="color:#2aacb8;">0</span>, <span style="color:#2aacb8;">0</span>}<span
      style="font-weight:bold;">}</span>), m1 = matrix(<span
      style="font-weight:bold;">{</span>{<span style="color:#2aacb8;">1</span>, <span
      style="color:#2aacb8;">0</span>, <span style="color:#2aacb8;">0</span>}<span
      style="font-weight:bold;">}</span>);
    <span style="color:#b5b6e3;">indexed </span>v0 = indexed(m0,d), v1 = indexed(m1,d);

    <span style="color:#7a7e85;">// This seems wrong:
</span><span style="color:#7a7e85;">    </span><span
      style="color:#b5b6e3;">std</span>::cout <span
      style="color:#5f8c8a;"><< </span>(m1<span
      style="color:#5f8c8a;">-</span>m0).eval() <span
      style="color:#5f8c8a;"><< </span><span
      style="color:#b5b6e3;">std</span>::endl;
    <span style="color:#7a7e85;">// ->  [[1,0,0]]-[[0,0,0]]
</span><span style="color:#7a7e85;">
</span><span style="color:#7a7e85;">    // This seems right:
</span><span style="color:#7a7e85;">    </span><span
      style="color:#b5b6e3;">std</span>::cout <span
      style="color:#5f8c8a;"><< </span>(v1<span
      style="color:#5f8c8a;">-</span>v0).simplify_indexed()<span
      style="color:#5f8c8a;"><< </span><span
      style="color:#b5b6e3;">std</span>::endl;
    <span style="color:#7a7e85;">// ->  [[1,0,0]].d
</span><span style="color:#7a7e85;">
</span><span style="color:#7a7e85;">    // I can normally access matrix element using
</span><span style="color:#7a7e85;">    </span><span
      style="color:#b5b6e3;">std</span>::cout <span
      style="color:#5f8c8a;"><< </span>m1<span
      style="color:#5f8c8a;">(</span><span style="color:#2aacb8;">0</span>,<span
      style="color:#2aacb8;">0</span><span style="color:#5f8c8a;">) << </span><span
      style="color:#b5b6e3;">std</span>::endl;
    <span style="color:#7a7e85;">// -> 0
</span><span style="color:#7a7e85;">
</span><span style="color:#7a7e85;">    // But how can I access matrix elements of an expression?
</span><span style="color:#7a7e85;">    // does not compile:
</span><span style="color:#7a7e85;">    // std::cout << "(v1-v0)(0,0): " << (v1-v0)(0,0) << std::end;
</span><span style="color:#7a7e85;">    </span><span
      style="color:#cf8e6d;">return </span><span style="color:#2aacb8;">0</span>;
}
</pre>
    </div>
    <p></p>
  </body>
</html>