My coding error during run. Please check my matlab coding. What is the cause?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
clc
close all
clear all
syms gamma beta e real
syms x1 x2 real
f(x1,x2) = (x1^2 + x2 -11)^2 + (x1 + x2^2 -7)^2; % Function
%% Step 1
% Assume any three sets of solution. Let's say (0,0), (2,0), (1,1);
x = zeros(2,3);
% Input initial simplex points
x(:,1) = [0,0]';
x(:,2) = [2,0]';
x(:,3) = [1,1]';
%Parameters - Change the parameter as per the question
gamma = 1.5;
beta = 0.5;
e_s = 0.001;
e = 1;
iteration = 0;
%% Step 2
while e > e_s
f1 = double(subs(f,[x1,x2],x(:,1)'));
f2 = double(subs(f,[x1,x2],x(:,2)'));
f3 = double(subs(f,[x1,x2],x(:,3)'));
if f1 > f2 && f1 > f3
f_xh = f1;
x_h = x(:,1);
i = 1;
if f2 > f3
f_xl = f3;
f_xg = f2;
x_l = x(:,2);
x_g = x(:,3);
else
f_xl = f2;
f_xg = f3;
x_l = x(:,3);
x_g = x(:,2);
end
x_c = (x_l+ x_g)./2;
elseif f2 > f1 && f2 > f3
f_xh = f2;
x_h = x(:,2);
i = 2;
if f1 > f3
f_xl = f3;
f_xg = f1;
x_l = x(:,3);
x_g = x(:,1);
else
f_xl = f1;
f_xg = f3;
x_l = x(:,1);
x_g = x(:,3);
end
x_c = (x_l + x_g)./2;
else
f_xh = f3;
x_h = x(:,3);
i = 3;
if f1 > f2
f_xl = f2;
f_xg = f1;
x_l = x(:,2);
x_g = x(:,1);
else
f_xl = f1;
f_xg = f2;
x_l = x(:,1);
x_g = x(:,2);
end
x_c = (x_l + x_g)./2;
end
%% Step 3
x_r = 2*x_c - x_h; %Reflected point
f_xr = subs(f,[x1,x2],x_r');
if f_xr < f_xl
x_new = (1+gamma)*x_l - gamma*x_h;
elseif f_xr >= f_xh
x_new = (1-beta)*x_c + beta*x_h;
else
x_new = (1+beta)*x_c - beta*x_h;
end
%% Step 4
f_new = double(subs(f,[x1,x2],x_new'));
f_xc = double(subs(f,[x1,x2],x_c'));
f_final = [f_new, f_xg, f_xl];
e = (sum(((f_final - f_xc).^(2))/3))^(1/2);
x(:,i) = x_new;
iteration = iteration + 1;
end
%% Final result
x_h_final = x_h
x_g_final = x_g
x_l_final = x_l
1 commentaire
Réponses (1)
Luca Ferro
le 9 Jan 2023
i tried to run the code and i think the error you are referring to is:
> Error using syms: Unable to create a symbolic variable 'gamma' by using 'syms' inside a MATLAB function because 'gamma' is an existing function name, class name, method name, and so on.
if it is like so, try to substitute the syms delcaration;
syms gamma beta e
with
sym('gamma')
sym ('beta')
sym('e')
You will need to change the beta and e declaration as well because they too are existing function names.
0 commentaires
Voir également
Catégories
En savoir plus sur Special Functions dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!