From 1e16f5a132e6b0d62720adb2839c6b9df51db736 Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (laptop)" <j.wuttke@fz-juelich.de> Date: Fri, 19 Sep 2008 19:48:18 +0200 Subject: [PATCH] =?UTF-8?q?OprFunctional=20vereinfacht=20und=20um=20Ableit?= =?UTF-8?q?ung=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/opr.cpp | 58 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/src/opr.cpp b/src/opr.cpp index 03aa3fa1..2bc28f02 100644 --- a/src/opr.cpp +++ b/src/opr.cpp @@ -768,31 +768,23 @@ void NOperate::CalcAvgeDiff() //* functional operations *// //***************************************************************************// -namespace NFunctionalIntgr { - void Prep(void); - int Exec(int fno, COld *fin, COld *fout); -} - -namespace NFunctionalAC { - void Prep(void); - int Exec(int fno, COld *fin, COld *fout); - static bool normed; -} - namespace NFunctional { int (*exec) (int fno, COld *fin, COld *fout); -}; + int Deriv(int fno, COld *fin, COld *fout); + int Integr(int fno, COld *fin, COld *fout); + int Autocorr(int fno, COld *fin, COld *fout); + static bool normalized; +} void NFunctional::Opr(string cmd) { if (cmd=="fi") { - exec = NFunctionalIntgr::Exec; + exec = NFunctional::Integr; } else if (cmd=="fd") { - cout << "not implemented\n"; - //exec = NFunctionalDeriv::Exec; + exec = NFunctional::Deriv; } else if (cmd=="fac") { - NFunctionalAC::Prep(); - exec = NFunctionalAC::Exec; + normalized = bask("normalize to ac(0)=1", normalized); + exec = NFunctional::Autocorr; } else { printf("Functional operations:\n" " ofd derivative\n" @@ -804,7 +796,30 @@ void NFunctional::Opr(string cmd) NOlm::OlfLoop(exec); }; -int NFunctionalIntgr::Exec(int fno, COld *fin, COld *fout) +int NFunctional::Deriv(int fno, COld *fin, COld *fout) +{ + fout->yco.name = "d" + fin->yco.name + " / d" + fin->xco.name; + fout->yco.unit = fin->yco.unit + " / " + fin->xco.unit; + + CGrid *xin, *xout; + vector<double> *yin, *yout; + double dx; + for (uint j=0; j<fin->VS.size(); j++) { + xin = &(fin->VS[j].x); + yin = &(fin->VS[j].y); + fout->VS[j].x.clear(); + fout->VS[j].y.clear(); + for( uint i=0; i<yin->size()-1; ++i ){ + dx = (*xin)[i+1] - (*xin)[i]; + fout->VS[j].push_back( + ((*xin)[i+1] + (*xin)[i] ) / 2, + dx==0 ? 0 : ((*yin)[i+1] - (*yin)[i]) / dx ); + } + } + return 0; +} + +int NFunctional::Integr(int fno, COld *fin, COld *fout) { fout->yco.name = "Int d" + fin->xco.name + " " + fin->yco.name; fout->yco.unit = fin->xco.unit + " * " + fin->yco.unit; @@ -829,12 +844,7 @@ int NFunctionalIntgr::Exec(int fno, COld *fin, COld *fout) return 0; } -void NFunctionalAC::Prep(void) -{ - normed = bask("normalize to ac(0)=1", normed); -} - -int NFunctionalAC::Exec(int fno, COld *fin, COld *fout) +int NFunctional::Autocorr(int fno, COld *fin, COld *fout) { fout->yco.name = "ac{" + fin->yco.name + "}"; fout->yco.unit = fin->yco.unit + "^2"; -- GitLab