Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

negate the value of a symbolic expression. #1938

Open
prusso630 opened this issue Nov 2, 2022 · 3 comments
Open

negate the value of a symbolic expression. #1938

prusso630 opened this issue Nov 2, 2022 · 3 comments

Comments

@prusso630
Copy link

prusso630 commented Nov 2, 2022

I have translated an equation from my book Analysis of Engineering Structures and Material Behavior:

        //#include "catch.hpp"
        #include <symengine/basic.h>
        #include <symengine/visitor.h>
       #include <symengine/eval_double.h>
       #include <symengine/derivative.h>
       #include <symengine/symengine_exception.h>
       #include <cstring>

    using namespace std;

    using SymEngine::Add;
    using SymEngine::atoms;
    using SymEngine::Basic;
    using SymEngine::coeff;
    using SymEngine::Complex;
    using SymEngine::complex_double;
    using SymEngine::ComplexInf;
    using SymEngine::diff;
    using SymEngine::down_cast;
    using SymEngine::EulerGamma;
    using SymEngine::free_symbols;
    using SymEngine::function_symbol;
    using SymEngine::FunctionSymbol;
    using SymEngine::has_symbol;
    using SymEngine::I;
    using SymEngine::Integer;
    using SymEngine::integer;
    using SymEngine::is_a;
    using SymEngine::make_rcp;
    using SymEngine::map_basic_basic;
    using SymEngine::map_basic_num;
    using SymEngine::map_int_Expr;
    using SymEngine::map_uint_mpz;
    using SymEngine::Mul;
    using SymEngine::multiset_basic;
    using SymEngine::Nan;
    using SymEngine::NotImplementedError;
    using SymEngine::Number;
    using SymEngine::one;
    using SymEngine::pi;
    using SymEngine::pow;
    using SymEngine::print_stack_on_segfault;
    using SymEngine::Rational;
    using SymEngine::rational_class;
    using SymEngine::RCP;
    using SymEngine::rcp_static_cast;
    using SymEngine::real_double;
    using SymEngine::sdiff;
    using SymEngine::set_basic;
    using SymEngine::Symbol;
    using SymEngine::symbol;
    using SymEngine::tribool;
    using SymEngine::umap_basic_basic;
    using SymEngine::umap_basic_num;
    using SymEngine::unified_compare;
    using SymEngine::vec_basic;
    using SymEngine::zero;

    using SymEngine::DenseMatrix;
    using SymEngine::Expression;

    vector<vec_basic> nodes;

    using namespace std;
	
    int main(int argc, char** argv) {
	
    vec_basic i;
    i.push_back(real_double(1.0));
    i.push_back(real_double(1.0));
    vec_basic j;
    j.push_back(real_double(2.0));
    j.push_back(real_double(2.0));

    vec_basic condensed;
    condensed.push_back(i.at(0));
    condensed.push_back(j.at(0));

    DenseMatrix matrix_global_uv = DenseMatrix(1,1,condensed);

    Expression phi("phi");

    auto m1 = cos(phi);
    auto m2 = sin(phi);
    auto m3 = sin(phi);
    auto m4 = cos(phi);

    DenseMatrix matrix_translate_local = DenseMatrix(2,2,{m1,m2,m3,m4});

    DenseMatrix matrix_result;

    matrix_translate_local.mul_matrix(matrix_global_uv, matrix_result);    

    cout << "Print values of matrix_result here and check them..." << std::endl;
    cout << "Done..." << std::endl;
    
    return 0;
}

Things are supposed to be:
auto m3 = -sin(phi);
or the negated value of -sin(phi). Somehow using the minus operator doesn't seem to work and I get an error about a missing minus operator. Is there a way maybe to accomplish the same thing some other way that the symbolic engine can interpret a negation?

@isuruf
Copy link
Member

isuruf commented Nov 2, 2022

Try auto m3 = -m2 or auto m3 = -Expression(sin(phi));

@prusso630
Copy link
Author

prusso630 commented Nov 2, 2022

I got this one to go in after clearing my cache.

auto m3 = -Expression(sin(phi));

@isuruf
Copy link
Member

isuruf commented Nov 2, 2022

Try

Expression phi("phi");
Expression m1 = cos(phi);
Expression m2 = sin(phi);
Expression m3 = -m2;
Expression m4 = -m3;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants