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请记住点击适合您的答案的复选标记!