Taking data from matrix and using it in a function

3 ビュー (過去 30 日間)
enter
enter 2020 年 4 月 1 日
コメント済み: enter 2020 年 4 月 1 日
Let's denote . I would like to find the maximum value of the function z, if I substitute with -1 or 1. I created a matrix of only -1 and 1 using de2bi function (I got 0's and 1's but substituted 0's with -1's). How can I "connect" the matrix with my function, so that I'll check all possible combinations and get the maximum value?

回答 (1 件)

Birdman
Birdman 2020 年 4 月 1 日
編集済み: Birdman 2020 年 4 月 1 日
As far as I understand, you want to change E1, E2, E3 and E4 respectively with combinations of -1 and 1. So the following code does that:
syms z(x,y) E1 E2 E3 E4
z(x,y)=(((sin(x).*(1+E1))./(3))+(1+E2))./(log10(y+E3)-E4);
A=perms([-1 1 -1 1]);
for i=1:size(A,1)
Z(x,y)=subs(z,{E1,E2,E3,E4},{A(i,1),A(i,2),A(i,3),A(i,4)})
end
After this point, you can proceed. If you have further question, we can discuss from here. Hope this gives the idea.
  3 件のコメント
Birdman
Birdman 2020 年 4 月 1 日
Try the following code. Note that I had to set x as
x = linspace(1,10,100);
to reduce the calculation time. The max values are stored in
Z_max
syms z(x,y) E1 E2 E3 E4
z(x,y)=(((sin(x).*(1+E1))./(3))+(1+E2))./(log10(y+E3)-E4);
A=perms([-1 1 -1 1]);
c = linspace(1,10,100);
d=c;
[C,D] = meshgrid(c,d);
for i=1:length(A)
Z(x,y)=subs(z,{E1,E2,E3,E4},{A(i,1),A(i,2),A(i,3),A(i,4)});
Z_max(i) = max(max(double(vpa(Z(C,D),2))));
figure(i);
fsurf(Z,[1,10,1,10])
end
The code takes some time to be calculated.
enter
enter 2020 年 4 月 1 日
Is there a more efficient way, because for this code it'll take lifetime to compile.
syms z(x,y) E1 E2 E3 E4 E5 E6 E7 E8 E9
z(x,y) = E7+E8-E9-E3.*((y-1.0)./(y-log(y))+(y.*sin((y.*pi)./1.8e+2))./(cos((y.*pi)./1.8e+2)+x.^2.*3.0))+(E6.*log(y))./(y-log(y))+(E4.*cos((y.*pi)./1.8e+2))./(cos((y.*pi)./1.8e+2)+x.^2.*3.0)+(E5.*cos((y.*pi)./1.8e+2))./(cos((y.*pi)./1.8e+2)+x.^2.*3.0)+(E1.*x.^2.*6.0)./(cos((y.*pi)./1.8e+2)+x.^2.*3.0)+(E2.*x.^2.*3.0)./(cos((y.*pi)./1.8e+2)+x.^2.*3.0)
;
A=perms([-1 1 -1 1 -1 1 -1 1 -1 1]);
c = linspace(1,10,100);
d=c;
[C,D] = meshgrid(c,d);
for i=1:length(A)
Z(x,y)=subs(z,{E1,E2,E3,E4,E5,E6,E7,E8,E9},{A(i,1),A(i,2),A(i,3),A(i,4),A(i,5),A(i,6),A(i,7),A(i,8),A(i,9)});
Z_max(i) = max(max(double(vpa(Z(C,D),2))));
end

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeNumbers and Precision についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by