#include <iostream>
#include <fstream>
#include <cmath>
using std::cout;
using std::endl;
using std::ofstream;
using std::ios;
long double *Exact(double *x, const int size) {
long double *f = new long double[size];
for (int i = 0; i < size; ++i) {
f[i] = exp(x[i] + sin(x[i]));
}
return f;
}
double *Intervals(double a, double h, const int size) {
double *x = new double[size];
h /= 10;
for (int i = 0; i < size; ++i) {
a += h;
x[i] = a;
}
return x;
}
long double *LSpline(double *x, long double *f, const int size) {
long double *l = new long double[size];
l[0] = f[0];
for (int a = 0; a < size - 1; a += 10) {
int b = a + 10;
long double denominator = x[b] - x[a];
if (denominator != 0) {
long double s = (f[a] - f[b]) / denominator;
for (int i = a; i <= b; ++i) {
l[i] = f[b] + (x[b] - x[i]) * s;
}
}
}
return l;
}
void Out(long double *l, double *x, long double *f, const int size) {
cout.setf(ios::left);
cout << "x F(x) L2\n";
for (int i = 0; i < size; i++) {
cout.width(7);
cout.precision(2);
cout << x[i];
cout.width(10);
cout.precision(4);
cout << f[i];
cout.width(10);
cout << l[i];
cout << endl;
}
cout << endl;
}
void FileOut(long double *l, double *x, long double *f, const int size) {
cout << "test1\n";
ofstream ffout("out.txt");
cout << "test2\n";
ffout << "x F(x) L2 R\n";
for (int i = 0; i < size; i++) {
ffout << x[i] << " " << f[i] << " " << l[i] << " " << fabs(f[i] - l[i])
<< endl;
}
ffout.close();
}
int main() {
std::cout << "a,h\n";
const int a = -4;
const int h = 1;
const int size = 51;
double *x = Intervals(a, h, size);
long double *f = Exact(x, size);
long double *l = LSpline(x, f, size);
Out(l, x, f, size);
FileOut(l, x, f, size);
delete[] l;
delete[] x;
delete[] f;
cout << "Finish";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNtYXRoPgoKdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmVuZGw7CnVzaW5nIHN0ZDo6b2ZzdHJlYW07CnVzaW5nIHN0ZDo6aW9zOwoKbG9uZyBkb3VibGUgKkV4YWN0KGRvdWJsZSAqeCwgY29uc3QgaW50IHNpemUpIHsKICBsb25nIGRvdWJsZSAqZiA9IG5ldyBsb25nIGRvdWJsZVtzaXplXTsKICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgZltpXSA9IGV4cCh4W2ldICsgc2luKHhbaV0pKTsKICB9CiAgcmV0dXJuIGY7Cn0KCmRvdWJsZSAqSW50ZXJ2YWxzKGRvdWJsZSBhLCBkb3VibGUgaCwgY29uc3QgaW50IHNpemUpIHsKICBkb3VibGUgKnggPSBuZXcgZG91YmxlW3NpemVdOwogIGggLz0gMTA7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgIGEgKz0gaDsKICAgIHhbaV0gPSBhOwogIH0KICByZXR1cm4geDsKfQoKbG9uZyBkb3VibGUgKkxTcGxpbmUoZG91YmxlICp4LCBsb25nIGRvdWJsZSAqZiwgY29uc3QgaW50IHNpemUpIHsKICBsb25nIGRvdWJsZSAqbCA9IG5ldyBsb25nIGRvdWJsZVtzaXplXTsKICBsWzBdID0gZlswXTsKICBmb3IgKGludCBhID0gMDsgYSA8IHNpemUgLSAxOyBhICs9IDEwKSB7CiAgICBpbnQgYiA9IGEgKyAxMDsKICAgIGxvbmcgZG91YmxlIGRlbm9taW5hdG9yID0geFtiXSAtIHhbYV07CiAgICBpZiAoZGVub21pbmF0b3IgIT0gMCkgewogICAgICBsb25nIGRvdWJsZSBzID0gKGZbYV0gLSBmW2JdKSAvIGRlbm9taW5hdG9yOwogICAgICBmb3IgKGludCBpID0gYTsgaSA8PSBiOyArK2kpIHsKICAgICAgICBsW2ldID0gZltiXSArICh4W2JdIC0geFtpXSkgKiBzOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBsOwp9Cgp2b2lkIE91dChsb25nIGRvdWJsZSAqbCwgZG91YmxlICp4LCBsb25nIGRvdWJsZSAqZiwgY29uc3QgaW50IHNpemUpIHsKICBjb3V0LnNldGYoaW9zOjpsZWZ0KTsKICBjb3V0IDw8ICJ4ICAgICAgRih4KSAgICAgIEwyXG4iOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICBjb3V0LndpZHRoKDcpOwogICAgY291dC5wcmVjaXNpb24oMik7CiAgICBjb3V0IDw8IHhbaV07CiAgICBjb3V0LndpZHRoKDEwKTsKICAgIGNvdXQucHJlY2lzaW9uKDQpOwogICAgY291dCA8PCBmW2ldOwogICAgY291dC53aWR0aCgxMCk7CiAgICBjb3V0IDw8IGxbaV07CiAgICBjb3V0IDw8IGVuZGw7CiAgfQogIGNvdXQgPDwgZW5kbDsKfQoKdm9pZCBGaWxlT3V0KGxvbmcgZG91YmxlICpsLCBkb3VibGUgKngsIGxvbmcgZG91YmxlICpmLCBjb25zdCBpbnQgc2l6ZSkgewogIGNvdXQgPDwgInRlc3QxXG4iOwogIG9mc3RyZWFtIGZmb3V0KCJvdXQudHh0Iik7CiAgY291dCA8PCAidGVzdDJcbiI7CiAgZmZvdXQgPDwgInggRih4KSBMMiBSXG4iOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICBmZm91dCA8PCB4W2ldIDw8ICIgIiA8PCBmW2ldIDw8ICIgIiA8PCBsW2ldIDw8ICIgIiA8PCBmYWJzKGZbaV0gLSBsW2ldKQogICAgICAgICAgPDwgZW5kbDsKICB9CiAgZmZvdXQuY2xvc2UoKTsKfQoKaW50IG1haW4oKSB7CiAgc3RkOjpjb3V0IDw8ICJhLGhcbiI7CiAgY29uc3QgaW50IGEgPSAtNDsKICBjb25zdCBpbnQgaCA9IDE7CiAgY29uc3QgaW50IHNpemUgPSA1MTsKCiAgZG91YmxlICp4ID0gSW50ZXJ2YWxzKGEsIGgsIHNpemUpOwogIGxvbmcgZG91YmxlICpmID0gRXhhY3QoeCwgc2l6ZSk7CiAgbG9uZyBkb3VibGUgKmwgPSBMU3BsaW5lKHgsIGYsIHNpemUpOwoKICBPdXQobCwgeCwgZiwgc2l6ZSk7CiAgRmlsZU91dChsLCB4LCBmLCBzaXplKTsKICBkZWxldGVbXSBsOwogIGRlbGV0ZVtdIHg7CiAgZGVsZXRlW10gZjsKICBjb3V0IDw8ICJGaW5pc2giOwp9Cg==