19 auto line = [](
double x0,
double y0,
double x1,
double y1) {
20 double a1 = (y1 - y0) / (x1 - x0);
21 double a0 = y1 - a1 * x1;
22 return std::make_pair(a0, a1);
28 auto lininterp = [](
double a0,
double a1,
double x) {
37 std::vector<double> xvalues(20), yvalues(20);
40 std::generate(xvalues.begin(), xvalues.end(), [&xval]() {
44 std::transform(xvalues.begin(),
47 [](
double x) {
return std::cos(x); });
53 const double x = 1.23;
55 auto itr = std::upper_bound(xvalues.begin(), xvalues.end(), x);
57 if (itr != xvalues.end()) {
59 auto idx =
static_cast<size_t>(std::distance(xvalues.begin(), itr));
60 std::cout <<
"found index: " << idx
61 <<
" with x=" << xvalues[idx]
62 <<
" and y=" << yvalues[idx] << std::endl;
63 const double x0 = xvalues[idx - 1];
64 const double x1 = xvalues[idx];
65 const double y0 = yvalues[idx - 1];
66 const double y1 = yvalues[idx];
67 auto [a0, a1] = line(x0, y0, x1, y1);
68 std::cout <<
"(x0,y0)=(" << x0 <<
"," << y0 <<
")" << std::endl;
69 std::cout <<
"(x1,y1)=(" << x1 <<
"," << y1 <<
")" << std::endl;
70 std::cout <<
"(a0,a1)=(" << a0 <<
"," << a1 <<
")" << std::endl;
71 std::cout <<
"x=" << x << std::endl;
72 std::cout <<
"interpolated value:" << lininterp(a0, a1, x) << std::endl;
73 std::cout <<
"true value:" << std::cos(x) << std::endl;
void ex1()
ex1 Berechnung von Daten mittels linearer Interpolation.