use crate::core::{Expression, Symbol};
pub fn integrate_tan_sec_power(m: i64, n: i64, var: Symbol) -> Option<Expression> {
let x = Expression::symbol(var);
if m == 0 && n == 2 {
return Some(Expression::function("tan", vec![x]));
}
if m == 1 && n == 1 {
return Some(Expression::function("sec", vec![x]));
}
if m == 2 && n == 0 {
return Some(Expression::add(vec![
Expression::function("tan", vec![x.clone()]),
Expression::mul(vec![Expression::integer(-1), x]),
]));
}
if m == 3 && n == 2 {
return Some(Expression::mul(vec![
Expression::rational(1, 4),
Expression::pow(Expression::function("tan", vec![x]), Expression::integer(4)),
]));
}
None
}
pub fn integrate_cot_csc_power(m: i64, n: i64, var: Symbol) -> Option<Expression> {
let x = Expression::symbol(var);
if m == 0 && n == 2 {
return Some(Expression::mul(vec![
Expression::integer(-1),
Expression::function("cot", vec![x]),
]));
}
if m == 1 && n == 1 {
return Some(Expression::mul(vec![
Expression::integer(-1),
Expression::function("csc", vec![x]),
]));
}
if m == 2 && n == 0 {
return Some(Expression::add(vec![
Expression::mul(vec![
Expression::integer(-1),
Expression::function("cot", vec![x.clone()]),
]),
Expression::mul(vec![Expression::integer(-1), x]),
]));
}
None
}
pub fn integrate_tan_power(power: i64, var: Symbol) -> Option<Expression> {
let x = Expression::symbol(var);
if power == 1 {
return Some(Expression::mul(vec![
Expression::integer(-1),
Expression::function("ln", vec![Expression::function("cos", vec![x])]),
]));
}
if power == 2 {
return Some(Expression::add(vec![
Expression::function("tan", vec![x.clone()]),
Expression::mul(vec![Expression::integer(-1), x]),
]));
}
None
}
pub fn integrate_cot_power(power: i64, var: Symbol) -> Option<Expression> {
let x = Expression::symbol(var);
if power == 1 {
return Some(Expression::function(
"ln",
vec![Expression::function("sin", vec![x])],
));
}
if power == 2 {
return Some(Expression::add(vec![
Expression::mul(vec![
Expression::integer(-1),
Expression::function("cot", vec![x.clone()]),
]),
Expression::mul(vec![Expression::integer(-1), x]),
]));
}
None
}
pub fn integrate_sec_power(power: i64, var: Symbol) -> Option<Expression> {
let x = Expression::symbol(var);
if power == 1 {
return Some(Expression::function(
"ln",
vec![Expression::add(vec![
Expression::function("sec", vec![x.clone()]),
Expression::function("tan", vec![x]),
])],
));
}
if power == 2 {
return Some(Expression::function("tan", vec![x]));
}
None
}
pub fn integrate_csc_power(power: i64, var: Symbol) -> Option<Expression> {
let x = Expression::symbol(var);
if power == 1 {
return Some(Expression::mul(vec![
Expression::integer(-1),
Expression::function(
"ln",
vec![Expression::add(vec![
Expression::function("csc", vec![x.clone()]),
Expression::function("cot", vec![x]),
])],
),
]));
}
if power == 2 {
return Some(Expression::mul(vec![
Expression::integer(-1),
Expression::function("cot", vec![x]),
]));
}
None
}