如何分裂一个函数根据他们的变量?

15次浏览(过去30天)
你好。我要根据变量来拆分函数。
例如
F (x1,x2,y,y2) = 10*x1 + 20*x2 + 10*y1 + 10*y2;
我想像这样分开。
F (x1) = 10*x1;
F (x2) = 20*x2;
F (y1) = 10*y1;
F (y2) = 20*y2;
请帮帮我……!
2的评论
연승 김
연승 김 2021年9月30日
我想我举错了例子....很抱歉。
如果有一个更复杂的函数,我怎么能自动做到这一点?
这意味着我不需要一个一个地编码函数f(x1) f(x2) f(y1) f(y2)
F (x1,x2,y1,y2) = 10*x1 + 20*x2 + 10*y1 + 10*y2 + log(x1) + 1/x1 + 1/y1;
F (x1) = 10*x1 + log(x1) + 1/x1;
F (x2) = 20*x2;
F (y) = 10*y1 + 1/y1;
F (y2) = 20*y2;

登录评论。

接受的答案

为副总经理
为副总经理 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))
C =
f_x1(x1) = sum(C(has(C,x1)))
f_x1 (x1) =
f_x2(x2) = sum(C(has(C,x2)))
f_x2 (x2) =
f_y (y) = sum(C(有(C,y)))
f_y1 (y1) =
f_y2(y2) = sum(C(有(C,y2)))
f_y2 (y2) =
如果您使用的是R2020b以上的版本,则必须删除cell2sym()调用。
注意,这一切都假定表达式是一个简单的和(因此使用sum()来重建子表达式)。如果函数表达式是这样的会发生什么?
fparent (x1, x2, y1, y2) = exp (x1 * sin(日志(x2))) / (y1 * x1 + (y2)每股);
2的评论
연승 김
연승 김 2021年9月30日
谢谢你的好意!!
C = cell2sym(children(fparent))
这段代码运行良好^^

登录评论。

更多答案(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))
Fx1 (x1 x2 y1 y2) =
fx2 = mapSymType(f,“+”, @(X) select (X, x2))
Fx2 (x1 x2 y1 y2) =
fy1 = mapSymType(f,“+”, @(X) select (X, y1))
Fy1 (x1 x2 y1 y2) =
fy2 = mapSymType(f,“+”, @(X) select (X, y2))
Fy2 (x1 x2 y1 y2) =
函数select = SelectPlus(表达式,var)
ch = children(表达式);
selected_ch = ch(cellfun(@(X) ismember(var, symvar(X)), ch));
select = sum([selected_ch{:}]);
如果isempty(选择);select = sym(0);结束
结束

标签

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!