Zitat von Alexei Sheplyakov <varg@metalica.kh.ua>:
Hi,
On Wed, Jun 03, 2009 at 01:17:59PM +0200, Lisa Maletzki wrote:
But the problem I have is, that I do not know how big my matrix will be. In the smallest case it is a 18x18 matrix, so getting all those symbols would be rather complicated, or am I just thinking that?
You might want to use something like this:
void generate_symbols(vector<symbol>& vars, const string& pattern) { for (unsigned i = 0; i < vars.size(); ++i) { std::ostringstream ostr; ostr << pattern << i; symbol tmp(ostr.str()); vars[i] = tmp; } }
unsigned n = 18; vector<symbol> vars(n); generate_symbols(vars, "x"); // populates vars with symbols "x0", "x1", etc. matrix A(n, n); // your code to fill it in matrix b(n, 1); // your code fill it in
matrix x(n, 1); for (unsigned i = 0; i < n; ++i) x(i, 1) = xv[i];
matrix result = A.solve(x, b);
Also, be forewarned: using GiNaC for numerical computations (including solving linear systems with coefficients being floating-point numbers) incurs substantial overhead, so you'd better use some linear algebra software, such as GSL, ATLAS, etc.
Best regards, Alexei
Thanks again, I think that will do the trick but when compiling it I get a linker error which I cannot solve (I'm fairly new to c++) I can't say if it is just missing a library of if I wrote something in the code wrong. This is the output: g++ -Xlinker `pkg-config --cflags --libs ginac` -o"sep" ./src/bezierPoints.o ./src/testmain.o ./src/xml.o ./src/xmlParser.o ./src/bezierPoints.o: In function `bezierPoints::solve(GiNaC::matrix, int)': /my_folder/Debug/../src/bezierPoints.cpp:63: undefined reference to `bezierPoints::generate_symbols(std::vector<GiNaC::symbol, std::allocator<GiNaC::symbol> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' The method is declared in the header file and called with the write name in the source file, so typing error can be ruled out. Any help? Kind regards, Lisa