Sudden jump when solving non-linear equations with lsqnonlin
Show older comments
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)
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!