This is my code:
NEUZMinus:= proc(Unten, Oben, f,G,Liste,n)::real;
#Unten:= Untere Intervallgrenze; Oben:= Obere Intervallgrenze; f:= zu integrierende Funktion;
#G:= Gewicht; n:= Hinzuzufügende Knoten;
local i;
with(LinearAlgebra);
with(ListTools);
Basenwechsel:=proc(Dividend, m);
print(Anfang,Dividend,p[m]);
Koeffizient:=quo(Dividend, p[m],x);
Rest:=rem(Dividend, p[m],x);
if m=0 then
Basenwechsel:=[Koeffizient];
else
Basenwechsel:=[Koeffizient,op(Basenwechsel(Rest,m-1))];
end if;
end proc;
p[-1]:=0;
p[0]:=1;
for i from 1 to (numelems(Liste)+n)*2 do
p[i]:=(x^i-add(int(x^i*p[j]*diff(G,x),x=Unten..Oben)*p[j]/int(p[j]^2*diff(G,x),x=Unten..Oben),j=0..i-1));
print(p[i]);
c[i-1]:=coeff(p[i],x,i)/coeff(p[i-1],x,i-1);
d[i-1]:=(coeff(p[i],x,(i-1))-coeff(p[i-1],x,(i-2)))/coeff(p[i-1],x,(i-1));
if i <> 1 then
e[i-1]:=coeff(p[i]-(c[i-1]*x+d[i-1])*p[i-1],x,i-2)/coeff(p[i-2],x,i-2);
else
e[i-1]:=0;
end if;
end do;
print(Liste[1],numelems(Liste));
Hn:=mul(x-Liste[i],i=1..numelems(Liste));
print(Hn);
Koeffizienten:=Reverse(Basenwechsel(Hn,n)); #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
print(Koeffizienten,HIER);
print(c,d,e);
a[0][0]:=1;
a[1][0]:=x;
a[1][1]:=-e[1]*c[0]/c[1]+(d[0]-d[1]*c[0]/c[1])*x+c[0]/c[1]*x^2;
for s from 2 to numelems(Liste)+n do
a[s][0]:=x^s;
a[s][1]:=-e[s]*c[0]/c[s]*x^(s-1)+(d[0]-d[s]*c[0]/c[s])*x^s+c[0]/c[s]*x^(s+1);
print (coeff(a[s][1],x,s),as1s);
end do;
for s from 2 to numelems(Liste)+n do
for j from 2 to s do
print(c[j-1]*sum(coeff(a[s][j-1],x,k-1)/c[k-1]*x^k,k=abs(s-j)+2..s+j)); print(sum((d[j-1]-c[j-1]*d[k]/c[k])*coeff(a[s][j-1],x,k)*x^k,k=abs(s-j)+1..s+j-1)); print(c[j-1]*sum(e[k+1]*coeff(a[s][j-1],x,k+1)/c[k+1]*x^k,k=abs(s-j)..s+j-2));print(e[j-1]*sum(coeff(a[s][j-2],x,k)*x^k,k=s-j+2..s+j-2));
a[s][j]:=c[j-1]*sum(coeff(a[s][j-1],x,k-1)/c[k-1]*x^k,k=abs(s-j)+2..s+j)+sum((d[j-1]-c[j-1]*d[k]/c[k])*coeff(a[s][j-1],x,k)*x^k,k=abs(s-j)+1..s+j-1)-c[j-1]*sum(e[k+1]*coeff(a[s][j-1],x,k+1)/c[k+1]*x^k,k=abs(s-j)..s+j-2)+e[j-1]*sum(coeff(a[s][j-2],x,k)*x^k,k=abs(s-j)+2..s+j-2);
end do;
end do;
for s from 0 to numelems(Liste)-1 do
for j from 0 to s do
print(a[s][j], Polynom[s][j]);
end do;
end do;
M:=Matrix(n,n);
V:=Vector(n);
for s from 0 to n-1 do
for j from 0 to s do
M(s+1,j+1):=sum(coeff(a[s][j],x,k)*Koeffizienten[k+1],k=0..n);
if s<>j then
M(j+1,s+1):=M(s+1,j+1);
end if;
print(M,1);
end do;
print(testb1);print(coeff(a[n][s],x,2));print(Koeffizienten[3]);print(testb2);
V(s+1):=-sum(coeff(a[n][s],x,k)*Koeffizienten[k+1],k=0..n);
print(M,V);
end do;
print(M,V);
K:=LinearSolve(M,V);
K(n+1):=1;
print(K);
print(test2,coeff(a[max(3,2)][min(1,2)],x,2));
print(Koeffizienten[3]);
for l from 0 to n do
for m from 0 to numelems(Liste)do
print(Koeffizienten[m+1]*coeff(a[7][l],x,m),a[7][l],m,Koeff,Koeffizienten[m+1])
end do;
end do;
for l from 0 to n do
print(K(l+1)*add(Koeffizienten[m+1]*coeff(a[max(k,l)][min(k,l)],x,m),m=0..numelems(Liste)));
end do;
nNeu:=add(p[k]*add(K(l+1)*add(Koeffizienten[m+1]*coeff(a[max(k,l)][min(k,l)],x,m),m=0..numelems(Liste)),l=0..n),k=numelems(Liste)..numelems(Liste)+n);
fsolve(nNeu);
Em:=add(p[i]*K[i+1],i=0..n);
Hnm:=Hn*Em;
KnotenHnm:=fsolve(Hnm);
print(Hn,alt,Em,neu,Hnm);
print(Testergebnis,nNeu);
print(fsolve(Hnm),fsolve(nNeu));
KoeffizientenHnm:=Reverse(Basenwechsel(Hnm,n+numelems(Liste))); #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
print(KoeffizientenHnm);
h0:=int(diff(G,x),x=Unten..Oben);
b[n+numelems(Liste)+2]:=0;
b[n+numelems(Liste)+1]:=0;
for i from 1 to n+numelems(Liste) do
for j from n+numelems(Liste) by -1 to 1 do
print(test21);
b[j]:=KoeffizientenHnm[j]+(d[j]+KnotenHnm[i]*c[j])*b[j+1]+e[j+1]*b[j+2];
print(test22);
end do;
print(test23);
gxi:=quo(Hnm,x-KnotenHnm[i],x);
print(test24);
Gewichte[i]:=c[1]*b[2]*h0/gxi(i);
Delta[i]:=c[1]*b[2];
end do;
print(KnotenHnm);
print(Gewichte);
sum(Knoten[k]*Gewichte[k],k=1..n+numelems(Liste));
end proc
With the first use of the subprocedure Basenwechsel, everything works fine. With the input
NEUZMinus(-1,1,x,x,[-sqrt(3/5),0,sqrt(3/5)],4)
I get the result [0,0,0,1,0] correctly.
The following time I use it, the polynomial is different, and m is 7 in that case, so the list should have 8 entries, it just returns the same [0,0,0,1,0] again, however. Changing the polynomial in the first application to say 5*Hn results in [0,0,0,5,0] in both cases again. The procedure seems to have saved the old values and never overwrites them. How can I fix this? I have highlighted the use of the procedure with exclamation marks.
Thank you in advance!
P.S.: The lengthy result is this:
NEUZMinus(-1,1,x,x,[-sqrt(3/5),0,sqrt(3/5)],4)
x
2 1
x - -
3
3 3
x - - x
5
4 3 6 2
x + -- - - x
35 7
5 5 10 3
x + -- x - -- x
21 9
6 5 5 2 15 4
x - --- + -- x - -- x
231 11 11
7 35 105 3 21 5
x - --- x + --- x - -- x
429 143 13
8 7 28 2 14 4 28 6
x + ---- - --- x + -- x - -- x
1287 143 13 15
9 63 84 3 126 5 36 7
x + ---- x - --- x + --- x - -- x
2431 221 85 17
10 63 315 2 210 4 630 6 45 8
x - ----- + ---- x - --- x + --- x - -- x
46189 4199 323 323 19
11 33 55 3 330 5 330 7 55 9
x - ---- x + --- x - --- x + --- x - -- x
4199 323 323 133 21
12 33 198 2 2475 4 660 6 495 8 66 10
x + ----- - ---- x + ---- x - --- x + --- x - -- x
96577 7429 7429 437 161 23
13 429 2574 3 1287 5 1716 7 429 9 78 11
x + ------ x - ----- x + ---- x - ---- x + --- x - -- x
185725 37145 2185 805 115 25
14 143 1001 2 1001 4 1001 6 1001 8
x - ------- + ------ x - ---- x + ---- x - ---- x
1671525 111435 6555 1035 345
1001 10 91 12
+ ---- x - -- x
225 27
1 (1/2)
- - 15 , 3
5
/ 1 (1/2)\ / 1 (1/2)\
|x + - 15 | x |x - - 15 |
\ 5 / \ 5 /
/ 1 (1/2)\ / 1 (1/2)\ 4 3 6 2
Anfang, |x + - 15 | x |x - - 15 |, x + -- - - x
\ 5 / \ 5 / 35 7
3 3 3 3
Anfang, x - - x, x - - x
5 5
2 1
Anfang, 0, x - -
3
Anfang, 0, x
Anfang, 0, 1
[0, 0, 0, 1, 0], HIER #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
c, d, e
0, as1s
0, as1s
0, as1s
0, as1s
0, as1s
0, as1s
4 2 4
-- x + x
15
0
4 9 2
- -- - -- x
45 35
1 2
- - x
3
9 3 5
-- x + x
35
0
12 16 3
- --- x - -- x
175 63
1 3
- - x
3
12 2 8 4 6
--- x + -- x + x
175 45
0
4 8 2 25 4
- --- - --- x - -- x
175 175 99
12 2 4 4
- --- x - -- x
175 15
16 4 6
-- x + x
63
0
16 2 25 4
- --- x - -- x
245 99
1 4
- - x
3
16 3 40 5 7
--- x + --- x + x
245 231
0
64 640 3 36 5
- ---- x - ----- x - --- x
3675 14553 143
64 3 4 5
- --- x - -- x
945 15
64 2 16 4 72 6 8
---- x + --- x + --- x + x
3675 385 455
0
64 144 2 40 4 49 6
- ----- - ----- x - ---- x - --- x
11025 13475 1001 195
24 4 9 6 144 2
- --- x - -- x - ---- x
539 35 8575
25 5 7
-- x + x
99
0
400 3 36 5
- ---- x - --- x
6237 143
1 5
- - x
3
400 4 20 6 8
---- x + --- x + x
6237 117
0
80 2 500 4 49 6
- ---- x - ----- x - --- x
4851 11583 195
20 4 4 6
- --- x - -- x
297 15
80 3 40 5 7 7 9
---- x + ---- x + -- x + x
4851 1001 45
0
64 640 3 28 5 64 7
- ----- x - ----- x - --- x - --- x
14553 63063 715 255
4 5 9 7 80 3
- -- x - -- x - ---- x
91 35 4851
64 2 640 4 16 6 160 8 10
----- x + ----- x + --- x + ---- x + x
14553 63063 455 1071
0
64 128 2 80 4 224 6 81 8
- ----- - ----- x - ---- x - ---- x - --- x
43659 49049 9009 5967 323
640 4 16 6 16 8 1280 2
- ----- x - --- x - -- x - ------ x
63063 405 63 305613
36 6 8
--- x + x
143
0
100 4 49 6
- ---- x - --- x
1573 195
1 6
- - x
3
100 5 28 7 9
---- x + --- x + x
1573 165
0
1600 3 336 5 64 7
- ----- x - ---- x - --- x
99099 7865 255
48 5 4 7
- --- x - -- x
715 15
1600 4 28 6 144 8 10
----- x + --- x + --- x + x
99099 715 935
0
320 2 140 4 2352 6 81 8
- ----- x - ----- x - ----- x - --- x
77077 14157 60775 323
12 6 9 8 180 4
- --- x - -- x - ----- x
275 35 11011
320 3 320 5 32 7 216 9 11
----- x + ----- x + --- x + ---- x + x
77077 33033 935 1463
0
256 5120 3 1152 5 4608 7 100 9
- ------ x - ------- x - ------ x - ------ x - --- x
231231 2081079 133705 124355 399
64 5 256 7 16 9 25600 3
- ---- x - ---- x - -- x - ------- x
6435 6545 63 6243237
256 2 320 4 1280 6 800 8 100 10 12
------ x + ------ x + ------ x + ----- x + --- x + x
231231 127413 153153 24871 693
0
256 64 2 32000 4 1120 6 900 8 121 10
- ------ - ----- x - -------- x - ------ x - ----- x - --- x
693693 99099 15162147 138567 24871 483
8000 4 160 6 600 8 25 10 8000 2
- ------- x - ----- x - ----- x - -- x - ------- x
3270267 18513 16093 99 7630623
49 7 9
--- x + x
195
0
588 5 64 7
- ---- x - --- x
9295 255
1 7
- - x
3
588 6 112 8 10
---- x + --- x + x
9295 663
0
980 4 5488 6 81 8
- ----- x - ------ x - --- x
61347 129285 323
196 6 4 8
- ---- x - -- x
2925 15
980 5 2352 7 189 9 11
----- x + ----- x + ---- x + x
61347 60775 1235
0
2240 3 84672 5 4032 7 100 9
- ------ x - ------- x - ------ x - --- x
552123 8690825 104975 399
48 7 9 9 756 5
- ---- x - -- x - ----- x
1105 35 46475
2240 4 896 6 7776 8 40 10 12
------ x + ----- x + ------ x + --- x + x
552123 94809 230945 273
0
64 2 22400 4 127008 6 1080 8 121 10
- ----- x - ------- x - -------- x - ----- x - --- x
61347 9386091 15011425 29393 483
1792 6 48 8 16 10 2240 4
- ------ x - ---- x - -- x - ------ x
182325 1235 63 552123
64 3 22400 5 1120 7 600 9 385 11 13
----- x + ------- x + ------ x + ----- x + ---- x + x
61347 9386091 138567 19019 2691
0
256 51200 3 13440 5 2560 7 5500 9
- ------ x - -------- x - ------- x - ------ x - ------ x
920205 84474819 6605027 323323 153387
144 11
- --- x
575
22400 5 4320 7 1000 9 25 11 56000 3
- ------- x - ------ x - ----- x - -- x - -------- x
9386091 508079 27027 99 54660177
256 2 7168 4 13440 6 80000 8 100 10
------ x + -------- x + ------- x + -------- x + ---- x
920205 11471889 6605027 10669659 3289
504 12 14
+ ---- x + x
3575
0
256 3072 2 112000 4 112000 6 8100 8
- ------- - -------- x - --------- x - -------- x - ------- x
2760615 19119815 217965891 59445243 1062347
264 10 169 12
- ---- x - --- x
7475 675
89600 4 13440 6 21600 8 140 10 36 12
- --------- x - ------- x - ------- x - ---- x - --- x
149134557 6605027 2719717 3887 143
768 2
- ------- x
2924207
1, Polynom[0][0]
x, Polynom[1][0]
1 2
- + x , Polynom[1][1]
3
2
x , Polynom[2][0]
4 3
-- x + x , Polynom[2][1]
15
4 2 4 4
-- x + x + --, Polynom[2][2]
21 45
Matrix(%id = 18446745693991291350), 1
testb1
0
0
testb2
Matrix(%id = 18446745693991291350),
Vector[column](%id = 18446745693991291470)
Matrix(%id = 18446745693991291350), 1
Matrix(%id = 18446745693991291350), 1
testb1
0
0
testb2
Matrix(%id = 18446745693991291350),
Vector[column](%id = 18446745693991291470)
Matrix(%id = 18446745693991291350), 1
Matrix(%id = 18446745693991291350), 1
Matrix(%id = 18446745693991291350), 1
testb1
16
---
245
0
testb2
Matrix(%id = 18446745693991291350),
Vector[column](%id = 18446745693991291470)
Matrix(%id = 18446745693991291350), 1
Matrix(%id = 18446745693991291350), 1
Matrix(%id = 18446745693991291350), 1
Matrix(%id = 18446745693991291350), 1
testb1
0
0
testb2
Matrix(%id = 18446745693991291350),
Vector[column](%id = 18446745693991291470)
Matrix(%id = 18446745693991291350),
Vector[column](%id = 18446745693991291470)
Vector[column](%id = 18446745693991291830)
9
test2, --
35
0
7
0, x , 0, Koeff, 0
7
0, x , 1, Koeff, 0
7
0, x , 2, Koeff, 0
7
0, x , 3, Koeff, 1
49 6 8
0, --- x + x , 0, Koeff, 0
195
49 6 8
0, --- x + x , 1, Koeff, 0
195
49 6 8
0, --- x + x , 2, Koeff, 0
195
49 6 8
0, --- x + x , 3, Koeff, 1
195
112 7 9 588 5
0, --- x + x + ---- x , 0, Koeff, 0
663 9295
112 7 9 588 5
0, --- x + x + ---- x , 1, Koeff, 0
663 9295
112 7 9 588 5
0, --- x + x + ---- x , 2, Koeff, 0
663 9295
112 7 9 588 5
0, --- x + x + ---- x , 3, Koeff, 1
663 9295
2352 6 189 8 10 980 4
0, ----- x + ---- x + x + ----- x , 0, Koeff, 0
60775 1235 61347
2352 6 189 8 10 980 4
0, ----- x + ---- x + x + ----- x , 1, Koeff, 0
60775 1235 61347
2352 6 189 8 10 980 4
0, ----- x + ---- x + x + ----- x , 2, Koeff, 0
60775 1235 61347
2352 6 189 8 10 980 4
0, ----- x + ---- x + x + ----- x , 3, Koeff, 1
60775 1235 61347
896 5 7776 7 40 9 11 2240 3
0, ----- x + ------ x + --- x + x + ------ x , 0, Koeff, 0
94809 230945 273 552123
896 5 7776 7 40 9 11 2240 3
0, ----- x + ------ x + --- x + x + ------ x , 1, Koeff, 0
94809 230945 273 552123
896 5 7776 7 40 9 11 2240 3
0, ----- x + ------ x + --- x + x + ------ x , 2, Koeff, 0
94809 230945 273 552123
2240 896 5 7776 7 40 9 11 2240 3
------, ----- x + ------ x + --- x + x + ------ x , 3,
552123 94809 230945 273 552123
Koeff, 1
0
0
0
0
0
/ 1 (1/2)\ / 1 (1/2)\ 155 10 2 4
|x + - 15 | x |x - - 15 |, alt, --- - -- x + x , neu,
\ 5 / \ 5 / 891 9
/ 1 (1/2)\ / 1 (1/2)\ /155 10 2 4\
|x + - 15 | x |x - - 15 | |--- - -- x + x |
\ 5 / \ 5 / \891 9 /
Testergebnis,
2459840 5 80254400 188027200 3 2240 7
- --------- x - ----------- x + ----------- x + ------ x
193795173 44766684963 19185722127 552123
-0.9604912687, -0.7745966692, -0.4342437493, 0., 0.4342437493,
0.7745966692, 0.9604912687, -1.435338337, -0.8946894490,
-0.5176357564, 0., 0.5176357564, 0.8946894490, 1.435338337
[0, 0, 0, 1, 0] #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
test21
Error, (in NEUZMinus) invalid subscript selector