source: git/Singular/LIB/solver.lib @ 917fb5

spielwiese
Last change on this file since 917fb5 was 917fb5, checked in by Hans Schönemann <hannes@…>, 24 years ago
* hannes: removed pause; (scanner.l, febase.*) introduced pause([string]) (standard.lib) git-svn-id: file:///usr/local/Singular/svn/trunk@3237 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 3.1 KB
Line 
1// $Id: solver.lib,v 1.3 1999-07-06 15:32:58 Singular Exp $
2////////////////////////////////////////////////////////////////////////////////
3// solver.lib                                                                //
4// algorithms for solving algebraic system of dimension zero                              //
5// written by Dietmar Hillebrand and ...                                                 //
6//                                                                            //
7////////////////////////////////////////////////////////////////////////////////
8
9version="$Id: solver.lib,v 1.3 1999-07-06 15:32:58 Singular Exp $";
10info="
11LIBRARY: solver.lib: PROCEDURES FOR SOLVING ZERO-DIMENSIONAL ALGEBRAIC SYSTEMS
12AUTHOR: Dietmar Hillebrand
13
14PROCEDURES:
15  triMNewton(G,a,err,itb); computes an improved approximation for
16                           a common zero of the triangular system G
17                           via multivariate Newton.
18";
19
20
21///////////////////////////////////////////////////////////////////////////////
22//
23//   Multivariate Newton for triangular systems
24//
25//
26///////////////////////////////////////////////////////////////////////////////
27
28proc triMNewton (ideal G, list a, number err, int itb)
29"USAGE:  triMNewtion(G,a,err,itb);
30             ideal G=g1,..,gn, a triangular system
31                 in n vars, i.e gi=gi(var(n-i+1),..,var(n));
32             list of numbers a, an approximation of a common zero of G,
33                 (a[i] to be substituted in var(i));
34             number err, an error bound;
35             int itb, the maximal number of iterations performed.
36RETURN:  an improved approximation for a common zero of G;
37EXAMPLE: example triMNewton; shows an example
38"
39{
40    if (itb == 0)
41    {
42        dbprint("iteration bound performed!");
43        return(a);
44    }
45
46    int i,j,k;
47    ideal p=G;
48    matrix J=jacob(G);
49    list h;
50    poly hh;
51    int fertig=1;
52    int n=nvars(basering);
53
54    for (i = 1; i <= n; i++)
55    {
56        for (j = n; j >= n-i+1; j--)
57        {
58            p[i] = subst(p[i],var(j),a[j]);
59            for (k = n; k >= n-i+1; k--)
60            {
61                J[i,k] = subst(J[i,k],var(j),a[j]);
62            }
63        }
64        if (J[i,n-i+1] == 0)
65        {
66            print("Error: ideal not radical!");
67            return();
68        }
69
70        // solve linear equations
71        hh = -p[i];
72        for (j = n; j >= n-i+2; j--)
73        {
74            hh = hh - J[i,j]*h[j];
75        }
76        h[n-i+1] = number(hh/J[i,n-i+1]);
77    }
78
79    for (i = 1; i <= n; i++)
80    {
81        if ( abs(h[i]) > err)
82        {
83            fertig = 0;
84            break;
85        }
86    }
87    if ( not fertig )
88    {
89        for (i = 1; i <= n; i++)
90        {
91            a[i] = a[i] + h[i];
92        }
93        return(triMNewton(G,a,err,itb-1));
94    }
95    else
96    {
97        return(a);
98    }
99}
100example
101{ "EXAMPLE:"; echo = 2;
102   ring r=real,(z,y,x),(lp);
103   ideal i=x^2-1,y^2+x4-3,z2-y4+x-1;
104   list a=2,3,4;
105   number e=1.0e-10;
106
107   list l = triMNewton(i,a,e,20);
108   l;
109}
110
111
112////////////////////////////////////////////////////////////////////////////////
113
114static proc abs( number r)
115{
116   if (r >= 0)
117   {
118       return(r);
119   }
120   else
121   {
122       return(-r);
123   }
124}
125
Note: See TracBrowser for help on using the repository browser.