0

我这里有一个公式:

E = T*(1-W)*U + X*W*F + S*W*C*D

假设T, W, S,XD都是常数,而U,FC是变量并且FC是相互关联的。

现在我的目标是根据 和 的不同组合找到不同EU值。FC

例如,我有这些变量的值:

U = 2.02,  1,     3,      4
F = 6,     4,     3.03
C = 0.5,   0.4,   0.3

注意到FandC是相互关联的,例如 when F=6thenC=0.5或 if F=4thenC=0.4等等。

任何人都可以帮助我如何在 matlab 上执行此操作,以便 matlab 计算E所有可能的变量组合的值。

4

3 回答 3

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 不是标量,则需要调整包含它们的数组的大小。

于 2013-08-01T12:12:17.537 回答
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 之间关系的细节。

于 2013-08-01T12:25:51.710 回答
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))
于 2013-08-01T13:26:30.310 回答