forum.alglib.net http://forum.alglib.net/ |
|
spline1dintegrate function http://forum.alglib.net/viewtopic.php?f=2&t=3788 |
Page 1 of 1 |
Author: | vpham [ Wed Jan 25, 2017 2:22 am ] |
Post subject: | spline1dintegrate function |
Dear Support, I have an array of X nodes = [0, 1/12, 3/12, 1/2, 1, 2, 5, 10,15, 20] and a spline built successfully. I try to use the spline1dintegrate(spline,X) function to integrate the function. I have produced the results for the integration. However, I am uncertain that if the spline1dintegrate(spline,X) function integrates from the starting node in the array to next node or from each pair of the consecutive nodes? e.g. [0, 1/12], [0, 3/12], [0,1/2]..... or [0,1/12], [1/12,3/12] or [3/12, 1/2] Please help ! Many thanks. Van [#include <iostream> #include <cstdio> #include <cstdlib> #include <vector> #include <interpolation.h> #include "interpolation.cpp" #include "ap.cpp" #include "alglibinternal.cpp" #include "alglibmisc.cpp" #include "linalg.cpp" #include "solvers.cpp" #include "optimization.cpp" #include "specialfunctions.cpp" #include "integration.cpp" #include <vector> using namespace std; double B(double a,double T); double B(double a,double T) { return (1/a*(1-exp(-a*T))); } double A(double a, double b, double var, double T); double A(double a, double b, double var, double T) { return -(var/(4*a))*pow(B(a,T),2)+(b-(var/(2*pow(a,2))))*(B(a,T)-T); } double p(double T, double a, double b, double var, double r0); double p(double T, double a, double b, double var, double r0) { return exp(A(a,b,var,T)-r0*B(a,T)); } double D1G(int n, double a, double b, double c, double T); double D1G(int n, double a, double b, double c, double T) { if(n == 0){ return (1/a)*((1/a*(1-exp(-a*T)))-T); } else { return (1/a)*(pow(T,n)*B(a,T)+n*D1G(n-1,a,b,c,T)-pow(T,n+1)/(n+1)); } } double D2G(int n, double a, double b, double c, double T); double D2G(int n, double a, double b, double c, double T) { if(n == 0){ return -(1/(2*a))*pow(B(a,T),2)- (1/pow(a,2))*(B(a,T)-T); } else { //-(1/(2*a))*(T^n*B(T,a,b,sigma2)^2-n*D2G(n-1,a,b,sigma2))-(1/a^2)*(T^n*B(T,a,b,sigma2)+n*D1G(n-1,a,b,sigma2)-T^(n+1)/(n+1)); return -(1/(2*a))*(pow(T,n)*pow(B(a,T),2)-n*D2G(n-1, a, b, c, T))- (1/pow(a,2))*(pow(T,n)*B(a,T)+n*D1G(n-1, a, b, c, T)-pow(T,n+1)/(n+1)); } } int main() { double a= 3.5, b = 0.03, var = 0.3, r0 = 0.03, q2; //int i; //float X[9], Y[9]; std::vector<double> X(9), Y(9); X[0]=0; X[1]=1.0/12; X[2]=0.25; X[3]=0.5; X[4]=1; X[5]=2; X[6]=5; X[7]=10; X[8]=15; X[9]=20; /*for (i=0;i<10;i++){ cout << "x:" << X[i]<< ", f(x):"; Y[i] = X[i]*log(p(X[i],a,b,var,r0)); cout << Y[i] << endl; }*/ cout << "\n"<< endl; for (int n = 0; n<3; n++){ Y[0] = pow(X[0],n)*log(p(X[0],a,b,var,r0)); Y[1] = pow(X[1],n)*log(p(X[1],a,b,var,r0)); Y[2] = pow(X[2],n)*log(p(X[2],a,b,var,r0)); Y[3] = pow(X[3],n)*log(p(X[3],a,b,var,r0)); Y[4] = pow(X[4],n)*log(p(X[4],a,b,var,r0)); Y[5] = pow(X[5],n)*log(p(X[5],a,b,var,r0)); Y[6] = pow(X[6],n)*log(p(X[6],a,b,var,r0)); Y[7] = pow(X[7],n)*log(p(X[7],a,b,var,r0)); Y[8] = pow(X[8],n)*log(p(X[8],a,b,var,r0)); Y[9] = pow(X[9],n)*log(p(X[9],a,b,var,r0)); } alglib::real_1d_array AX, AY; // alglib building vector X and Y AX.setcontent(X.size(), &(X[0])); AY.setcontent(Y.size(), &(Y[0])); alglib::spline1dinterpolant spline; //alglib defining a spline alglib::spline1dbuildlinear(AX, AY,spline); //alglib building the linear spline for (int i = 0; i <10;i++){ q2 = spline1dintegrate(spline,X[i]); cout <<q2 << endl; } //cout <<q2 << endl; //alglib integrating at value X = 20 //int k =2; //double T = 20.0; //(T^(n+1)/(n+1))*A(T,a,b,sigma2)-(sigma2/(2*(n+1)))*D2G(n+1,a,b,sigma2) ... // -(a*b/(n+1))*D1G(n+1,a,b,sigma2)+r0*D1G(n,a,b,sigma2)-q(n); //cout <<(pow(T,k+1)/(k+1))*A(a,b,var,T)-(var/(2*(k+1)))*D2G(k+1,a,b, var,T)-(a*b/(k+1))*D1G(k+1,a,b, var,T)+r0*D1G(k,a,b, var,T)<< endl; return EXIT_SUCCESS; }] |
Author: | Sergey.Bochkanov [ Fri Jan 27, 2017 3:21 pm ] |
Post subject: | Re: spline1dintegrate function |
Hi! It calculates integral with fixed lower bound equal to min(x[]). In your case it calculates integral(S(x)dx,0,t) for t=1/12, 3/12 and so on. |
Author: | vpham [ Mon Jan 30, 2017 3:29 am ] |
Post subject: | Re: spline1dintegrate function |
Dear Sergey, Thank you so much. Cheers, Van |
Author: | vpham [ Mon Jan 30, 2017 3:37 am ] |
Post subject: | Re: spline1dintegrate function |
Dear Sergey, I also have another query in regards to the spline1dbuildlinear(AX, AY,spline) function. As I understand that the function currently only accepts array of physical values, if I have X nodes = [0, 1/12, 3/12, 1/2, 1, 2, 5, 10,15, 20] and Y[i] = X[i]*log(p(X[i],a,b,var,r0)), how do I store the values of Y[i] as array to apply to the spline1dbuildlinear(AX, AY,spline) function ? Your help is much appreciated. Many thanks. Cheers, Van |
Author: | Sergey.Bochkanov [ Mon Jan 30, 2017 10:11 am ] |
Post subject: | Re: spline1dintegrate function |
See separate topic on this question :) |
Page 1 of 1 | All times are UTC |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |