Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems; using Levenberg-Marquardt algorithm instead.

15 views (last 30 days)
I am trying to obtain a numerical answer for a non linear system with 3 equations and 3 unknowns. When running the code, I receive:
Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems; using Levenberg-Marquardt algorithm
instead.
> In fsolve (line 287)
In RegimeTwo (line 60)
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the selected value of the function tolerance, and
the problem appears regular as measured by the gradient.
<stopping criteria details>
Equation solved. The sum of squared function values, r = 1.832713e-25, is less
than sqrt(options.TolFun) = 1.000000e-03. The relative norm of the gradient of
r, 3.027138e-14, is less than 1e-4*options.TolFun = 1.000000e-10.
Optimization Metric Options
relative norm(grad r) = 3.03e-14 1e-4*TolFun = 1e-10 (selected)
r = 1.83e-25 sqrt(TolFun) = 1.0e-03 (selected)
My code:
opts = optimset('fsolve');
opts = optimset(opts,'Maxiter',700,'Tolx',1e-6,'tolfun',1e-6);
xx = [0 0 0];
nle = fsolve(Switch,xx,opts, lambda,row, mu, mu_one, a, b, c, r, gamma, A, sigma_one, beta1,delta1);
OP = nle(1,1);
EC = nle(1,2);
OC = nle(1,3);
My function:
function [m, VM, SP] = Switch(h,lambda,row, mu, mu_one, a, b, c, r, gamma, A, sigma_one, beta1,delta1)
OP = h(1);
EC = h(2);
OC = h(3);
pi = (lambda+row-mu)/((row+lambda-mu_one)*(row-mu));
m = -OC+((1/(r*b*gamma))*(pi*row*OP-c-r*a))^(1/(gamma-1)) ;
A_hat= (-lambda*A)/ (((sigma_one^2)/2)*beta1*(beta1-1)+(mu_one*beta1)-(row+lambda)) ;
VM = A_hat*(OP^beta1) + EC*(OP^delta1)- (pi*OC*OP)+((c*OC+r*(a*OC+b*(OC^gamma)))/row);
SP = beta1*A_hat*(OP^(beta1-1)) + delta1*EC*(OP^(delta1-1))- (pi*OC);
Any ideas where I am going wrong?

Accepted Answer

Torsten
Torsten on 17 Jul 2015
function res = Switch(h,lambda,row, mu, mu_one, a, b, c, r, gamma, A, sigma_one, beta1,delta1)
OP = h(1); EC = h(2); OC = h(3);
pi = (lambda+row-mu)/((row+lambda-mu_one)*(row-mu));
m = -OC+((1/(r*b*gamma))*(pi*row*OP-c-r*a))^(1/(gamma-1)) ;
A_hat= (-lambda*A)/ (((sigma_one^2)/2)*beta1*(beta1-1)+(mu_one*beta1)-(row+lambda)) ;
VM = A_hat*(OP^beta1) + EC*(OP^delta1)- (pi*OC*OP)+((c*OC+r*(a*OC+b*(OC^gamma)))/row);
SP = beta1*A_hat*(OP^(beta1-1)) + delta1*EC*(OP^(delta1-1))- (pi*OC);
res(1,1) = m;
res(2,1) = VM;
res(3,1) = SP;
Best wishes
Torsten.

More Answers (0)

Categories

Find more on Time Series in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!