void guardaTeste() { FILE *p; p = fopen ("teste.txt", "w+"); //vai ate o final do arquivo - nao esta funcionando! char c = getc(p); while(c != EOF) c = getc(p); fprintf(p, "\nlambida = %f\nTeta:\n", lamb); for(int i = 0; i < 14; i++) fprintf (p, "%f;",teta[i]); defineRange(0,105); //valores de treinamento fprintf(p, "\nJ(x) de valores de treinamento = %f\n", jx()); //printf("Erro de valores de treinamento = %f\n", jx()); defineRange(105,142); //valores de teste1 fprintf(p, "J(x) de valores de teste 1 = %f\n", jx()); //printf("Erro de valores de teste 1 = %f\n", jx()); defineRange(142,178); //valores de teste2 fprintf(p,"J(x) de valores de teste 2 = %f\n\n", jx()); //printf("Erro de valores de teste 2 = %f\n\n", jx()); //casos em que o erro gera decisao errada fprintf(p, "Valores com erro inaceitavel:\n"); int errado, inaceitavel; errado = inaceitavel = 0; for(int i = 0; i < 178; i++) { float erro = hx(i)-x[0][i]; if(erro > 0.5 || erro < -0.5) { errado ++; if(erro > 1.0 || erro < -1.0) inaceitavel ++; printf("i = %d\tesperado = %f\tobtido = %f\terro = %f\n",i, x[0][i], hx(i), erro); } } fprintf(p, "Erros acima de 0.5 = %d\tErros acima de 1.0 = %d\n", errado-inaceitavel, inaceitavel); fclose(p); }
Static void setRange(Char *line_) { Char line[256]; short v, p, FORLIM; Char STR1[256]; Char STR2[256]; strcpy(line, line_); line_no = orig_range_line; FORLIM = nvoices; for (v = 1; v <= FORLIM; v++) { sprintf(STR1, "%s=", voice_label[v-1]); p = strpos2(line, STR1, 1); if (p > 0) { if (strlen(line) < p + 6) { sprintf(STR2, "At least five characters must follow \"%s=\"", voice_label[v-1]); error(STR2, print); } defineRange(v, substr_(STR2, line, p + 2, 5)); } else defineRange(v, ""); } }
void calculaTeta() { defineRange(0,105); //trabalha apenas com ~60% dos casos de teste int count = 0; double ultimo_erro = 1.0, primeiro_erro = 0.0; printf("Modelo:\nteta0 + teta1*x1 + teta2*x2 + ... + teta13*x13\n\nResultados esperados para h(x):\n1, 2 ou 3\n\n"); //pega valor do erro inicial gradiente(); count++; confereErro(&ultimo_erro, count); primeiro_erro = ultimo_erro; printf("Erro inicial = %f\n", primeiro_erro); gradiente(); count++; printf("Calculando, por favor aguarde!\n\n"); //loop para achar os tetas while(confereErro(&ultimo_erro, count) == 1) { gradiente(); count++; } //adiciona valores de teta a teta.txt guardaTeta(ultimo_erro, count); //caso erro = 0.03 nao seja possivel, imprime erro inicial e menor erro encontrado if(confereErro(&ultimo_erro, count) == 2) printf("Erro inicial = %f\tErro minimo encontrado = %f\n",primeiro_erro, ultimo_erro); //valores finais de teta e numero de passos printf("teta0 = %f\tteta1 = %f\tteta2 = %f\tteta3 = %f\nteta4 = %f\tteta5 = %f\tteta6 = %f\nteta7 = %f\tteta8 = %f\tteta9 = %f\nteta10 = %f\tteta11 = %f\tteta12 = %f\nteta13 = %f\n", teta[0], teta[1], teta[2], teta[3], teta[4], teta[5], teta[6], teta[7], teta[8], teta[9], teta[10], teta[11], teta[12], teta[13]); printf("numero de passos: %d\n", count); system("pause"); }