我在这里有一个公式:
E = T*(1-W)*U + X*W*F + S*W*C*D
让我们说T
,W
,S
,X
和D
都是常数,而U
,F
C
是变量,F
和C
是相互关联的。
现在我的目标是根据E
,U
和F
的不同组合找到C
的不同值。
例如,我有这些变量的值:
U = 2.02, 1, 3, 4
F = 6, 4, 3.03
C = 0.5, 0.4, 0.3
注意到F
和C
彼此相关,例如当F=6
然后C=0.5
或F=4
然后C=0.4
等等。
任何人都可以帮我解决如何在matlab上执行此操作,以便matlab为所有可能的变量组合计算E
的值。
答案 0 :(得分:2)
我找到了关系
F = 10 *(exp(C)-1.06);
来自您的数据。我不知道这是否符合您的期望。无论如何,一旦选择了C,F和U的范围以及采样各个变量的步骤大小,您就可以像这样计算函数的相空间:
%%%% modify me %%%%
T = 1;
W = 1;
S = 1;
X = 1;
D = 1;
%%%%%%%%%%%%%
Nstep = 10;
U = [2.02, 1, 3 , 4];
F = [6, 4, 3.03];
C = [0.5, 0.4, 0.3];
Umin = min(U);
Umax = max(U);
Cmin = min(C);
Cmax = max(C);
Fmin = min(F);
Fmax = max(F);
Ustep = (Umax-Umin)/Nstep;
Fstep = (Fmax-Fmin)/Nstep;
Cstep = (Cmax-Cmin)/Nstep;
U = [Umin:Ustep:Umax];
C = [Cmin:Cstep:Cmax];
F = [Fmin:Fstep:Fmax];
[C,F,U] = MESHGRID(C,F,U);
E = T.*(1-W).*U + X.*W.*F + S.*W.*C.*D;
如果剩下的变量T,W,S,X,D不是标量,你需要调整持有它们的数组的大小。
答案 1 :(得分:1)
我不确定我是否理解你的问题。如果你只想循环使用已知值的3个变量,其中两个是相关的,你可以使用例如:
U = [2.02 1 3 4];
F = [6 4 3.03];
C = [0.5 0.4 0.3];
T = 1; W = 2; S = 3; X = 4; D = 5; %example values
for j=1:size(U,2)
for i=1:size(F,2)
E = T*(1-W)*U(j) + X*W*F(i) + S*W*C(i)*D; disp (E);
end
end
否则,我们可能需要更多关于F和C之间关系的细节。
答案 2 :(得分:0)
我认为你想要做到这一点,它不是很优化,但应该很容易理解。
U = [2.02 1 3 4];
F = [6 4 3.03];
C = [0.5 0.4 0.3];
[W, T, D, X, S] = deal(1); %Assign dummy values for now
minLength = min(min(numel(U),numel(F)),numel(C)); %As U is not the same length as F and C here
E = zeros(minLength,1);
for k = 1:minLength
E(k) = T*(1-W)*U(k) + X*W*F(k) + S*W*C(k)*D;
end
您现在可以通过执行以下操作找到最低值:
find(E == min(E))