Error using sym>convertChar (line 1580) Character vectors and strings in the first argument can only specify a variable or number. To evaluate character vectors and strings re
Show older comments
I had been needed to used Marquardt's Method for Multiple Variable Functions, but the code of I search on online has a bit problems. which the code given as below:
%Marquardt's Method for Multiple Variable Functions
clc;
close all;
%Insert starting points
x01=0;
x02=0;
%Function F in Symbolic Format
a='(x1^2+x2-11)^2+(x1+x2^2-7)^2';
%Insert the desired magnitude of final direction vector (0.0001 is fine)
eserror=0.0001;
Max_Iterations=20000;
convergance_criterion=0.0001;
k=0
gamma=100
%Leave the rest unchanged
%=================================
syms x1 x2
syms alpha real %difining alpha as real prevents matlab to solve function with conj(alpha)
% Hessian Of F
A=[diff(diff(a,x1),x1),diff(diff(a,x1),x2);...
diff(diff(a,x2),x1),diff(diff(a,x2),x2)]
%First Order Derivative of F
B=[diff(a,x1);diff(a,x2)];
% pretty(simplify(A))
subs(subs(A,x1,x01),x2,x02)
mag_of_B=sqrt(subs(subs(diff(a,x1),x1,x01),x2,x02)^2+subs(subs(diff(a,x2),x1,x01),x2,x02)^2)
records=[];
while (mag_of_B>convergance_criterion)&(k<Max_Iterations)
k=k+1;
temp=([x01;x02]-inv(subs(subs(A,x1,x01),x2,x02)+gamma*eye(size(subs(subs(A,x1,x01),x2,x02))))*(subs(subs(B,x1,x01),x2,x02)))'
disp('x1 x2');
[x01;x02]
disp('Hk')
subs(subs(A,x1,x01),x2,x02)
disp('gamm es');
gamma*eye(size(subs(subs(A,x1,x01),x2,x02)))
disp('diff');
(subs(subs(B,x1,x01),x2,x02))
disp('------------');
F_eval_old=subs(subs(a,x1,x01),x2,x02);
x01=temp(1,1);
x02=temp(1,2);
F_eval_new=subs(subs(a,x1,x01),x2,x02);
if F_eval_new<F_eval_old
gamma=.5*gamma;
else
gamma=2*gamma;
end
mag_of_B=sqrt(subs(subs(diff(a,x1),x1,x01),x2,x02)^2+subs(subs(diff(a,x2),x1,x01),x2,x02)^2)
records=[records;[k,x01,x02,subs(subs(a,x1,x01),x2,x02)]];
end
records
The error might be due to the version I used is 2021b, but i didn't know which part should i changed to clear the error. this is the error of the code:
Error using sym>convertChar (line 1580)
Character vectors and strings in the first argument can only specify a variable or number. To evaluate character vectors and
strings representing symbolic expressions, use 'str2sym'.
Error in sym>tomupad (line 1296)
S = convertChar(x);
Error in sym (line 234)
S.s = tomupad(x);
Error in sym/privResolveArgs (line 1016)
argout{k} = sym(arg);
Error in sym/diff (line 22)
args = privResolveArgs(S,varargin{:});
Error in ww (line 25)
A=[diff(diff(a,x1),x1),diff(diff(a,x1),x2);...
Accepted Answer
More Answers (0)
Categories
Find more on Operations on Strings in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!