所以我试图在表达式中选择线性项 - 例如,如果我说
eqn = dy / dt + y == y ^ 2
,dy / dt + y是线性的,y ^ 2是非线性的。
我知道在这种情况下我可以使用 eqn [[1]]拉出lhs并将其作为我的线性项,但是有一些方法我可以使用字符串模式或其他东西来获得任何输入方程的线性部分吗?
答案 0 :(得分:0)
这是我提出的一些快速解决方案。您可能需要为此目的更改此设置,但也许这是可能的。首先,术语转换为字符串。然后搜索“+”或“ - ”并分开。测试各个术语的线性度。
terms = y + y^2 - Sqrt[y];
string = ToString[terms, InputForm];
split = StringSplit[string, {"+", "-"}];
Do[
(*Take term i and convert the string to an expression*)
exp = ToExpression[split[[i]]];
Print[exp];
(*Test for Additivity: f(x+y)= f(x)+f(y)*)
pexp = exp /. {y -> y + c};(*f(x+y)*)
cexp = exp /. {y -> c};(*f(y)*)
test1 = pexp - (exp + cexp) // Simplify;(*f(x+y)-(f(x)+f(y))*)
(*Test for Homogeneity: f(a*x) = a*f(x)*)
aexp = exp /. {y -> a*y};(*f(a*x)*)
test2 = a*exp - aexp // Simplify;(*a*f(x)-f(a*x)*)
If[test1 == 0 && test2 == 0,
Print["linear"]]
, {i, 1, Length[split]}]