next up previous contents
Next: Literatur Up: Kurzeinführung in Singular Previous: Aufgaben

Lösungen

Lösung zu Aufgabe 1:
proc binomi (int n, int k)
"USAGE: binomi(n,k); int n, int k
RETURN: int, Binomialkoeffizient n ueber k
KEYWORDS: Binomialkoeffizient
EXAMPLE: example binomi; zeigt ein Beispiel"
{
if ((k < 0) or (k > n))
{
return(0);
}
else
{
int i;
int nenner,zaehler1,zaehler2 = 1,1,1;
for (i=1;i<=n;i++)
{
nenner = nenner * i;
}
for (i=1;i<=k;i++)
{
zaehler1 = zaehler1 * i;
}
for (i=1;i<=n-k;i++)
{
zaehler2 = zaehler2 *i;
}
return (nenner / (zaehler1 * zaehler2));
}
}
example
{
"Beispiel:";
echo = 2;
binomi(5,2);
binomi(7,5);
}

Lösung zu Aufgabe 2:
proc quadratsumme (int n)
"USAGE: quadratsumme(n); int n
RETURN: int, Summe der ersten n Quadratzahlen
KEYWORDS: Quadratzahlen
EXAMPLE: example quadratsumme; zeigt ein Beispiel"
{
if (n < 0)
{
return (0);
}
else
{
int i;
int ergebnis = 0;
for (i=1;i<=n;i++)
{
ergebnis = ergebnis + i*i;
}
return (ergebnis);
}
}
example
{
"Beispiel:";
echo = 2;
quadratsumme(3);
quadratsumme(5);
}

Lösung zu Aufgabe 3:
proc minimum (intvec iv)
"USAGE: minimum(iv); iv intvector
RETURN: int, the minimum of the entries in iv
KEYWORDS: minimum
EXAMPLE: example minium; shows an example"
{
int i;
int k=size(iv);
int ergebnis=iv[1];
for (i=2;i<=k;i++)
{
if (iv[i] < ergebnis)
{
ergebnis=iv[i];
}
}
return(ergebnis);
}
example
{
"EXAMPLE:";
echo=2;
intvec iv=3,2,5,2,1;
print(iv);
minimum(iv);
iv =-3,4,5,3,-6,7;
print(iv);
minimum(iv);
}

Lösung zu Aufgabe 4:

1.
Wir schreiben zunächst eine eigene kurze Prozedur zum Berechnen des Absolutbetrages. proc abs_val (poly r)
"USAGE: abs_val(r); poly r - eine rationale/reelle Zahl
RETURN: poly, gibt den Absolutbetrag von r wieder, falls r eine reelle Zahl
KEYWORDS: Absolutbetrag
EXAMPLE: example abs_value; zeigt ein Beispiel"
{
if (r < 0)
{
return(-r);
}
else
{
return(r);
}
}
example
{
"Beispiel:";
echo = 2;
ring r=real,x,lp;
abs_val(-5.45);
ring s=0,x,lp;
abs_val(-4/5);
}


proc zeilensummennorm (matrix A)
"USAGE: zeilensummennorm(A); matrix A mit rationalen/reellen Eintraegen
RETURN: poly, gibt die Zeilensummennorm von A wieder
KEYWORDS: Matrixnorm, Zeilensummennorm
EXAMPLE: example zeilensummennorm; zeigt ein Beispiel"
{
int i,j;
int n,m = ncols(A),nrows(A);
poly r,s = 0,0;
for (i=1;i<=m;i++)
{
for (j=1;j<=n;j++)
{
r = r + abs(A[i,j]);
}
if (r > s)
{
s = r;
}
r = 0;
}
return (s);
}
example
{
"Beispiel:";
echo = 2;
ring r=real,x,lp;
matrix A[3][2]=-3,-2,-1,3,-4,2;
print(A);
zeilensummennorm(A);
ring r=0,x,lp;
matrix B[3][2]=-7,0,0,3,-4,2;
print(B);
zeilensummennorm(B);
}
2.
proc maximumsnorm (matrix A)
"USAGE: maximumsnorm(A); matrix A mit rationalen/reellen Eintraegen
RETURN: poly, gibt die Zeilensummennorm von A wieder
KEYWORDS: Matrixnorm, Maximumsnorm
EXAMPLE: example maximumsnorm; zeigt ein Beispiel"
{
int i,j;
int n,m = ncols(A),nrows(A);
poly r = 0;
for (i=1;i<=m;i++)
{
for (j=1;j<=n;j++)
{
if (abs(A[i,j]) > r)
{
r = abs(A[i,j]);
}
}
}
return(r);
}
example
{
"Beispiel:";
echo = 2;
ring r=real,x,lp;
matrix A[3][2]=-3,-2,-1,3,-4,2;
print(A);
maximumsnorm(A);
ring r=0,x,lp;
matrix B[3][2]=-7,0,0,3,-4,2;
print(B);
maximumsnorm(B);
}
3.
proc q_eukl_norm (matrix A)
"USAGE: q_eukl_norm(A); matrix A mit rationalen/reellen Eintraegen
RETURN: poly, gibt das Quadrat der euklidischen Norm von A wieder
KEYWORDS: Matrixnorm, Euklidische Norm
EXAMPLE: example q_eukl_norm; zeigt ein Beispiel"
{
int i,j;
int n,m = ncols(A),nrows(A);
poly r = 0;
for (i=1;i<=m;i++)
{
for (j=1;j<=n;j++)
{
r = r + abs(A[i,j]) * abs(A[i,j]);
}
}
return (r);
}
example
{
"Beispiel:";
echo = 2;
ring r=real,x,lp;
matrix A[3][2]=-3,-2,-1,3,-4,2;
print(A);
q_eukl_norm(A);
ring r=0,x,lp;
matrix B[3][2]=-7,0,0,3,-4,2;
print(B);
q_eukl_norm(B);
}

Lösung zu Aufgabe 6:
proc ebenenschnitt (matrix E1, matrix E2)
"USAGE: ebenenschnitt(E1,E2); matrix E1, matrix E2 - Koeffizienten von zwei Ebenengleichungen
RETURN: list, (string,[vc,vt]), Informationen zum Schnitt von E1 und E2, ggf.
eine Parametrisierung der Schnittgeraden
KEYWORDS: Ebenenschnitt, Schnittgerade
EXAMPLE: example ebenenschnitt; zeigt ein Beispiel"
{
matrix m[2][4] = E1[1,1..4],E2[1,1..4];
list l;
matrix A[2][4] = gauss_reduction(m);
if ((A[2,2] == 0) and (A[2,3] == 0) and (A[2,4] == 0))
{
l="Die beiden Ebenen sind gleich!";
return(l);
}
else
{
if ((A[2,2] == 0) and (A[2,3] == 0) and (A[2,4] != 0))
{
l="Die beiden Ebenen sind parallel!";
return(l);
}
else
{
if (A[2,2] != 0)
{
vector vt = [-A[1,3]/A[1,1]+(A[2,3]*A[1,2])/(A[1,1]*A[2,2]),-A[2,3]/A[2,2],1];
vector vc = [A[1,4]/A[1,1]-A[2,4]/(A[1,1]*A[2,2]),A[2,4]/A[2,2],0];
l="Der Schnitt der Ebenen ist die Gerade [2] + t * [3]",vc,vt;
}
else
{
if (A[1,1] != 0)
{
vector vt = [-A[1,2]/A[1,1],1,0];
vector vc = [A[1,4]/A[1,1]-(A[1,3]*A[2,4])/(A[1,1]*A[2,3]),0,A[2,4]/A[2,3]];
l="Der Schnitt der Ebenen ist die Gerade [2] + t * [3]",vc,vt;
}
else
{
vector vt = [1,0,0];
vector vc = [0,A[1,4]/A[1,2]-(A[1,3]*A[2,4])/(A[1,2]*A[2,3]),A[2,4]/A[2,3]];
l="Der Schnitt der Ebenen ist die Gerade [2] + t * [3]",vc,vt;
}
}
}
return (l);
}
}
example
{
"Beispiel:";
echo = 2;
ring r=0,(x,y,z),lp;
matrix E1[1][4]=1,0,0,0;
print(E1);
matrix E2[1][4]=0,1,0,0;
print(E2);
list le=ebenenschnitt(E1,E2);
print(le);
matrix F1[1][4]=1,2,3,1;
print(F1);
matrix F2[1][4]=1,2,0,-1;
print(F2);
list lf=ebenenschnitt(F1,F2);
print(lf);
matrix I1[1][4]=0,2,3,1;
print(I1);
matrix I2[1][4]=0,2,0,-1;
print(I2);
list li=ebenenschnitt(I1,I2);
print(li);
matrix G1[1][4]=1,0,0,0;
print(G1);
matrix G2[1][4]=1,0,0,1;
print(G2);
list lg=ebenenschnitt(G1,G2);
print(lg);
matrix H1[1][4]=1,0,0,0;
print(H1);
matrix H2[1][4]=2,0,0,0;
print(H2);
list lh=ebenenschnitt(H1,H2);
print(lh);
}


next up previous contents
Next: Literatur Up: Kurzeinführung in Singular Previous: Aufgaben
Thomas Keilen
2000-03-03