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