What is wrong with my matlab codes
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
i wrote this matlab script to solve a system of nonlinear equations
function F = myfun (x)
format long
clear
syms k
%values of parameter and vector x
n=5;
m(k)=[6 12 18 24 30];
tol = 10.^-4; %tol is a convergence tolerance
%initial guess or values b=0.002;
a=0.0002;
l=0.0002;
r=0.00002;
xnew = [b;a;l;r];
xold = zeros(size(xnew))
iter=0; %iterations
xnew = [100;100;100];
while norm(xnew - x0) > tol
iter = iter + 1;
xold = xnew;
% update b, a, l, and r
b = xold(1);
a = xold(2);
l = xold(3);
r = xold(4);
%Defining the functions for b, a, l, and r
f= n-sum(b*m(k)^a*exp(l*m(k)),k,1,n)-2*sum(b*r*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
g= sum(log(m(k)),1,n)+sum(1/(a+l*m(k)),k,1,n)-sum(b*m(k)^a*exp(l*m(k))*log(m(k)),k,1,n)-2*sum(a*r*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*log(m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
h= sum(m(k)/(a+l*m(k)),k,1,n)-sum(b*m(k)^(a+1)*exp(l*m(k)),k,1,n)-sum(m(k),k,1,n)-2*sum(b*r*m(k)^(a+1)*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
q= n/(1-r)-2*sum(exp(b*m(k)^a*exp(l*m(k)))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
%Partial derivatives in terms of b, a, l, and r
dfdb = -sum(m(k)^a*exp(l*m(k)),k,1,n)-2*sum(r*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n)-2*sum(b*r*m(k)^(2*a)*exp(-b*m(k)^a*exp(l*m(k))+(2*l*m(k)))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dfda = -sum(b*m(k)^a*exp(l*m(k))*log(m(k)),k,1,n)+2*sum(b*r*m(k)^a*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*log(m(k))*(b*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))+r-exp(-b*m(k)^a*exp(l*x(k))+l*m(k)))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
dfdl = -sum(b*m(k)^(a+1)*exp(l*m(k)),k,1,n)-2*sum((b*r)^2*m(k)^(2*a+1)*exp(-2*(b*m(k)^a*exp(l*m(k))+l*m(k)))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n)-2*sum(b*r*m(k)^(a+1)*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-b*m(k)^a*exp(l*m(k)))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
dfdr = -2*sum(b*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n)-2*sum(b*r*m(k)^a*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dgdb = -sum(b*m(k)^a*exp(l*m(k))*log(m(k)),k,1,n)+2*sum(a*(r)^2*m(k)^(2*a)*exp(-2*(b*m(k)^a*exp(l*m(k))+l*m(k)))*log(m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n)+2*sum(b*r*m(k)^(2*a)*exp(-b*m(k)^a*exp(l*m(k))+2*l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
dgda = -2*sum(r*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*log(m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n)-sum(b*m(k)^a*exp(l*m(k))*(log(m(k)))^2,k,1,n)-sum(1/(a+l*m(k))^2,k,1,n)+2*sum(a*r*m(k)^a*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*(log(m(k)))^2*(b*exp(b*m(k)^a*exp(l*m(k))+l*m(k))+r-exp(b*m(k)^a*exp(l*m(k))))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dgdl = -sum(b*m(k)^(a+1)*exp(l*m(k))*log(m(k)),k,1,n)-sum(m(k)/(a+l*m(k)^2),k,1,n)+2*sum(a*r*m(k)^(a+1)*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*log(m(k))*(b*m(k)^a*exp(b*m(k)^a*exp(l*m(k))+l*m(k))+r-exp(b*m(k)^a*exp(l*m(k))))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dgdr = -2*sum(a*r*m(k)^a*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*log(m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n)-2*sum(b*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*log(m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n);
dhdb = -sum(m(k)^(a+1)*exp(l*m(k)),k,1,n)-2*sum(r*m(k)^(a+1)*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n)+2*sum(b*r*m(k)^(2*a+1)*exp(-b*m(k)^a*exp(l*m(k))+2*l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dhda = -sum(b*m(k)^(a+1)*exp(l*m(k))*log(m(k)),k,1,n)-sum(m(k)/(a+l*m(k)^2),k,1,n)+2*sum(b*r*m(k)^(a+1)*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*(b*m(k)^a*exp(b*m(k)^a*exp(l*m(k))+l*m(k))+r-exp(b*m(k)^a*exp(l*m(k))))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dhdl = -sum(b*m(k)^(a+2)*exp(l*m(k))*log(m(k)),k,1,n)-sum(m(k)^2/(a+l*m(k)^2),k,1,n)+2*sum(b*r*m(k)^(a+2)*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*(b*m(k)^a*exp(b*m(k)^a*exp(l*m(k))+l*m(k))+r-exp(b*m(k)^a*exp(l*m(k))))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dhdr = -2*sum(b*m(k)^(a+1)*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-1),k,1,n)-2*sum(b*r*m(k)^(a+1)*exp(-2*b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dqdb = -2*sum(m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dqda = -2*sum(b*m(k)^a*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*log(m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dqdl = -2*symsum(b*m(k)^(a+1)*exp(-b*m(k)^a*exp(l*m(k))+l*m(k))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
dqdr = -(n/(1-r)^2)-2*sum(exp(-2*b*m(k)^a*exp(l*m(k)))*(1-r*exp(-b*m(k)^a*exp(l*m(k))))^(-2),k,1,n);
%Jacobian matrix
J = [dfdb dfda dfdl dfdr; dgdb dgda dgdl dgdr; dhdb dhda dhdl dhdr; dqdb dqda dqdl dqdr];
% Applying the Newton-Raphson method
xnew = x0- J\[f;g;h;q];
disp(sprintf('iter=%6.15f, b=%6.15f, a=%6.15f, h=%6.15f, q=%6.15f', iter,xnew));
end
But the answer I got after running was;
??? Undefined function or method 'syms' for input arguments of type 'char'.
Error in ==> symsum at 5 syms k
Please, I wish to know where I went wrong. Thank you.
0 Commenti
Risposte (1)
Walter Roberson
il 1 Apr 2016
You appear to have stored this in a file named symsum.m . If you had gotten further you would have had recursion errors because the function needs the routine MATLAB symsum to work. Do not use routine names that are the same as something you need to call upon.
Then you appear to not have a license for the symbolic toolbox, or else do not have it installed.
0 Commenti
Vedere anche
Categorie
Scopri di più su Function Creation in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!