Sudden jump when solving non-linear equations with lsqnonlin

Hi all, It is my first time working with a system of non-linear equations in Matlab and already I am facing an issue. I have a system of six non-linear equations in total (it could be summarized to four equations due to some symmetry-effects, but doing so does not solve my problem, I tried.). I solve this system with lsqnonlin, whereby the lower boundary is set to 0 and the upper boundary is set to +infinity (I know already, that only positive values are allowed as an outcome.). I want to investigate the outcome of the system, for different values of A, so I constructed a for loop. The for loop is fed with the vector A_vec = [-1.0000; -0.9900; -0.9800; …; 1.0000] and for each element it solves the system of equations. So far, so good. However, when I plot the outcome (the results of lsqnonlin over A_vec), there is a sudden jump at approx. A=0.5. This is intuitively very hard to explain, as I strongly expected the functions to be monotonic. Do you have any ideas about this? And furthermore: is this a problem of lsqnonlin in Matlab or rather a pure mathematical problem? Any help is highly appreciated, many thanks!
% Clearing workspace and command window and closing (potentially) open windows
clear;
clc;
close all;
%Constructing vecor of A
stepsize = 0.001;
A_vec = ones((((1/stepsize))/10)*2,1);
for i=1:((((1/stepsize))/10)*2 + 1)
A_vec(i) = i/(((1/stepsize))/10);
end
A_vec=A_vec-1.0100;
result = ones(length(A_vec),6);
q0 = [0.2500; 0.2500; 0.2500; 0; 0; 0];
lb = 0.0.*ones(size(q0)); %lower bound of zero
ub =Inf* ones(size(q0)); %upper bound of Inf-values
B=1;
for j=1:length(A_vec);
[Outcome] = TestfileB(q0, B, A_vec(j), lb, ub);
result(j,:)=Outcome';
q0=Outcome';
end
%numerical solution Value 1,2,3
Value1=result(:,1);
Value2=result(:,2);
Value3=result(:,3);
%Values 4,5,6 not of interest.
Value4=result(:,4);
Value5=result(:,5);
Value6=result(:,6);
%Plotting
figure;
x=A_vec;
y1 = real(Value1);
y2 = real(Value2);
plot(x, y1, x, y2);
axis([A_vec(1) A_vec(end) 0 0.5]);
xl=xlabel('$A$');
set(xl,'Interpreter','Latex');
yl=ylabel('$z-axis$');
set(yl,'Interpreter','Latex');
t=title('Title');
set(t,'Interpreter','Latex');
l=legend('$Case 1$', '$Case 2$');
set(l,'Interpreter','Latex');
function [q] = TestfileB(q0, B_value, A_value,lb, ub);
F = @(q)[1 - 2*B_value* q(1) + A_value*(q(2) + q(3))*(-1 + q(4));
1 - 2*B_value* q(2) + (q(1) + q(3))*(-A_value + q(5)/(q(1) + q(2) + q(3))^2);
1 - 2*B_value* q(3) + (q(1) + q(2))*(-A_value + q(6)/(q(1) + q(2) + q(3))^2);
(-A_value)* q(1)*((A_value*(q(1) + q(2) + q(3))^3 + (q(1) - q(2) + q(3))* q(5))* ((-(2*B_value - A_value))*(q(1) + q(2) + q(3))^2 - q(6)) + ((-(2*B_value - A_value))*(q(1) + q(2) + q(3))^2 - q(5))* (A_value*(q(1) + q(2) + q(3))^3 + (q(1) + q(2) - q(3))* q(6))) + ((1 - 2*B_value* q(1) - A_value*(q(2) + q(3)))*(4*(B_value*(q(1) + q(2) + q(3))^3 + (q(1) + q(3))* q(5))* (B_value*(q(1) + q(2) + q(3))^3 + (q(1) + q(2))* q(6)) - (A_value*(q(1) + q(2) + q(3))^3 + (q(1) - q(2) + q(3))* q(5))*(A_value*(q(1) + q(2) + q(3))^3 + (q(1) + q(2) - q(3))* q(6))))/(q(1) + q(2) + q(3));
q(3)^3*(4*1*B_value^2 + 1*A_value^2*(-1 + q(4))) + q(1)^4*(-4*B_value^2*A_value - A_value^3*(-1 + q(4))) + q(3)^4*(-4*B_value^2*A_value - A_value^3*(-1 + q(4))) + q(2)^4*(-8*B_value^3 - 2*B_value*A_value^2*(-1 + q(4)) + A_value^2*(-2*B_value + A_value)*(-1 + q(4)) - A_value^2*(-2*B_value + A_value - A_value* q(4))) + q(2)^3*(4*1*B_value^2 + 1*A_value^2*(-1 + q(4)) + q(3)*(-24*B_value^3 - 4*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4)))) + q(1)^3*(4*1*B_value^2 + q(3)*(-16*B_value^2*A_value - 4*A_value^3*(-1 + q(4))) + 1*A_value^2*(-1 + q(4)) + q(2)*(-8*B_value^3 - 12*B_value^2*A_value - 2*B_value*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) + A_value^2*(-2*B_value + A_value)*(-1 + q(4)) - A_value^2*(-2*B_value + A_value - A_value* q(4)))) - 1*A_value*q(3)*(-1 + q(4))* q(6) + A_value^2* q(3)^2*(-1 + q(4))* q(6) + q(1)^2*(q(3)*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(3)^2*(-24*B_value^2*A_value - 6*A_value^3*(-1 + q(4))) + q(2)^2*(-24*B_value^3 - 12*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) + q(2)*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4)) + q(3)*(-24*B_value^3 - 36*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 9*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4)))) - 4*B_value*A_value* q(6) - A_value^2*(-1 + q(4))* q(6)) + q(2)^2*(q(3)*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(3)^2*(-24*B_value^3 - 12*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) - 8*B_value^2* q(6) - 2*B_value*A_value*(-1 + q(4))* q(6) - A_value^2*(-1 + q(4))* q(6) - A_value*(-2*B_value + A_value - A_value* q(4))* q(6)) + q(1)*(q(3)^2*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(3)^3*(-16*B_value^2*A_value - 4*A_value^3*(-1 + q(4))) + q(2)^3*(-24*B_value^3 - 4*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) + q(2)^2*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4)) + q(3)*(-48*B_value^3 - 24*B_value^2*A_value - 12*B_value*A_value^2*(-1 + q(4)) - 6*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 6*A_value^3*(-1 + q(4)) - 6*A_value^2*(-2*B_value + A_value - A_value* q(4)))) + 4*1*B_value* q(6) - 4*B_value*A_value*q(3)* q(6) + 1*A_value*(-1 + q(4))* q(6) + q(2)*(q(3)*(24*1*B_value^2 + 6*1*A_value^2*(-1 + q(4))) + q(3)^2*(-24*B_value^3 - 36*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 9*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) - 8*B_value^2* q(6) - 4*B_value*A_value* q(6) - 2*B_value*A_value*(-1 + q(4))* q(6) - 2*A_value^2*(-1 + q(4))* q(6) - A_value*(-2*B_value + A_value - A_value* q(4))* q(6))) + q(2)*(q(3)^2*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(3)^3*(-8*B_value^3 - 12*B_value^2*A_value - 2*B_value*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) + A_value^2*(-2*B_value + A_value)*(-1 + q(4)) - A_value^2*(-2*B_value + A_value - A_value* q(4))) + 4*1*B_value* q(6) + 1*A_value*(-1 + q(4))* q(6) + q(3)*(-4*B_value*A_value*q(6) + 2*B_value*A_value*(-1 + q(4))* q(6) - 2*A_value^2*(-1 + q(4))* q(6) + A_value*(-2*B_value + A_value - A_value* q(4))* q(6)));
q(3)^3*(4*1*B_value^2 + 1*A_value^2*(-1 + q(4))) + q(1)^4*(-4*B_value^2*A_value - A_value^3*(-1 + q(4))) + q(2)^4*(-4*B_value^2*A_value - A_value^3*(-1 + q(4))) + q(3)^4*(-8*B_value^3 - 2*B_value*A_value^2*(-1 + q(4)) + A_value^2*(-2*B_value + A_value)*(-1 + q(4)) - A_value^2*(-2*B_value + A_value - A_value* q(4))) + q(2)^3*(4*1*B_value^2 + 1*A_value^2*(-1 + q(4)) + q(3)*(-8*B_value^3 - 12*B_value^2*A_value - 2*B_value*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) + A_value^2*(-2*B_value + A_value)*(-1 + q(4)) - A_value^2*(-2*B_value + A_value - A_value* q(4)))) + q(1)^3*(4*1*B_value^2 + q(2)*(-16*B_value^2*A_value - 4*A_value^3*(-1 + q(4))) + 1*A_value^2*(-1 + q(4)) + q(3)*(-8*B_value^3 - 12*B_value^2*A_value - 2*B_value*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) + A_value^2*(-2*B_value + A_value)*(-1 + q(4)) - A_value^2*(-2*B_value + A_value - A_value* q(4)))) + q(3)*(4*1*B_value* q(5) + 1*A_value*(-1 + q(4))* q(5)) + q(1)^2*(q(3)*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(2)^2*(-24*B_value^2*A_value - 6*A_value^3*(-1 + q(4))) + q(3)^2*(-24*B_value^3 - 12*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) + q(2)*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4)) + q(3)*(-24*B_value^3 - 36*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 9*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4)))) - 4*B_value*A_value* q(5) - A_value^2*(-1 + q(4))* q(5)) + q(2)^2*(q(3)*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(3)^2*(-24*B_value^3 - 12*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 3*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) + A_value^2*(-1 + q(4))* q(5)) + q(3)^2*(-8*B_value^2* q(5) - 2*B_value*A_value*(-1 + q(4))* q(5) - A_value^2*(-1 + q(4))* q(5) - A_value*(-2*B_value + A_value - A_value* q(4))* q(5)) + q(1)*(q(3)^2*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(2)^3*(-16*B_value^2*A_value - 4*A_value^3*(-1 + q(4))) + q(3)^3*(-24*B_value^3 - 4*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) + q(2)^2*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4)) + q(3)*(-24*B_value^3 - 36*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 9*A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4)))) + 4*1*B_value* q(5) + 1*A_value*(-1 + q(4))* q(5) + q(2)*(q(3)*(24*1*B_value^2 + 6*1*A_value^2*(-1 + q(4))) + q(3)^2*(-48*B_value^3 - 24*B_value^2*A_value - 12*B_value*A_value^2*(-1 + q(4)) - 6*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - 6*A_value^3*(-1 + q(4)) - 6*A_value^2*(-2*B_value + A_value - A_value* q(4))) - 4*B_value*A_value* q(5)) + q(3)*(-8*B_value^2* q(5) - 4*B_value*A_value* q(5) - 2*B_value*A_value*(-1 + q(4))* q(5) - 2*A_value^2*(-1 + q(4))* q(5) - A_value*(-2*B_value + A_value - A_value* q(4))* q(5))) + q(2)*(q(3)^2*(12*1*B_value^2 + 3*1*A_value^2*(-1 + q(4))) + q(3)^3*(-24*B_value^3 - 4*B_value^2*A_value - 6*B_value*A_value^2*(-1 + q(4)) - 3*(2*B_value - A_value)*A_value^2*(-1 + q(4)) - A_value^3*(-1 + q(4)) - 3*A_value^2*(-2*B_value + A_value - A_value* q(4))) - 1*A_value*(-1 + q(4))* q(5) + q(3)*(-4*B_value*A_value* q(5) + 2*B_value*A_value*(-1 + q(4))* q(5) - 2*A_value^2*(-1 + q(4))* q(5) + A_value*(-2*B_value + A_value - A_value* q(4))* q(5)))];
[q] = lsqnonlin(F,q0,lb,ub);
end

Answers (0)

Products

Asked:

on 24 Aug 2016

Community Treasure Hunt

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

Start Hunting!