SYNOPSIS
#include "matrix.h" VEC *v_lincomb(int n, VEC *v_list[], double a_list[], VEC *out) VEC *v_linlist(VEC *out, VEC *v1, double a1, VEC *v2, double a2, ..., VNULL)
#include "zmatrix.h" ZVEC *zv_lincomb(int n, ZVEC *v_list[], complex a_list[], ZVEC *out) ZVEC *zv_linlist(ZVEC *out, ZVEC *v1, complex a1, ZVEC *v2, complex a2, ..., ZVNULL)
DESCRIPTION
The routines v_lincomb() and zv_lincomb() compute the linear combination $\sum_{i=0}^{n-1}a_iv_i$ where $v_i$ is identified with v_list[i] and $a_i$ is identified with a_list[i]. The result is stored in out, which is created or resized as necessary. Note that n is the length\/ of the lists. An E_INSITU error will be raised if out == v_list[i] for any i other than i == 0. The routines v_linlist() and zv_linlist() are variants of the above which do not require setting up an array before hand. This returns $\sum_i a_iv_i$ where the sum is over $i=1,2,\dots$ until a VNULL is reached, which should take the place of one of the vk's. An E_INSITU error will be raised if out == v2, v3, v4,....
EXAMPLE
VEC *x[10], *v1, *v2, *v3, *v4, *out; Real a[10], h; ...... for ( i = 0; i < 10; i++ ) { x[i] = ...; a[i] = ...; } out = v_lincomb(10,x,a,VNULL) /* for Runge--Kutta code: out = h/6*(v1+2*v2+2*v3+v4) */ v_zero(out); out = v_linlist(out, v1, h/6.0, v2, h/3.0, v3, h/3.0, v4, h/6.0, VNULL);
SEE ALSO: sv_mlt(), v_mltadd(), zv_mlt(), zv_mltadd()
BUGS
SOURCE FILE: vecop.c, zvecop.c