My coding error during run. Please check my matlab coding. What is the cause?

1 view (last 30 days)
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_h_final = 2×1
2.9863 1.9929
x_g_final = x_g
x_g_final = 2×1
2.9851 2.0085
x_l_final = x_l
x_l_final = 2×1
2.9887 1.9976

Answers (1)

Luca Ferro
Luca Ferro on 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.

Categories

Find more on Special Functions in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!