Informatică, întrebare adresată de bugaadrian77777, 8 ani în urmă

Scrieți un program care va determina pe fiecare din intervalele propuse soluției ecuațiilor care urmează, pentru 2,4,6 literații, utilizînd metoda Newton.
A) 4x⁴+8x3-3x³-7x+3=0 pe (-1,7; -1,5) (-1,53; -1,4) (0,4; 0,52) (0,58; 0,8)


Rayzen: Ce înseamnă 8x3?

Răspunsuri la întrebare

Răspuns de danielpetrupasc
0

Răspuns:

#include <iostream>

#include <cmath>

#include <math.h>

using namespace std;

float f(float x)

{

   return 4*pow(x,4)+8*pow(x,3)-3*pow(x,2)-7*x+3;

}

float derivF(float x)

{

   return 16*pow(x,3)+24*pow(x,2)-6*x-7;

}

float newton(float x)

{

   float h = f(x) / derivF(x);

   while (abs(h) >= 0.0001)

   {

       h = f(x) / derivF(x);

       x = x - h;

   }

 

   return x;

}

int main()

{

   float x0;

//Intervalul (-1.7;-1.5)

   x0 = -1.6;

cout << "\nSolutia pentru intervalul (-1.7;-1.5) este: " << newton(x0);

//Intervalul (-1.53;-1.4)

   x0 = -1.46;

cout << "\nSolutia pentru intervalul (-1.53;-1.4) este: " << newton(x0);

//Intervalul (0.4;0.52)

   x0 = 0.46;

cout << "\nSolutia pentru intervalul (0.4;0.52) este: " << newton(x0);

//Intervalul (0.58;0.8)

   x0 = 0.69;

cout << "\nSolutia pentru intervalul (0.58;0.8) este: " << newton(x0);

   return 0;

}

Explicație:

Sper să ajute!

Răspuns de Rayzen
0

INTERVALS = [(-1.7, -1.5), (-1.53, -1.4), (0.4, 0.52), (0.58, 0.8)]

def f(x):

   return 4 * x**4 + 8 * x**3 - 3 * x**2 - 7 * x + 3

def derivative(f, x, h=0.001):

   return (f(x+h) - f(x)) / h

for interval in INTERVALS:

   x0 = (interval[0] + interval[1]) / 2

   for i in [2, 4, 6]:

       x = x0

       for j in range(1, i+1):

           x = x - f(x) / derivative(f, x)

       print(f"Root on interval {interval} after {i} iterations: {x}")

Alte întrebări interesante