Exemplo n.º 1
0
Polynomial mniejszy(Polynomial q, Polynomial p) //zwraca wielomian nizszego stopnia
{
	if(p.deg()<=q.deg())
		return p;
	else
		return q;
}
Exemplo n.º 2
0
 inline void Polynomial<T, Structure>::divide(const Polynomial<T, Structure>& divisor, Polynomial<T, Structure>& quotient, Polynomial<T, Structure>& remainder) const
 {
   if (deg() < divisor.deg()) {
     remainder = *this;
     quotient = zero();
     return;
   }
   size_type divisor_deg = divisor.deg();
   size_type new_deg = deg() - divisor_deg;
   remainder = *this;
   if (deg() < divisor_deg) {
     quotient = one();
     return;
   }
   coefficient_list quotient_coefficients (new_deg + 1);
   const T divisor_first_digit = divisor.m_coefficients[divisor_deg];
   for (size_type i = new_deg + 1; i > 0;) {
     --i;
     quotient_coefficients[i] = remainder.m_coefficients[i + divisor_deg] / divisor_first_digit;
     Polynomial<T, Structure> factor (m_structure, quotient_coefficients[i], i);
     Polynomial<T, Structure> back_calculated = factor * divisor;
     remainder.subtract(back_calculated);
   }
   remainder.remove_zeros();
   quotient = Polynomial<T, Structure>(m_structure, quotient_coefficients);
 }
Exemplo n.º 3
0
Polynomial wiekszy(Polynomial q, Polynomial p) //zwraca wielomian wyzszego stopnia
{
	if(p.deg()>=q.deg())
		return p;
	else
		return q;
}
Exemplo n.º 4
0
double value(Polynomial p, double x)
{
    //wartoϾ w a = reszcie z p/(x-a)
    double m=p.getA(p.deg());
    for(int i = p.deg()-1; i >= 0; i--)
        m=m*x+p.getA(i);
    return m;
}
Exemplo n.º 5
0
Polynomial add(Polynomial q, Polynomial p)
{
	int stW;
	stW = max(q.deg(), p.deg());
	Polynomial w;
	for(int i=0; i <= stW; i++)
	w.setA(i, p.getA(i)+q.getA(i));

	return w;
}
Exemplo n.º 6
0
 inline Polynomial<T, Structure>& Polynomial<T, Structure>::operator*=(const Polynomial<T, Structure>& other)
 {
   coefficient_list new_coefficients (deg() + other.deg() + 1, 0);
   for (size_type i = 0; i <= deg(); ++i) {
     for (size_type j = 0; j <= other.deg(); ++j) {
       new_coefficients[i + j] += m_coefficients[i] * other.m_coefficients[j];
     }
   }
   m_coefficients = new_coefficients;
   remove_zeros();
   return *this;
 }
Exemplo n.º 7
0
void div(const Polynomial &W, const Polynomial &P, Polynomial &Q, Polynomial &R){
    R = W;                                                                                                                                                                                                              
    for(int i=R.deg();i>=0 && R.deg()>=P.deg();i--){
        Q.setA(i-P.deg(), R.getA(i)/P.getA(P.deg()));
        for(int a=P.deg();a>=0;a--){
            R.setA((i-P.deg())+a, R.getA((i-P.deg())+a)-( P.getA(a) * Q.getA(i-P.deg()) ) ); 
        }
    }                                                                                                                                                                                                                                                                                                                                                                                                                           
}
Exemplo n.º 8
0
Polynomial mult(Polynomial q, Polynomial p)
{
	Polynomial w;
    int h=0; //chwilowa wartoϾ w[i]
	for(int i = (q.deg()+p.deg()); i >= 0; i--)
    {
		for(int j = max(p.deg(), q.deg()); j >= 0; j--)
        {
            h=h+(wiekszy(p, q).getA(j)*mniejszy(p,q).getA(i-j));
        }
        w.setA(i, h);
        h=0;
    }
    return w;
}
Exemplo n.º 9
0
 inline Polynomial<T, Structure>& Polynomial<T, Structure>::operator-=(const Polynomial<T, Structure>& other)
 {
   pad_zeros(other.deg() + 1);
   subtract(other);
   remove_zeros();
   return *this;
 }
Exemplo n.º 10
0
bool Polynomial::operator==(const Polynomial &q) const{
    if(deg()!=q.deg()) return false;
    for(int i=0;i<deg();i++){
        if(a[i]!=q.a[i]) return false;
    }
    return true;
}
Exemplo n.º 11
0
Polynomial mult2(Polynomial p, double x) //mnozy wielomian przez liczbe
{
    Polynomial v;
    for(int i = 0; i <= p.deg(); i++)
        v.setA(i, p.getA(i)*x);
    return v;
}
Exemplo n.º 12
0
int main()
{

	Polynomial p;

	p.setA(0,1);
	p.setA(1,5);
	p.setA(2,0);
	p.setA(3,3);
	/*p.setA(4,2);
	p.setA(5,2);
	p.setA(6,0);
	p.setA(7,0);*/

	p.print();
	cout<<endl<<p.deg()<<endl;

	Polynomial q;

	q.setA(0,0);
	q.setA(1,0);
	q.setA(2,0);
	q.setA(3,0);
	/*q.setA(4,0);
	q.setA(5,0);
	q.setA(6,0);
	q.setA(7,0);*/

	q.print();
	cout<<endl<<q.deg()<<endl;


	/*
	cout<<endl<<"dodawanie; ";
	add(p, q).print();
    cout<<endl<<"mnozenie: ";
    mult(p, q).print();
    cout<<endl<<"wartosc p dla 2; ";
    cout<<value(p, 2);
    Polynomial wynik;
    Polynomial reszta;
    div(p, q, wynik, reszta);
    cout<<endl<<"DZIELENIE: "<<"wynik: ";
    wynik.print();
    cout<<"  reszta: ";
    reszta.print();*/
}
Exemplo n.º 13
0
const Polynomial Polynomial::operator+(const Polynomial &q) const{
    Polynomial _a;
    for(int i=0;i<=q.deg();i++){
        _a.setA(i, (i<=deg()?a[i]:0)+q.a[i]);
    }
    _a.deg();
    return _a;
}
Exemplo n.º 14
0
    bool operator!=(const Polynomial &q) const {
        if (deg()==q.deg()) {return false;}

        for(int i=1; i<= deg(); i++)
        {
            if (getA(i)==q.getA(i))  return false;
        }
        return true;

    }
Exemplo n.º 15
0
const Polynomial Polynomial::operator*(const Polynomial &q) const{
    Polynomial _a;

    for(int x=0;x<=q.deg();x++){
        for(int y=0;y<=deg();y++){
            _a.setA(x+y, (x+y<=_a.deg()?_a.a[x+y]:0) + a[y]*q.a[x] );
        }
    }
    _a.deg();
    return _a;
}
Exemplo n.º 16
0
    const Polynomial operator*(const Polynomial &q) const
    {
        Polynomial u;
        int k=(deg()+q.deg());
        u.setA(k,0);

        double w=0;
        int i=0;
        int j=0;
         for(i=0; i<=deg(); i++)
        {
            for( j=0; j<=q.deg(); j++) {

            u.setA(i+j,u.getA(i+j)+getA(i)*q.getA(j)) ;

            }
            j=0;

        }
       return u;
    }
Exemplo n.º 17
0
    const Polynomial operator+(const Polynomial &q) const
    {
        Polynomial w;
        int k=max(deg(), q.deg());
        w.setA(k,0);

        for(int i=0; i<=k; i++)
            {
                w.setA(i,getA(i)+q.getA(i));
            }
        return w;

    }
Exemplo n.º 18
0
vector<double> Polynomial :: rational_roots(Polynomial q)
{
    cout<<endl<<"będę zaokrąglał niecałkowite współczynniki"<<endl;
    vector<double> r;
    vector<int> z;
    vector<int> o;

    for(int i = 0; i < q.getA(0); i++)
    {
        if( (int)q.getA(0) % 1 == 0 && (int)q.getA(0) % i == 0)
        {
            z.push_back(i);
            z.push_back(-i);
        }
    }

    for(int i = 0; i < q.getA(q.deg() + 1); i++)
    {
        if((int)q.getA(q.deg() + 1) % 1 == 0 && (int) q.getA(q.deg() + 1) % i == 0)
        {
            o.push_back(i);
            o.push_back(-i);
        }
    }

    for(int i = 0; i < z.size(); i++)
    {
         for(int j = 0; j < o.size(); j++)
        {
            if(value(q, j/i) == 0)
            {
                r.push_back(j/i);
            }
        }
    }
    return r;
}
Exemplo n.º 19
0
    bool operator==(const Polynomial &q) const
	{
		if(deg() != q.deg())
		{
			return false;
		}

		for(int i = 0; i < deg(); i++)
		{
			if(a[i] != q.getA(i))
			{
				return false;
			}
		}
		return true;
	}
Exemplo n.º 20
0
void div(Polynomial p, Polynomial q, Polynomial &wynik, Polynomial &reszta)
{
    int b = p.deg();
    Polynomial l;
    Polynomial prev_wynik;
    for(int i = b-q.deg(); p.deg() >= q.deg(); i--)
    {
        wynik.setA(i, p.getA(p.deg())/q.getA(q.deg()));
        l = mult(q, add(wynik, mult2(prev_wynik, -1)));
        p = add(p, mult2(l, -1));
        prev_wynik = wynik;
    }
    reszta = p;
}
Exemplo n.º 21
0
 inline void Polynomial<T, Structure>::subtract(const Polynomial<T, Structure>& other)
 {
   for (size_type i = 0; i <= other.deg(); ++i) {
     m_coefficients[i] -= other.m_coefficients[i];
   }
 }