Shop OBEX P1 Docs P2 Docs Learn Events
first math demo with release 0.2.0 — Parallax Forums

first math demo with release 0.2.0

ReinhardReinhard Posts: 489
edited 2011-12-11 06:48 in Propeller 1
Since this weekend I have to learn with my daughter for a math school exercise

this propgcc demo is newly formed:
/*
    find the zero of a given function
    with newton approximation
    
    x(n+1) = x(n) - [ f(xn) / f'(xn) ]
    
    compile : propeller-elf-gcc -mlmm -Os -o newton.elf  main.cpp -lm
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


typedef double (*Fct)(double x);

#define MAXSTEP 1000
#define EPS 0.000001
#define START 1.5

////////////////////////////////////
// User Function
////////////////////////////////////
double function (double x) 
{
       return x*x*x -3*x - 1;
  
}

////////////////////////////////////
// Differentiate any given Function 
// at point x.
////////////////////////////////////
double diff(double (*f)(double), double x) 
{
       double h = 0.0001;
       return (f(x+h)-f(x-h))/(2*h);
}

/////////////////////////////////////
// Newton Approximation
/////////////////////////////////////
int main(int argc, char *argv[])
{
    double x = START;
    int it = 1;
    Fct fct;
    fct = function;
    
    do
    {
        printf("iteration nr. %d   xn = %f  f(xn) = %f\n",it,x,fct(x));

        x = x - ( fct(x) / diff(fct,x) );

        it++;

    }while (it < MAXSTEP && fabs(fct(x)) > EPS);
    
    if(it >= MAXSTEP)
            printf("\nno convergence!\n");
    else
            printf("iteration nr. %d   xn = %f  f(xn) = %f\n",it,x,fct(x));
       
    return EXIT_SUCCESS;
}

Sign In or Register to comment.