2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Не работает Symbolic C++
Сообщение13.07.2011, 17:37 
Аватара пользователя


27/05/07
115
Хотел воспользоваться библиотекой http://issc.uj.ac.za/symbolic/symbolic.html
Ни один пример кода не компилируется. Пробовал Visual C++ 2010 sp1 и Intel C++ 12.0 Update 4

 Профиль  
                  
 
 Re: Не работает Symbolic C++
Сообщение13.07.2011, 18:10 
Заслуженный участник


04/05/09
4587
Конкретнее, плз.
Код, ошибки?

 Профиль  
                  
 
 Re: Не работает Symbolic C++
Сообщение13.07.2011, 23:48 
Аватара пользователя


27/05/07
115
Была попытка комплировать с помощью MSVS2010sp1 вот это например:
Код:
#include "stdafx.h"
#include "iostream"
#include "symbolicc++.h"

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
   Symbolic x("x");
   cout << integrate(x+1, x);     // => 1/2*x^(2)+x
   Symbolic y("y");
   cout << df(y, x);              // => 0
   cout << df(y[x], x);           // => df(y[x],x)
   cout << df(exp(cos(y[x])), x); // => -sin(y[x])*df(y[x],x)*e^cos(y[x])
   return 0;
}


Результат:

Код:
Предупреждение   1   warning C4800: int: принудительно задано логическое значение "true" или "false" (предупреждение о производительности)   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\equation.h   147
Предупреждение   2   warning C4390: ";": обнаружен пустой контролируемый оператор; это правильно?   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\sum.h   422
Предупреждение   3   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   61
Предупреждение   4   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   71
Предупреждение   5   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   81
Предупреждение   6   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   96
Предупреждение   7   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   115
Предупреждение   8   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   134
Предупреждение   9   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   146
Предупреждение   10   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   156
Предупреждение   11   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\integrate.h   166
Предупреждение   12   warning C4101: se: неиспользованная локальная переменная   c:\program files\microsoft visual studio 10.0\vc\include\symbolic\solve.h   74
Ошибка   13   error C2593: неоднозначный "operator ,"   C:\Program Files\Microsoft Visual Studio 10.0\VC\include\xlocmon   410


-- Ср июл 13, 2011 23:56:11 --

Интеловским компилятором пытался компилировать пример из архива с библиотекой:
Код:
// grass.cpp

#include <iostream>
#include "symbolicc++.h"
using namespace std;

int main(void)
{
   int i,j,n=4;
   Symbolic e("e",n);
   Symbolic y,result;
   Symbolic A("A",n,n);

   // non-commutative e0, e1, e2, ... , en
   e = ~e;

   cout << e << endl;

   A(0,0) = 1; A(0,1) = 2; A(0,2) = 5; A(0,3) = 2;
   A(1,0) = 0; A(1,1) = 1; A(1,2) = 2; A(1,3) = 3;
   A(2,0) = 1; A(2,1) = 0; A(2,2) = 1; A(2,3) = 0;
   A(3,0) = 0; A(3,1) = 3; A(3,2) = 0; A(3,3) = 7;

   result = 1;
   for(i=0;i<n;i++) result *= A.row(i)*e;

   cout << result << endl; cout << endl;

   Equations rules;

   // set e(i)*e(i) to 0
   for(i=0;i<n;i++) rules = (rules,e(i)*e(i) == 0);

   // for all i>j, set e(i)*e(j) to -e(j)*e(i)
   for(i=0;i<n;i++)
      for(j=0;j<i;j++)
         rules = (rules,e(i)*e(j) == -e(j)*e(i));

   result = result.subst_all(rules);
   cout << "result = " << result << endl;
   return 0;
}



Код:
1>------ Построение начато: проект: SymbolicC++1, Конфигурация: Release Win32 ------
1>Построение начато 14.07.2011 0:52:30.
1>InitializeBuildStatus:
1>  Обращение к "Release\SymbolicC++1.unsuccessfulbuild".
1>MessageBuildingWithCompiler:
1>  Building with Intel(R) C++ Compiler XE 12.0
1>ClCompile:
1>  ***** ClCompile (Win32 - Intel C++)
1>  1.cpp
1>Link:
1>  xilink: executing 'link'
1>MSVCRT.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup
1>d:\documents\visual studio 2010\SymbolicC++1\Release\SymbolicC++1.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
1>
1>СБОЙ построения.

 Профиль  
                  
 
 Re: Не работает Symbolic C++
Сообщение13.07.2011, 23:58 
Заслуженный участник


15/05/05
3445
USA
ArtemKim в сообщении #468028 писал(а):
Пробовал Visual C++ 2010 sp1 и Intel C++ 12.0 Update 4
В архиве SymbolicC++3-3.35-vc.zip есть solution (решение? не помню, как по-русски) SymbolicC++3.sln для VS2008. Оно нормально компилируется в VS2008.
А вот если SymbolicC++3.sln открыть в VS2010, то после конвертации оно уже не компилируется.
Ошибка "ambiguous operator ," во второй строке:
Код:
if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
    _Str2 += '-', ++_Off;

Но это - обычное дело при смене версии VS. Нужно пользоваться VS2008 или править код. Например, так:
Код:
if (_Str[0] < _E0 || _E0 + 9 < _Str[0])
   { _Str2 += '-'; ++_Off;}

 Профиль  
                  
 
 Re: Не работает Symbolic C++
Сообщение14.07.2011, 00:31 
Аватара пользователя


27/05/07
115
с первым - ясно
спасибо
а все остальные - там везде неразрешенный внешний символ _WinMain@16 - а где его искать в файлах не понятно

-- Чт июл 14, 2011 01:24:44 --

в msvs2008 не компилируется «hyperliapunov» из стандартных примеров

Код:
#include <iostream>
#include <cmath>
#include "symbolicc++.h"
using namespace std;

const int N = 10;

Symbolic u("u",N), ut("ut",N);

// The vector field V
template <class T> T V(const T& ss)
{   
  T sum(0);   
  for(int i=0;i<N;i++) sum += ut(i)*df(ss,u(i));   
  return sum;
}

int main(void)
{   
  int i, j;   
  Symbolic t("t"), us("",N);

  Equations values;
  double r1 = 1.0/4.0, r2 = 11.0/5.0, r3 = 1.0/20.0, r4 = 3.0/10.0;

  // hyperchaotic model   
  ut(0) = -u(1) - u(2);   
  ut(1) = u(0) + r1*u(1) + u(3);   
  ut(2) = r2 + u(0)*u(2);   
  ut(3) = r3*u(3) - 0.5*u(2);

  ut(4) = r1*u(4) + u(6) + u(7);
  ut(5) = u(0)*u(5) - u(7);
  ut(6) = r3*u(6) - 0.5*u(5) - u(8) - u(9);
  ut(7) = (r1 + u(0))*u(7) - u(2)*u(4) + u(5) - u(9);
  ut(8) = r4*u(8) + u(6) - 0.5*u(7);
  ut(9) = (u(0) + r3)*u(9) + u(2)*u(6);

  // Taylor series expansion up to order 2   
  for(i=0;i<N;i++)     
  us(i) = u(i) + t*V(u(i)) + 0.5*t*t*V(V(u(i)));   

  // Evolution of the approximate solution   
  // initial values
  values = (u(0) == -19.0, u(1) == 0.0, u(2) == 0.0,
            u(3) ==  15.0, u(4) == 1.0, u(5) == 1.0,
            u(6) ==   1.0, u(7) == 1.0, u(8) == 1.0,
            u(9) ==   1.0, t == 0.01);

  int iter = 20000;
  for(j=0;j<iter;j++)   
  {       
   Equations newvalues;
   newvalues = (newvalues, t == 0.01);

   for(i=0;i<N;i++)
    newvalues = (newvalues, u(i) == us(i)[values]);
   values = newvalues;
  } // end for loop j

  double T = double(rhs(values,t))*iter;
  double lambda =
    log(fabs(double(rhs(values,u(4))))
       +fabs(double(rhs(values,u(5))))
       +fabs(double(rhs(values,u(6))))
       +fabs(double(rhs(values,u(7))))
       +fabs(double(rhs(values,u(8))))
       +fabs(double(rhs(values,u(9)))))/T;
  cout << "lambda = " << lambda << endl;
  return 0;
}


Код:
1>------ Построение начато: проект: HyperLiapunov, Конфигурация: Release Win32 ------
1>Компиляция...
1>HyperLiapunov.cpp
1>Компоновка...
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator+=(class Symbolic &,class Symbolic const &)" (??Y@YA?AVSymbolic@@AAV0@ABV0@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Power::Power(class Symbolic const &,class Symbolic const &)" (??0Power@@QAE@ABVSymbolic@@0@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class std::list<class Equation,class std::allocator<class Equation> > __cdecl operator,(class Equation const &,class Equation const &)" (??Q@YA?AV?$list@VEquation@@V?$allocator@VEquation@@@std@@@std@@ABVEquation@@0@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class std::list<class Equation,class std::allocator<class Equation> > __cdecl operator,(class std::list<class Equation,class std::allocator<class Equation> > const &,class Equation const &)" (??Q@YA?AV?$list@VEquation@@V?$allocator@VEquation@@@std@@@std@@ABV01@ABVEquation@@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Equation __cdecl operator==(class Symbolic const &,class Symbolic const &)" (??8@YA?AVEquation@@ABVSymbolic@@0@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Equation __cdecl operator==(class Symbolic const &,double)" (??8@YA?AVEquation@@ABVSymbolic@@N@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::operator double(void)const " (??BSymbolic@@QBENXZ)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: class Symbolic & __thiscall Symbolic::operator()(int)" (??RSymbolic@@QAEAAV0@H@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: class Symbolic __thiscall Symbolic::operator[](class std::list<class Equation,class std::allocator<class Equation> > const &)const " (??ASymbolic@@QBE?AV0@ABV?$list@VEquation@@V?$allocator@VEquation@@@std@@@std@@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: virtual __thiscall Symbolic::~Symbolic(void)" (??1Symbolic@@UAE@XZ)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(class Symbolic const &)" (??0Symbolic@@QAE@ABV0@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(class CloningSymbolicInterface const &)" (??0Symbolic@@QAE@ABVCloningSymbolicInterface@@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(int const &)" (??0Symbolic@@QAE@ABH@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(char const *)" (??0Symbolic@@QAE@PBD@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(char const *,int)" (??0Symbolic@@QAE@PBDH@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator*(class Symbolic const &,class Symbolic const &)" (??D@YA?AVSymbolic@@ABV0@0@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator*(double const &,class Symbolic const &)" (??D@YA?AVSymbolic@@ABNABV0@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator+(class Symbolic const &,class Symbolic const &)" (??H@YA?AVSymbolic@@ABV0@0@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator+(double const &,class Symbolic const &)" (??H@YA?AVSymbolic@@ABNABV0@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator+(class Symbolic const &,double const &)" (??H@YA?AVSymbolic@@ABV0@ABN@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: class SymbolicProxy & __thiscall SymbolicProxy::operator=(class SymbolicProxy const &)" (??4SymbolicProxy@@QAEAAV0@ABV0@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic & __cdecl rhs(class std::list<class Equation,class std::allocator<class Equation> > &,class Symbolic const &)" (?rhs@@YAAAVSymbolic@@AAV?$list@VEquation@@V?$allocator@VEquation@@@std@@@std@@ABV1@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl df(class Symbolic const &,class Symbolic const &)" (?df@@YA?AVSymbolic@@ABV1@0@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: virtual __thiscall Equation::~Equation(void)" (??1Equation@@UAE@XZ)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Equation::Equation(class Equation const &)" (??0Equation@@QAE@ABV0@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator-(class Symbolic const &)" (??G@YA?AVSymbolic@@ABV0@@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator-(class Symbolic const &,class Symbolic const &)" (??G@YA?AVSymbolic@@ABV0@0@Z)"
1>HyperLiapunov.obj : error LNK2001: неразрешенный внешний символ ""public: virtual __thiscall Symbol::~Symbol(void)" (??1Symbol@@UAE@XZ)"
1>D:\Documents\Visual Studio 2008\HyperLiapunov\Release\HyperLiapunov.exe : fatal error LNK1120: 28 неразрешенных внешних элементов
1>Журнал построения был сохранен в "file://d:\Documents\Visual Studio 2008\HyperLiapunov\Release\BuildLog.htm"
1>HyperLiapunov - ошибок 29, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

 Профиль  
                  
 
 Re: Не работает Symbolic C++
Сообщение14.07.2011, 01:33 
Аватара пользователя


27/05/07
115
Код:
// bose.cpp

#include <iostream>
#include "symbolicc++.h"
using namespace std;

int C(int n, int r)
{
int num = 1, den = 1;
for(int i=n;i>r;i--) num *= i;
for(int j=2;j<=(n-r);j++) den *= j;
return num/den;
}

int main(void)
{
Symbolic b("b"), bd("b'");
b = ~b; bd = ~bd;

for(int m=0; m<5; m++)
{
  int fac = 1, j;
  Symbolic comm = (b^m)*(bd^m)-(bd^m)*(b^m);
  Symbolic res, res2;
  cout << m << ": " << comm << " = "
       << comm.subst_all(b*bd==1+bd*b) << endl;

  for(j=1; j<=m; j++)
  {
   fac *= j;
   res += df(bd^m,bd,j)*df(b^m,b,j)/fac;
   res2 += fac*C(m,j)*C(m,j)*(bd^(m-j))*(b^(m-j));
  }
  cout << "   " << comm << " = " << res << endl;
  cout << "   " << comm << " = " << res2 << endl;
}
return 0;
}


Код:
1>------ Построение начато: проект: Bose, Конфигурация: Release Win32 ------
1>Компиляция...
1>Bose.cpp
1>stdafx.cpp
1>Компоновка...
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator+=(class Symbolic &,class Symbolic const &)" (??Y@YA?AVSymbolic@@AAV0@ABV0@@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Power::Power(class Symbolic const &,class Symbolic const &)" (??0Power@@QAE@ABVSymbolic@@0@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Equation __cdecl operator==(class Symbolic const &,class Symbolic const &)" (??8@YA?AVEquation@@ABVSymbolic@@0@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator/(class Symbolic const &,int const &)" (??K@YA?AVSymbolic@@ABV0@ABH@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: class Symbolic __thiscall Symbolic::operator~(void)const " (??SSymbolic@@QBE?AV0@XZ)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: class Symbolic __thiscall Symbolic::subst_all(class Equation const &,int &)const " (?subst_all@Symbolic@@QBE?AV1@ABVEquation@@AAH@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: virtual __thiscall Symbolic::~Symbolic(void)" (??1Symbolic@@UAE@XZ)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(void)" (??0Symbolic@@QAE@XZ)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(class CloningSymbolicInterface const &)" (??0Symbolic@@QAE@ABVCloningSymbolicInterface@@@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(int const &)" (??0Symbolic@@QAE@ABH@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: __thiscall Symbolic::Symbolic(char const *)" (??0Symbolic@@QAE@PBD@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Symbolic const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABVSymbolic@@@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator*(class Symbolic const &,class Symbolic const &)" (??D@YA?AVSymbolic@@ABV0@0@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator*(int const &,class Symbolic const &)" (??D@YA?AVSymbolic@@ABHABV0@@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator+(int const &,class Symbolic const &)" (??H@YA?AVSymbolic@@ABHABV0@@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: class SymbolicProxy & __thiscall SymbolicProxy::operator=(class SymbolicProxy const &)" (??4SymbolicProxy@@QAEAAV0@ABV0@@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator^(class Symbolic const &,int)" (??T@YA?AVSymbolic@@ABV0@H@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl df(class Symbolic const &,class Symbolic const &,unsigned int)" (?df@@YA?AVSymbolic@@ABV1@0I@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: virtual __thiscall Equation::~Equation(void)" (??1Equation@@UAE@XZ)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""class Symbolic __cdecl operator-(class Symbolic const &,class Symbolic const &)" (??G@YA?AVSymbolic@@ABV0@0@Z)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: static int Symbolic::subst_count" (?subst_count@Symbolic@@2HA)"
1>Bose.obj : error LNK2001: неразрешенный внешний символ ""public: virtual __thiscall Symbol::~Symbol(void)" (??1Symbol@@UAE@XZ)"
1>D:\Documents\Visual Studio 2008\Bose\Release\Bose.exe : fatal error LNK1120: 22 неразрешенных внешних элементов
1>Журнал построения был сохранен в "file://d:\Documents\Visual Studio 2008\Bose\Release\BuildLog.htm"
1>Bose - ошибок 23, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


-- Чт июл 14, 2011 01:35:06 --

Вобщем... Под какой стандарт и компилятор авторы это писали не пойму

 Профиль  
                  
 
 Re: Не работает Symbolic C++
Сообщение15.07.2011, 20:05 
Аватара пользователя


27/05/07
115
Вообще авторы молодцы. Можете качать библиотеку и пользоваться бесплатно. А если хотите документацию почитать, то заплатите несколько тысяч рублей :D

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group