Пример #1
0
double
Polynomial::evaluate_x_y_z( double x, double y, double z )
{
	assign( "x", x );
	assign( "y", y );
	assign( "z", z );
	return evaluator_evaluate_x_y_z( m_e, x, y, z );
}
Пример #2
0
char *me_change_string(char *string, int opt, me_t * me)
{
	void *f = NULL, *f_prim = NULL;
	char *sep_ptr;
	char *str = NULL;

	char **names = NULL;
	int count = 0;

	char *f_prim_str = NULL;

	char *vars_str = NULL;

	double res = 0, res_prim = 0;

	debug(NULL, "me_change_string: Entered: %s\n", string);

	if (!me || !string)
		return NULL;

	sep_ptr = str_find_sep(string);
	if (sep_ptr)
		string = sep_ptr;

	if (!strlen(string))
		return NULL;

	f = evaluator_create(string);
	if (!f)
		return NULL;

	evaluator_get_variables(f, &names, &count);

	if (!names)
		goto cleanup;

	vars_str =
	    array_to_str((void **)names, count, (char *(*)(void *))strdup);
	if (!vars_str)
		goto cleanup;

	f_prim = evaluator_derivative_x(f);

	if (!f_prim)
		goto cleanup;

	f_prim_str = evaluator_get_string(f_prim);

	res = evaluator_evaluate_x_y_z(f, me->x, me->y, me->z);
	res_prim = evaluator_evaluate_x_y_z(f_prim, me->x, me->y, me->z);

	str =
	    str_unite("f(x,y,z)=%f ... vars={%s} ::: f'(x)=%s=%f", res,
		      vars_str, f_prim_str, res_prim);

 cleanup:
	if (f_prim)
		evaluator_destroy(f_prim);

	if (f)
		evaluator_destroy(f);

	if (vars_str)
		free(vars_str);

	return str;
}