Why won't this compile?



Maybe you could rewrite your function using Maxima's noncommuting
multiplication instead of using explicit sums. Since A and Y are
nonconformable, you'll need to tinker. Try something like:

partial_product(m,x,i) := block([maperror : false],
  xreduce("+", map("*", inpart(m,i),x)));

gg(A,b,s,VF,x,h) := block([y, listarith : true],
 y : [VF(x)],
 for i : 2 thru s do (
   y : endcons(VF(x + h * partial_product(A,y,i)), y)),
 expand(x + h * partial_product(b,y,1)));

(1) The function gg doesn't have the side-effects that fun has.

(2) Some time ago I thought maperror should be expunged. This might
be the first time I used maperror.

(3) And another bug :(

(%i2) ans1 : fun(matrix([1,1],[1,1]),[1,1],2,'f,[1,1],0.1)$
(%i3) ans2 : gg(matrix([1,1],[1,1]),[1,1],2,'f,[1,1],0.1)$
map: truncating one or more arguments.
map: calling 'apply'.

Should be [0,0]:

 (%i4) ans1 - ans2;
 (%o4) [1,1]+[-1,-1]

 (%i5) expand(%,0,0);
 (%o5) [0,0]

(4) The message from "map" is sometimes nice (debugging) but
frequently obnoxious. It would be great if Maxima had a unified way of
suppressing & managing error messages and warnings...

Barton

-----maxima-bounces at math.utexas.edu wrote: -----

>fun(A,b,s,VF,x,h):=?block([Y],
>??Y[1]:??x,
>??for?i:2?thru?s?do
>???Y[i]:??x?+?h*(sum(A[i,j]*VF(Y[j]),j,1,i-1)),
>??x:?expand(x?+?h*sum(b[i]*VF(Y[i]),i,1,s))
>??)$