Linear interpolation.
The Linear1D procedure interpolates lines between consecutive (X,Y) pairs. Linear1D does not return interpolated points. It constructs piece-wise polynomial, which can be used to evaluate ( by using the PiecePoly.Evaluate method) the linear functions. To directly obtain interpolated values, use the
routine. X values must be monotonic or the result will not be valid.
Assumes that Y is evaluated at [0,1,2,...] i.e. X values are [0,1,2,...]
Example 1
uses MtxExpr, Math387, MtxVec, MtxVecEdit, MtxVecTee,Polynoms;
procedure TForm1.Button1Click(Sender: TObject);
var X,Y,Y2: Vector;
PP : TPiecePoly;
i : Integer;
YVal : TSample;
begin
PP := TPiecePoly.Create;
try
// generate function - note that X values are monotonical
X := Ramp(100,0,1);
Y := RandUniform(100,0,50) + Ramp(100,100,0.25);
// construct cubic splines, but do not evaluate them
Linear1D(X,Y,PP);
X := Ramp(800,0,0.125); //get interpolation points
PP.Evaluate(X,Y2); // evaluate
DrawIt(Y,'Original');
DrawIt(Y2,'Interpolated');
finally
PP.Destroy;
end;
end;
#include "MtxVecCPP.h" //MtxVecCPP.cpp must be included in the project
#include "Polynoms.hpp"
#include "MtxVecTee.hpp"
#include "MtxVecEdit.hpp"
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Vector X,Y,Y2;
TPiecePoly *PP;
int i;
double YVal;
PP = new TPiecePoly();
try
{
// generate function - note that X values are monotonical
X->Size(100);
Y->Size(100);
Y2->Size(100);
X->Ramp(0,1);
Y->RandUniform(0,50);
Y2->Ramp(100,0.25);
Y += Y2;
// construct cubic splines, but do not evaluate them
Linear1D(X,Y,PP);
X->Size(800);
X->Ramp(0,0.125); //get interpolation points
PP->Evaluate(X,Y2); // evaluate
DrawIt(Y,"Original",false);
DrawIt(Y2,"Interpolated",false);
}
__finally
{
delete PP;
}
}
using Dew.Math;
using Dew.Math.Units;
using Dew.Math.Tee;
namespace Dew.Examples
{
private void Example()
{
Vector X = new Vector(0);
Vector Y = new Vector(0);
Vector Y2 = new Vector(0);
TPiecePoly PP = new TPiecePoly();
int i;
double YVal;
// generate function - note that X values are monotonical
X.Size(100);
Y.Size(100);
Y2.Size(100);
X.Ramp(0,1);
Y.RandUniform(0,50);
Y2-Ramp(100,0.25);
Y += Y2;
// construct cubic splines, but do not evaluate them
Polynoms.Linear1D(X,Y,PP);
X.Size(800);
X.Ramp(0,0.125); //get interpolation points
PP.Evaluate(X,Y2); // evaluate
TeeChart.DrawIt(Y,"Original",false);
TeeChart.DrawIt(Y2,"Interpolated",false);
}
}