如何分裂一个函数根据他们的变量?
15次浏览(过去30天)
显示旧的注释
接受的答案
为副总经理
2021年9月30日
编辑:为副总经理
2021年9月30日
也许有更好的方法,但我从来没有用过象征性的东西。我就把这个说出来。在本例的范围内,为了清晰起见,我重命名了这些函数。
信谊X1 x2 y1 y2
Fparent (x1,x2,y1,y2) = 10*x1 + 20*x2 + 10*y1 + 10*y2 + log(x1) + 1/x1 + 1/y1;
C = cell2sym(children(fparent))
f_x1(x1) = sum(C(has(C,x1)))
f_x2(x2) = sum(C(has(C,x2)))
f_y (y) = sum(C(有(C,y)))
f_y2(y2) = sum(C(有(C,y2)))
如果您使用的是R2020b以上的版本,则必须删除cell2sym()调用。
注意,这一切都假定表达式是一个简单的和(因此使用sum()来重建子表达式)。如果函数表达式是这样的会发生什么?
fparent (x1, x2, y1, y2) = exp (x1 * sin(日志(x2))) / (y1 * x1 + (y2)每股);
更多答案(1)
沃尔特·罗伯森
2021年9月30日
信谊X1 x2 y1 y2
F (x1,x2,y1,y2) = 10*x1 + 20*x2 + 10*y1 + 10*y2 + log(x1) + 1/x1 + 1/y1;
fx1 = mapSymType(f,“+”, @(X) select (X, x1))
fx2 = mapSymType(f,“+”, @(X) select (X, x2))
fy1 = mapSymType(f,“+”, @(X) select (X, y1))
fy2 = mapSymType(f,“+”, @(X) select (X, y2))
函数select = SelectPlus(表达式,var)
ch = children(表达式);
selected_ch = ch(cellfun(@(X) ismember(var, symvar(X)), ch));
select = sum([selected_ch{:}]);
如果isempty(选择);select = sym(0);结束
结束