Nie mogę poradzić sobie z tym zadaniem:
1.Napisać funkcję std::vector<double> p = get_poly(n), gdzie p jest wektorem współczynników wielomianu, n liczbą elementów do pobrania (rzędem wielomianu+1)
2.Napisać funkcję double res =poly(x,p), gdzie p jest wektorem współczynników wielomianu rzędu n=p.size()-1, a x wartością, dla której należy obliczyć wartość wielomianu
y=p[0]+p[1]*x+p[2]*x^2+..+p[n]*x^n;
3.Napisać funkcję:
vector<double> zeros = zero(x_min,x_max,p, step);
//oraz funkcja pomocnicza
double x = zero_r(x1, x1+step);
funkcja zero(...) przeszukuje zakres od x_min do x_max z krokiem step i zwraca wektor zawierający wszystkie miejsca zerowe wielomianu w tym zakresie.
gdy znajdzie taką para x1 = x_min+k*step i x2 = x1+step, dla której zmienia się znak wielomianu, powinna wywołać dla tego przedziału rekurencyjną funkcję zero_r(bottom,top).
funkcja zero_r(bottom,top) wyznacza kolejne przybliżenia miejsca zerowego metodą przeszukiwania binarnego. W każdym kroku zakres poszukiwań (top-bottom) zmniejsza się o 0.5 i wybierany jest taki przedział, w którym leży miejsce zerowe (wartość wielomianu dla początku i końca przedziału maja różne znaki). Jako warunek stopu proszę przyjąć, że szerokość zakresu będzie <1e-9.
Udało mi się zrobić coś takiego,ale też nie dokładnie jak w poleceniu. Dalej nie wiem co robić.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<double> get_poly(unsigned n)
{
vector<double>p(n, 4.0);
return p;
}
double poly(double x,unsigned n, vector<double>p)
{
if(n==0)
return p[0];
return x*poly(x,n-1,p)+p[n];
}
int main()
{
unsigned liczba_elementow=3;
vector<double> p = get_poly(liczba_elementow);
unsigned n=p.size()-1;
double res=poly(5,n,p);
cout<<res<<endl;
return 0;
}```
Nie rozumiem jak ma działać funkcja zeros i tym bardziej jak ją napisać.