# Nonlinear Programming (NLP) based on Optimization Techniques

 Nonlinear programming (also called NLP, for short) is the method or process of solving a system of equalities and inequalities (with or without constraints), over a group of unknown variables along with an objective function to be minimized, where the objective function or some of the constraints are nonlinear. In this brief article we're going to show a very practical approach to solve a curve fitting with Matlab.

This explanation is neither formal nor comprehensive, but straightforward and useful. Nonlinear programming is a quite broad field, and practical approaches are sometimes required for better understanding.

Example.
Curve Fitting

Let's say that we obtained some data experimentally. We want that information (data) to match a given equation. That's called curve fitting.

Let's say that we experimentally obtained these points:

data = [0.5243 0.5539
1.0156 0.5436
1.6243 0.5294
2.5266 0.5057
3.6132 0.4698
4.5650 0.4013
4.9739 0.3117
5.0357 0.2536
5.0604 0.2223];

Let the first column of the table be our independent variable (x), and the second column be our dependent variable (y).

On the other hand, we want to find out the coefficients for an equation of the form:

y = C1 + C2*x + C3*log(1 - z/5.1), that match the above data, where
z = 1.0255*x - 0.2722

We can solve this problem using optimization techniques intended for typical nonlinear programming cases. A good built-in function to achieve this is 'fminsearch'. It implements the Nelder-Mead method (simplex direct).

'fminsearch' finds the value of the variables that can produce a minimum point in a given function (your objective function), and it's a standard function, you don't need any special Matlab toolbox. This instruction finds local minima, not global ones.

First, we need to define an objective function (OF). We have to express our problem in such a way that its minimum value represents our solution. There are many ways to do this, but its definition certainly impacts the result. We want only a solution to our problem (an engineering approach), not the best solution (a mathematical approach).

For our example, we can try this Objective Function:

function U = OF_nl_prog(C)
global x y z

y2 = C(1) + C(2)*x + C(3)*log(1 - z/5.1);
U = norm(y - y2, 1);

This m-file will be iteratively called by 'fminsearch'. It modifies the coefficients in C and finds out the value of the function (y2). Then, it subtracts it from y (the original obtained data) and gets the so-called Manhattan norm of the difference. 'fminsearch' uses this returned scalar number to find out the next C values. It goes on and on until it can't improve any more according to a given tolerance that you can define (using 'optimset'). A zero value of this objective function means that y = y2 and that C contains the best possible coefficients.

We can call this objective function with a script like this:

clear; clc; format compact; close all
global x y z

data = [
0.5243 0.5539
1.0156 0.5436
1.6243 0.5294
2.5266 0.5057
3.6132 0.4698
4.5650 0.4013
4.9739 0.3117
5.0357 0.2536
5.0604 0.2223];

x = data(:, 1); y = data(:, 2);
z = 1.0255*x - 0.2722;

fx = 'OF_nl_prog';
C0 = [1 1 1]
[C, f, EF, out] = fminsearch(fx, C0)

C0 is the initial seed. Different seeds produce different results. We could change the seed several times to see if we get a better or worse fit.

These are our results:

C = 0.5488 0.0130 0.1128
f = 0.0810
out = iterations: 110
funcCount: 190

We can plot our findings with these instructions:

y2_0 = C0(1) + C0(2)*x + C0(3)*log(1 - z/5.1);
plot(x, y2_0,
'r-.^', x, y,'-o')
title (
'Experimental Data and Starting Point')
xlabel(
'x')
ylabel(
'y')
legend(
'starting point', 'data')
grid
on

figure
y2 = C(1) + C(2)*x + C(3)*log(1 - z/5.1);
plot(x, y,
'-o', x, y2,'r-.^' )
axis([.5 5.5 .2 .6]);
title (
'Experimental Data and Fit')
xlabel(
'x')
ylabel(
'y')
legend(
'data', 'fit')
grid
on

It works, right?

From 'Nonlinear Programming' to home

From 'Nonlinear Programming' to 'Matlab Programming'

 Top Nonlinear Systems Linear Regression Curve Fitting Video

## Related pages

convert binary to hexidecimalsolving problems with percents calculatorbinary convert to octalcall function matlabdefine salvage valuesolving equations in matlabconvert binary number to hexadecimalconverting to octaltaylor series expansion of cos xroot finding bisection methodascii character lookupinterest calculator excel sheethow to multiply matrices in matlabbell curve graph generatordraw circle matlabcapacitor time constant calculatordiscrete distribution calculatormatriks gauss jordangraph of rc circuitlagrangian interpolationmatlab rotate figuretrapezoidal rule algorithmmultiple regression matlabcalculating half life formulainterp2 matlabwhat is a boolean operationscilab onlinefzero matlabrecursivitysimple matlab gui examplesgui in matlab examplesbcd to gray codematlab definite integraldecimal code convertermatlab interpolationformula for simple interest loananimation using matlabcalculation for bmidefine functions matlabcombinational logic circuitbisection methodonline polynomial regression calculatorfinding polynomial rootshow to label graphs in matlab3 bit binary to gray code convertertrapezoidal rule calculator onlinehistograms in matlabformula to calculate depreciation3-d plot matlabcalculate pythagorasmatlab plot for loopascii char tableformula factorialmatlab loglogdefinition of piecewise functionhow to draw 3d graphspiecewise function exampleshow to calculate bmi manuallytaylor series of cos xprintable ascii chartmultiplication of factorialsbasics of matlab programmingpascal triangle using cmatlab programming for beginnersresistor color coding formulawriting a matlab functionprogram for multiplication of two matrices in cconvert hex to binary javabinary decimal numbershex binary tabledecimal to octal conversion methodrandnbinomial probability distribution calculatormastermind board game onlineconvert cartesian coordinates to polaramortize tableprogram calculator quadratic formuladecay calculator