lssol (ul_lssol)

	lssol(num_rows_a.i4.r, num_values_x.i4.r, num_constraints.i4.r,
	      num_rows_c.i4.r, row_length_a.i4.r, constr_coeffs.r8a.r,
	      lower_bounds.r8a.r, upper_bounds.r8a.r, cvec.r8a.r,
	      constr_status.i4a.r, a_column_order.i4a.r, array_x.r8a.r,
	      matrix_a.r8a.r, array_b.r8a.r, status.i4.r, num_iterations.i4.r,
	      objective_value.r8.r, constr_lagrange.r8a.r, workspace.i4a.r,
	      workspace_len.i4.r, real_workspace.r8a.r, real_work_len.i4.r)

	This routine solves linear least squares and convex quadratic
	programming problems.

	num_rows_a	number of rows in "array_a"
	num_values_x	number of values in "array_x"
	num_constraints	number of general linear constraints
	num_rows_c	number of rows in "array_c"
	row_length_a	number of values in a row of "array_a"
	constr_coeffs	constraint coefficients
			(at least "num_values_x" * "num_rows_c" values)
	lower_bounds	lower bounds for constraints
			(at least "num_values_x" + "num_constraints" values)
	upper_bounds	upper bounds for constraints
			(at least "num_values_x" + "num_constraints" values)
	cvec		coefficients of the linear term of the objective
			function (at least "num_values_x" values)
	constr_status	desired status of the constraints at the start of
			the feasibility phase (at least "num_values_x" +
			"num_constraints" values)
	a_column_order	order of the columns of "matrix_a" with respect
			to the ordering of "array_x" (at least "num_values_x"
			values)
	array_x		contains the initial estimate of the solution
			(at least "num_values_x" values)
	matrix_a	input/output data matrix
			(at least "row_length_a" * "num_values_x" values)
	array_b		input/output data array
			(at least "num_rows_a" values)
	status		returned status value
			(0 -> "array_x" is a strong local minimum,
			 1 -> "array_x" is a weak local minimum,
			 2 -> solution appears to be unbounded,
			 3 -> no feasible point was found,
			 4 -> iteration limit was reached,
			 5 -> algorithm could be cycling,
			 6 -> invalid input parameter)
	num_iterations	returned number of iterations performed in the
			feasibility and optimality phases
	objective_value	value of the objective function at "array_x" if
			"array_x" is feasible or the sum of the
			infeasibilities otherwise
	constr_lagrange returned array of Lagrange multipliers for every
			constraint with respect to the current working set
	workspace	workspace for LSSOL
	workspace_len	length of "workspace" (at least "num_values_x" values)
	real_workspace	workspace for LSSOL
	real_work_len	length of "real_workspace" in double precision floats
			(at least 2 * ("num_constraints" + 1) ^ 2 +
			 6 * "num_values_x" + 6 * "num_constraints" values)

	This function requires the following include files:

	ul_lssol_h:lssol_h

	Related functions:

	lsoptn(_c), lsfile

	C usage:

	int	num_rows_a = NUM_POSITIONS;
	int	num_values_x = NUM_CORRECTORS;
	int	num_constraints = 0;
	int	num_rows_c = 1;
	int	row_length_a = NUM_POSITIONS;
	int	constr_status[NUM_CORRECTORS];
	int	a_column_order[NUM_CORRECTORS];
	int	workspace[NUM_CORRECTORS];
	int	workspace_len = NUM_CORRECTORS;
	int	real_workspace_len = 9 * NUM_CORRECTORS;
	double	constr_coeffs = 0.0;
	double	lower_bounds[NUM_CORRECTORS];
	double	upper_bounds[NUM_CORRECTORS];
	double	cvec = 0.0;
	double	array_x[NUM_CORRECTORS];
	double	matrix_a[NUM_CORRECTORS][NUM_POSITIONS];
	double	array_b[NUM_POSITIONS];
	double	constr_lagrange[NUM_CORRECTORS];
	double	real_workspace[9*NUM_CORRECTORS];

	lssol(&num_rows_a,&num_values_x,&num_constraints,&num_rows_c,
	      &row_length_a,&constr_coeffs,lower_bounds,upper_bounds,
	      &cvec,constr_status,a_column_order,array_x,(double *) matrix_a,
	      array_b,&status,&num_iterations,&objective_value,
	      constr_lagrange,workspace,&workspace_len,real_workspace,
	      &real_work_len);