예제 #1
0
    Polynomial& operator*=(const Polynomial &q)
    {
        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;

        }

         for(i=0; i<=k; i++)
            {
                setA(i,u.getA(i));
            }
    }
예제 #2
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;
}
예제 #3
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()) ) ); 
        }
    }                                                                                                                                                                                                                                                                                                                                                                                                                           
}
예제 #4
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;
}
예제 #5
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;
}
예제 #6
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;
}
예제 #7
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;

    }
예제 #8
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;
    }
예제 #9
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;

    }
예제 #10
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;
	}
예제 #11
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;
}