Singular
https://www.singular.uni-kl.de/forum/

is modulo function equal to reduce function?
https://www.singular.uni-kl.de/forum/viewtopic.php?f=10&t=2048
Page 1 of 1

Author:  programmer [ Tue Feb 07, 2012 12:00 pm ]
Post subject:  is modulo function equal to reduce function?

actually i do not understand the language of scheme

but i find a reduce function which is a reduce q modulo p, name is quite similar to the modulo, but q is one polynomial and p is a list of polynomial

is reduce function equal to modulo in singular?
if so, for matrix case, if running q on every element of matrix, what is p ? does this p a list of polynomials equal to the row of polynomials of q? or column of q?

public string Reduce(string p, List<string> Q, List<String> order)
{
string r = p;
string q = "0";
string f = "";
Dictionary<String, double> Rrq = new Dictionary<String, double>();
Dictionary<String, double> temp = new Dictionary<String, double>();
// only assume three variables
Dictionary<String,double> order0 = new Dictionary<String, double>();
Dictionary<String,double> order1 = new Dictionary<String,double>();
Dictionary<String,double> order2 = new Dictionary<String,double>();
foreach (String s in Q)
{
int counter = 0;
while(max_deg_var(s)!=order[counter])
{
counter += 1;
}
if (counter == 0)
order0.Add(s, max_deg(s));
if (counter == 1)
order1.Add(s, max_deg(s));
if (counter == 2)
order2.Add(s, max_deg(s));
}
foreach (KeyValuePair<String, double> s in order0.OrderByDescending(k => k.Value))
Rrq.Add(s.Key, s.Value);
foreach (KeyValuePair<String, double> s in order1.OrderByDescending(k => k.Value))
Rrq.Add(s.Key, s.Value);
foreach (KeyValuePair<String, double> s in order2.OrderByDescending(k => k.Value))
Rrq.Add(s.Key, s.Value);

string Mr = "";

while (r != "0")
{
f = selectpoly(r, Rrq, order[0]);
int counter = 0;
while (!string.IsNullOrEmpty(f))
{
if (counter == 3)
Console.WriteLine("");
r = Expand(r + "-(" + Expand(selectpoly_reducer_term(r, Rrq, order[0]) + "*(" + f + ")") + ")");
counter += 1;
//debug
//r = "-3*x*y+5*x-15*x^3-2.857142857*y^3+50*x^2+10*y^2+.428571428571429";
// -3*x*y+5*x-15*x^3-2.85714285714286*y^3+50*x^2+10*y^2+0.42857
f = selectpoly(r, Rrq, order[0]);
}
Mr = Mr_Term(r, Rrq, order[0]);
if (!string.IsNullOrEmpty(Mr))
{
q = Expand(q + "+" + Mr);
r = Expand(r + "-(" + Mr + ")");
}
else
{
return r;
}
}
return q;
}

public List<String> getMonomialList(String q)
{
List<String> result = new List<String>();
List<Term> temp = get_list(q);
foreach (Term t in temp)
{
List<Term> r = new List<Term>();
r.Add(t);
result.Add(get_result(r));
}
return result;
}
public string selectpoly(String q, Dictionary<String, double> Rrq, string main_variable)
{
List<String> qx = getMonomialList(q);
foreach (KeyValuePair<String, double> kv in Rrq)
{
foreach(String t in qx)
{
if (!Divide(t, LeadTerm(kv.Key, main_variable)).Contains("^-"))
{
return kv.Key;
}
}
}
return "";
}
public string selectpoly_reducer_term(String q, Dictionary<String, double> Rrq, string main_variable)
{
List<String> qx = getMonomialList(q);
foreach (KeyValuePair<String, double> kv in Rrq)
{
foreach (String t in qx)
{
if (!Divide(t, LeadTerm(kv.Key, main_variable)).Contains("^-"))
{
return Divide(t, LeadTerm(kv.Key, main_variable));
}
}
}
return "";
}
public string Mr_Term(String q, Dictionary<String, double> Rrq, string main_variable)
{
List<String> qx = getMonomialList(q);
foreach (KeyValuePair<String, double> kv in Rrq)
{
foreach (String t in qx)
{
if (!Divide(t, LeadTerm(kv.Key, main_variable)).Contains("^-"))
{
return t;
}
}
}
return "";
}

Author:  Guest [ Tue Feb 07, 2012 12:14 pm ]
Post subject:  Re: is modulo function equal to reduce function?

Code:
        public string[,] kontraHom(string[,] M, int s)
        {
            int n = M.GetLength(1);
            int m = M.GetLength(0);
            int a,b,c;
            string[,] R = new string[s*n,s*m];
            for(b=1;b<=m;b++)
            {
                for(a=1;a<=s;a++)
                {
                    for(c=1;c<=n;c++)
                    {
                        R[(a-1)*n+c,(a-1)*m+b]=M[b,c];
                    }
                }
            }
            return(R);
        }
        public string[,] kohom(string[,] M, int s)
        {
            int n=M.GetLength(1);
            int m=M.GetLength(0);
            int a,b,c;
            string[,] R = new string[s*m,s*n];
            for(b=1;b<=s;b++)
            {
                for(a=1;a<=m;a++)
                {
                    for(c=1;c<=n;c++)
                    {
                        R[(a-1)*s+b,(c-1)*s+b]=M[a,c];
                    }
                }
            }
            return(R);
        }
        public string[,] Hom(string[,] M, string[,] N, List<string> order)
        {
            string[,] F = kontraHom(M, N.GetLength(0));
            string[,] B = kohom(N, M.GetLength(1));
            string[,] C = kohom(N, M.GetLength(0));
            string[,] D = modulo(F, B, order);
            string[,] E = modulo(D, C, order);
            //string[,] D = modulo(F, B);
            //string[,] E = modulo(D, C);
            return (E);
        }
        public string[,] modulo(string[,] A, string[,] B, List<string> order)
        {
            string[,] R = new string[A.GetLength(0),A.GetLength(1)];
            List<List<string>> m = new List<List<string>>();
            for (int row = 0; row < B.GetLength(0); row++)
            {
                List<String> reduce_p = new List<String>();
                for (int col = 0; col < B.GetLength(1); col++)
                {
                    reduce_p.Add(B[row, col]);
                }
                m.Add(reduce_p);
            }
            for (int row = 0; row < A.GetLength(0); row++)
            {
                for (int col = 0; col < A.GetLength(1); col++)
                {
                    R[row, col] = Reduce(A[row, col], m[row], order);
                }
            }
            return R;
        }

Author:  Guest [ Tue Feb 07, 2012 12:15 pm ]
Post subject:  Re: is modulo function equal to reduce function?

do not know how modulo it is
is it following?
Programmer wrote:
Code:
        public string[,] kontraHom(string[,] M, int s)
        {
            int n = M.GetLength(1);
            int m = M.GetLength(0);
            int a,b,c;
            string[,] R = new string[s*n,s*m];
            for(b=1;b<=m;b++)
            {
                for(a=1;a<=s;a++)
                {
                    for(c=1;c<=n;c++)
                    {
                        R[(a-1)*n+c,(a-1)*m+b]=M[b,c];
                    }
                }
            }
            return(R);
        }
        public string[,] kohom(string[,] M, int s)
        {
            int n=M.GetLength(1);
            int m=M.GetLength(0);
            int a,b,c;
            string[,] R = new string[s*m,s*n];
            for(b=1;b<=s;b++)
            {
                for(a=1;a<=m;a++)
                {
                    for(c=1;c<=n;c++)
                    {
                        R[(a-1)*s+b,(c-1)*s+b]=M[a,c];
                    }
                }
            }
            return(R);
        }
        public string[,] Hom(string[,] M, string[,] N, List<string> order)
        {
            string[,] F = kontraHom(M, N.GetLength(0));
            string[,] B = kohom(N, M.GetLength(1));
            string[,] C = kohom(N, M.GetLength(0));
            string[,] D = modulo(F, B, order);
            string[,] E = modulo(D, C, order);
            //string[,] D = modulo(F, B);
            //string[,] E = modulo(D, C);
            return (E);
        }
        public string[,] modulo(string[,] A, string[,] B, List<string> order)
        {
            string[,] R = new string[A.GetLength(0),A.GetLength(1)];
            List<List<string>> m = new List<List<string>>();
            for (int row = 0; row < B.GetLength(0); row++)
            {
                List<String> reduce_p = new List<String>();
                for (int col = 0; col < B.GetLength(1); col++)
                {
                    reduce_p.Add(B[row, col]);
                }
                m.Add(reduce_p);
            }
            for (int row = 0; row < A.GetLength(0); row++)
            {
                for (int col = 0; col < A.GetLength(1); col++)
                {
                    R[row, col] = Reduce(A[row, col], m[row], order);
                }
            }
            return R;
        }

Page 1 of 1 All times are UTC + 1 hour [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/