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)
Răspunsuri la întrebare
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!
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}")