[c] miejsce zerowe metoda Newtona

Odpowiedz Nowy wątek
2007-01-11 20:53

Rejestracja: 17 lat temu

Ostatnio: 16 godzin temu

Lokalizacja: Monachium

0

nie wiem co zrobic zeby to zadzialalo:

rozwiazac w przedziale <0;pi/2> metoda newtona townanie tgx=3x
mam taki kod, ale nigdzie nie moge znalesc jak w tej metodzie ograniczyc, ze ma szukac tylko w tych przedzialach. W kazdym razie wiekszym problemem, ze ona nie dziala. Kolejne wyniki zblizaja x do - nieskonczonosci. Kalkulator z http://www.coolmath.com/graphit/index.html rysuje wynik okolo 1.3 i -1.3

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

float f(float x) {     // funkcja ktorej miejsce zerowe obliczamy
    return sin(x)/cos(x)-3*x;
}

float fp(float x) {   // jej pochdna
    return 1/cos(x)*cos(x)-x;
}

float newton(float f(float),float df(float),float a) {
    float x=a,dx;
    if (df(a) == 0.) {
        printf("w podanym punkcie styczna jest rownolegla do osi x\n");
        return a;
    } else {
        do {
            dx=f(x)/df(x);
            x -= dx;
           // printf("%f\n",x);
            //system("pause");
        } while (fabs(dx) > 1.E-6);
        return x;
    }
}

int main() {
    printf("%f",newton(f,fp,0.5));
}

Pozostało 580 znaków

2007-01-15 10:26

Rejestracja: 14 lat temu

Ostatnio: 9 lat temu

0
#include <math.h>
#include <stdio.h>
#include <conio.h>

float f(float x) // funkcja ktorej miejsce zerowe obliczamy
{
    return sin(x)/cos(x)-3*x;
}

float fp(float x) // jej pochdna
{
    return 1/(cos(x)*cos(x))-3;
}

float newton(float f(float),float df(float),float a,int n)
{
    float x=a,dx,t,delta,eps=0.0001;
    int i,err;

    f(x);
    df(x);
 for(i=1;i<=n;i++)
  {
    if (df(a) == 0)
     {
        printf("w podanym punkcie styczna jest rownolegla do osi x\n");
        return a;

     }
    else
     {

            dx=f(x)/df(x);
            t=x;
            x =x-dx;
            f(x);
            df(x);
            delta=fabs(x-t);
            if(fabs(x)>1) delta=delta/fabs(x);
            if((fabs(delta) <= eps)&& (fabs(f(x))<=100*eps))
            return x;
            else err=1;
     }

  }
  if(err==1) printf("nie osiagnieto dokladnosci w n krokach\n");
  return x;
}

 main()
 {
  int n;
    printf("podaj ilosc iteracji n \n");
    scanf("%d",&n);
    printf("%f",newton(f,fp,1.5,n));
    getch();
}

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0