matlab与公式的最佳组合

matlab与公式的最佳组合,matlab,optimization,combinations,Matlab,Optimization,Combinations,我这里有一个公式: E = T*(1-W)*U + X*W*F + S*W*C*D 假设T、W、S、X和D都是常数,U、F和C都是变量,F和C彼此相关 现在,我的目标是根据U、F和C的不同组合,找到E的不同值 例如,我有这些变量的值: 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上执行

我这里有一个公式:

E = T*(1-W)*U + X*W*F + S*W*C*D
假设
T
W
S
X
D
都是常数,
U
F
C
都是变量,
F
C
彼此相关

现在,我的目标是根据
U
F
C
的不同组合,找到
E
的不同值

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

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
值。

我找到了一个关系

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

我找到了一个关系

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

我不确定是否正确理解了您的问题。如果您只想循环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之间关系的细节。

我不确定我是否正确理解了你的问题。如果您只想循环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之间关系的细节。

我认为您希望这样做,它不是非常优化,但应该很容易理解

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))

我认为你想这样做,它不是很优化,但应该很容易理解

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))

你的意思是你首先想用所有的第一个值做某事,而不是用所有的第二个值等等?你的意思是你首先想用所有的第一个值做某事,如果
U
不相关,@user2042297的答案应该对你有帮助。如果
U
不相关,@user2042297的答案应该对你有帮助。@jordavid请记住点击适合你的答案的复选标记@JordanDavid请记住点击适合您的答案的复选标记!