Simplify symbolic functions: remove terms
8 次查看(过去 30 天)
显示 更早的评论
Hi I want to simplify a symbolic function in this way:
this is my function:
a*b+dx*dy+dx^2*dy+a*dx+a+dy*dz+dt*da
I want that Matlab:
- Remove the terms in which there is a product between dx*dy, dy*dx, dt*da, dx^2*dy etc.
- Make two function: In the first there are all terms that are multiplied by dx, dy, dt and in the other, the other terms.
Thanks!
回答(2 个)
Hildo
2016-11-29
Do you want to remove a specific variable
You can use
new_equation = subs(equation,var,0);
new_equation2 = simplify(equation); % Maybe is not necessary simplify in this case
Of all the cross multiplication between variables?
0 个评论
Walter Roberson
2016-11-29
Note: for this purpose I exclude all squared terms such as dx^2, guessing that your rule was that multiplying two or more derivatives together was going to give a result too small to matter.
syms a b dx dy dz dt da
r = a*b+dx*dy+dx^2*dy+a*dx+a+dy*dz+dt*da;
[A,B] = coeffs(r,[dx,dy,dz,da,dt], 'all');
[tf, idx] = ismember([dx,dy,dz,da,dt],B);
just_constants = cellfun(@(C) isempty(symvar(C)), num2cell(B));
first_term = sum(A(idx(tf)) .* B(idx(tf)));
second_term = sum(A(just_constants) .* B(just_constants));
4 个评论
Walter Roberson
2016-11-29
I did test the code with the expression you gave.
My expression originally involved some positional computations, but in mentally reviewing, I think that you are correct that the 'all' is not actually necessary, but it should not hurt.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Neuroimaging 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!