void LPCAnalysis::update(float * newinput, float * newsource, float * output, int numSamples, int p) { int i; int left= windowsize-pos; if(numSamples>=left) { for (i=0; i<left;++i) { input[pos++]= newinput[i]; } //output up to here calculateOutput(newsource, output, windowsize-left, left); //update numpoles=p; calculatePoles(); pos=0; int remainder= numSamples-left; for (i=0; i<remainder;++i) { input[pos++]= newinput[left+i]; } //output too calculateOutput(newsource+left, output+left, pos-remainder, remainder); } else { for (i=0; i<numSamples;++i) { input[pos++]= newinput[i]; } //output calculateOutput(newsource, output, pos-numSamples, numSamples); } //return output; }
void FractalGenerator::calculateRegion( const QRect& region ) { GeneratorCore::Input input; calculateInput( &input, region ); GeneratorCore::Output output; calculateOutput( &output, region ); int maxIterations = maximumIterations(); double threshold = m_settings.detailThreshold(); m_mutex.unlock(); #if defined( HAVE_SSE2 ) if ( m_functorSSE2 ) { GeneratorCore::generatePreviewSSE2( input, output, m_functorSSE2, maxIterations ); GeneratorCore::interpolate( output ); GeneratorCore::generateDetailsSSE2( input, output, m_functorSSE2, maxIterations, threshold ); } else #endif if ( m_functor ) { GeneratorCore::generatePreview( input, output, m_functor, maxIterations ); GeneratorCore::interpolate( output ); GeneratorCore::generateDetails( input, output, m_functor, maxIterations, threshold ); } m_mutex.lock(); appendValidRegion( region ); if ( !m_preview && m_update == NoUpdate ) postUpdate( PartialUpdate ); }
/** * x - argument vetor * y - value vector (calculated according to script) */ void Snakes::on_drawButton_clicked() { double xMin = ui.xMinBox->value(); double xMax = ui.xMaxBox->value(); if (xMin >= xMax) { QMessageBox msgBox; msgBox.setText("Error: Xmin > Xmax !"); msgBox.exec(); return; } int pointsCounter = ui.pointsCounterBox->value(); if (pointsCounter < 1) { QMessageBox msgBox; msgBox.setText("Error: Points counter < 1 !"); msgBox.exec(); return; } //Aquiring and calculating data double increment = (xMax - xMin) / pointsCounter; std::vector<double> x; x.push_back(xMin); for (int i=1; i<pointsCounter; i++) { x.push_back(x.back() + increment); } //TODO name of plot //Drawing plot for (std::list<QString>::iterator it = scriptFileNames.begin(); it != scriptFileNames.end(); ++it) { try { std::vector<double> y = calculateOutput(x, *it); drawPlot(x, y); } catch (ScriptException ex) { //Removing corrupted script file QByteArray byteArray = it->toLatin1(); const char *filename = byteArray.data(); remove(filename); //Removing corrupted script reference scriptFileNames.erase(it); //Error message QMessageBox msgBox; msgBox.setText("Error: failed to load script"); msgBox.exec(); } } }
int main(int argc, char *argv[]) { srand(time(NULL)); float x[208], y[208], weights[3], localError, globalError; int outputs[208], patternCount, i, p, iteration, output; FILE *fp; if ((fp = fopen("test1.txt", "r")) == NULL) { printf("Cannot open file.\n"); exit(1); } i = 0; while (fscanf(fp, "%f %f %d", &x[i], &y[i], &outputs[i]) != EOF) { if (outputs[i] == 0) { outputs[i] = -1; } i++; } patternCount = i; weights[0] = randomFloat(); weights[1] = randomFloat(); weights[2] = randomFloat(); iteration = 0; do { iteration++; globalError = 0; for (p = 0; p < patternCount; p++) { output = calculateOutput(weights, x[p], y[p]); localError = outputs[p] - output; weights[0] += LEARNING_RATE * localError * x[p]; weights[1] += LEARNING_RATE * localError * y[p]; weights[2] += LEARNING_RATE * localError; globalError += (localError*localError); } /* Root Mean Squared Error */ printf("Iteration %d : RMSE = %.4f\n", iteration, sqrt(globalError/patternCount)); } while (globalError != 0 && iteration<=MAX_ITERATION); printf("\nDecision boundary (line) equation: %.2f*x + %.2f*y + %.2f = 0\n", weights[0], weights[1], weights[2]); return 0; }
float PID::update(float actual, Timer *t) { return calculateOutput(actual, t); }
float PID::update(float actual) { return calculateOutput(actual, timer); }