Tutorial: Nonlinear solver
Tutorial: Nonlinear solver
Problem
Solve for x, in a non-linear function of
f(x)= 8-4.5*(x-sin(x))=0

Tutorial: MATLAB
Sample Code
clear all
F = inline('8-4.5*(x-sin(x))');
dF=inline('-4.5*(1-cos(x))');
x=0:0.001:10;
plot(x,F(x)); grid on
Exercise
Download the tutorial source file and fill in the blanks. Run the code and validate your answer.
MATLAB tutorial source file : TU_nonlinear_student.mlx
Tutorial: C-Programming
Create a new project “ TU_Nonlinear” with Visual Studio, under the directory
\NP\tutorial\
Download the tutorial source file from
C-program tutorial source file : TU_nonlinear_student.cpp
Add the downloaded source file under the project folder.
Prepare your library header files in your project:
myNP_tutorial.h
andmyNP_tutorial.c
This is the same header files used in the previous tutorial: Tutorial-Sine Taylor: Part 2
They must be located in
\NP\include\
folderIf you do not have them, you can download from here
Rename your library header files as
myNP_yourID.h
andmyNP_yourID.c
Example:
myNP_20030011.c
,myNP_20030011.h
From now on, you will update your functions in the library header files.
Exercise 1
On the given source code template TU_nonlinear_student.cpp
, fill-in the missing codes.
Bisection Method
Assuming (func(a) * func(b) <0 )
First, Write down a pseudocode for the bisection
// YOUR pseudocode goes here// YOUR pseudocode goes here
Based on the pseudocode, fill in the blanks in the source code.
double bisection(float _a, float _b, float _tol);
Move your functions from main source file to your header files
function definitions:
myNP_yourID.h
function declaration:
myNP_yourID.c
Exercise 2
Modify your Bisection function with considering the following conditions
if(func(a) * func(b) > 0), No solution exists
if(func(a) * func(b) ==0), Either (1) a=Xtrue or (2) b=Xtrue
if(k==Nmax) Solution did not converge within given iteration
Exercise 3
Newton Raphson Method
First, Write down a pseudocode for the method
// YOUR pseudocode goes here// YOUR pseudocode goes here
Based on the pseudocode, fill in the blanks in the source code.
double newtonRaphson(float _a, float _b, float _tol);
You need to define the function
f(x)
and the derivative functiondfdx(x)
asdouble func(float _x); double dfunc(float _x);
For dfdx(x), get the derivative formula analytically.
After you have compiled them successfully, move your functions to your header files
Exercise 4
Modify Newton Raphson Method with function callback
Read how to pass a function as an input argument
Modify the newton-raphson function that calls the problem functions f(x) and dfdx(x) as input arguments.
double newtonRaphson(double func(double _x), double dfunc(double _x), double _x0, double _tol);
Now, the problem function f(x)
and the derivative function dfdx(x)
should be located in the main source code TU_nonlinear_student.cpp
NOT in
myNP_yourID.h
// Move these declaration and definitions of problem functions to
// TU_nonlinear_student.cpp
double func(float _x);
double dfunc(float _x);
Last updated
Was this helpful?