// Create the 1-best derivation for each edge in BS(v) (except the best one) // and add it to v's candidate queue. void KBestExtractor::GetCandidates(boost::shared_ptr<KVertex> v, std::size_t k) { // Create 1-best derivations for all of v's incoming edges except the best. // The 1-best derivation for that edge will already have been created. for (std::size_t i = 0; i < v->svertex.recombined.size(); ++i) { const SHyperedge ­peredge = *(v->svertex.recombined[i]); boost::shared_ptr<KHyperedge> bestEdge(new KHyperedge(shyperedge)); bestEdge->head = v; // Count the number of incoming vertices that are not terminals. std::size_t kTailSize = 0; for (std::size_t j = 0; j < shyperedge.tail.size(); ++j) { const SVertex *pred = shyperedge.tail[j]; if (pred->best) { ++kTailSize; } } bestEdge->tail.reserve(kTailSize); for (std::size_t j = 0; j < shyperedge.tail.size(); ++j) { const SVertex *pred = shyperedge.tail[j]; if (pred->best) { bestEdge->tail.push_back(FindOrCreateVertex(*pred)); } } boost::shared_ptr<Derivation> derivation(new Derivation(bestEdge)); #ifndef NDEBUG std::pair<DerivationSet::iterator, bool> q = #endif m_derivations.insert(derivation); assert(q.second); v->candidates.push(derivation); } }
int main() { functions(); multi_variable_functions(); derivation(); more_about_derivation(); higher_level_derivatives(); more_functions(); higher_order_functions(); simplifications(); integers(); #ifdef AUTO_DERIVE_COMPLEX_TESTS complex_variables(); #endif }
int main(int argc, char** argv) { int n = 0, m = 0, i = 0, taille = 0; char v; NodePtr tab[50], node; do { printf("1- Saisir une expression\n2- Selectionner une expression\n"); scanf("%d", &n); switch (n) { case 1: if (taille < 50) { getchar(); node = saisie_expression(); if(node != NULL) { taille++; tab[taille]= node; affiche_expression(tab[taille]); } printf("\n\n"); } else printf("Erreur. Trop d'expressions ont ete saisies.\n"); break; case 2: if (taille > 0) { for (i = 1; i <= taille; i++) { printf("%d- ", i); affiche_expression(tab[i]); printf("\n"); } scanf("%d", &n); printf("\nFonctions a executer :\n" "1- Affichage pre-ordre\n" "2- Affichage in-ordre\n" "3- Affichage post-ordre\n" "4- Duplication\n" "5- Calcul\n" "6- Developpement\n" "7- Derivation\n" "8- Affichage\n" ); scanf("%d", &m); switch (m) { case 1: pre_ordre(tab[n]); printf("\n\n"); break; case 2: in_ordre(tab[n]); printf("\n\n"); break; case 3: post_ordre(tab[n]); printf("\n\n"); break; case 4: taille++; tab[taille] = clone(tab[n]); printf("Nouvelle expression generee.\n\n"); break; case 5: calcul(tab[n]); printf("\nResultat :\n"); affiche_expression(tab[n]); printf("\n\n"); break; case 6: developpement(tab[n]); printf("\nResultat :\n"); affiche_expression(tab[n]); printf("\n\n"); break; case 7: printf("\nSaisir la variable de derivation\n"); getchar(); scanf("%c", &v); derivation(tab[n], v); printf("\nResultat :\n"); affiche_expression(tab[n]); printf("\n\n"); break; case 8: affiche_expression(tab[n]); printf("\n\n"); break; } } else printf("Aucune expression n'a ete saisie.\n"); break; } } while (n > 0); for (i = 1; i <= taille; i++) liberer_noeud(tab[i]); return (EXIT_SUCCESS); }
double LeastSquares::newton(std::vector<double> equation, double x){ std::vector<double> numerator = derivation(equation); return (x - (this->equationSolution(equation, x) / (this->equationSolution(numerator, x)))); }