Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<Windows.h>
- #include<iostream>
- #include<stdio.h>
- #include<math.h>
- int n;
- double *x, *y,*ch,*cy, a, b,lo;
- HDC hDC = GetDC(GetConsoleWindow());
- HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
- HPEN Pens = CreatePen(PS_SOLID, 2, RGB(0, 255, 255));
- HPEN Pene = CreatePen(PS_SOLID, 2, RGB(255, 255, 0));
- HPEN Peny = CreatePen(PS_SOLID, 2, RGB(255, 0, 125));
- double Lagrang(double x0)
- {
- int k, j;
- double sum, znam, chis;
- sum = 0;
- znam = 1;
- chis = 1;
- for (j = 0; j < n + 1; j++)
- {
- for (k = 0; k < n + 1; k++)
- {
- if (k != j)
- {
- znam = znam * (x[j] - x[k]);
- chis = chis * (x0 - x[k]);
- }
- else
- {
- znam = znam * 1;
- chis = chis * 1;
- }
- }
- sum = sum + y[j] * (chis / znam);
- chis = 1;
- znam = 1;
- }
- return sum;
- }
- double Lch(double x0)
- {
- int k, j;
- double sum, znam, chis;
- sum = 0;
- znam = 1;
- chis = 1;
- for (j = 0; j < n + 1; j++)
- {
- for (k = 0; k < n + 1; k++)
- {
- if (k != j)
- {
- znam = znam * (ch[j] - ch[k]);
- chis = chis * (x0 - ch[k]);
- }
- else
- {
- znam = znam * 1;
- chis = chis * 1;
- }
- }
- sum = sum + cy[j] * (chis / znam);
- chis = 1;
- znam = 1;
- }
- return sum;
- }
- void graf()
- {SelectObject(hDC, Pen);
- int i;
- double q, w = 0.001,c;
- q = x[0];
- MoveToEx(hDC, 50* q,150 -50*Lagrang(q), NULL);
- while (q < b)
- {
- q = q + w;
- LineTo(hDC, 50*q, 150 -50 * Lagrang(q));
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50*q, 150- 50 * Lagrang(q), NULL);
- }
- }
- void grafch()
- {
- SelectObject(hDC, Pen);
- int i;
- double q, w = 0.001, c;
- q = ch[0];
- MoveToEx(hDC, 50 * q, 350 - 50 * Lch(q), NULL);
- while (q < b)
- {
- q = q + w;
- LineTo(hDC, 50 * q, 350 - 50 * Lch(q));
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50 * q, 350 - 50 * Lch(q), NULL);
- }
- }
- void grafs()
- {
- SelectObject(hDC, Pens);
- double q, w = 0.001, c;
- q = x[0];
- MoveToEx(hDC, 50 * q, 150 -50 * sin(q), NULL);
- while (q < b)
- {
- q = q + w;
- LineTo(hDC, 50 * q, 150 - 50 * sin(q));
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50 * q, 150 - 50 * sin(q), NULL);
- }
- }
- void grafsch()
- {
- SelectObject(hDC, Pens);
- double q, w = 0.001, c;
- q = ch[0];
- MoveToEx(hDC, 50 * q, 350 - 50 * sin(q), NULL);
- while (q < b)
- {
- q = q + w;
- LineTo(hDC, 50 * q, 350 - 50 * sin(q));
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50 * q, 350 - 50 * sin(q), NULL);
- }
- }
- void epsL()
- {
- SelectObject(hDC, Pene);
- int i;
- double q, w = 0.001, c,eps;
- eps = 0;
- q = x[0];
- MoveToEx(hDC, 50 * q, 150 - 50 * (Lagrang(q)-sin(q)), NULL);
- while (q < b)
- {
- q = q + w;
- LineTo(hDC, 50 * q, 150 - 50 * (Lagrang(q) - sin(q)));
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50 * q, 150 - 50 * (Lagrang(q) - sin(q) ), NULL);
- }
- }
- void epsLch()
- {
- SelectObject(hDC, Pene);
- int i;
- double q, w = 0.001, c, eps;
- eps = 0;
- q = ch[0];
- MoveToEx(hDC, 50 * q, 350 - 50 * (Lch(q) - sin(q)), NULL);
- while (q < b)
- {
- q = q + w;
- LineTo(hDC, 50 * q, 350 - 50 * (Lch(q) - sin(q)));
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50 * q, 350 - 50 * (Lch(q) - sin(q)), NULL);
- }
- }
- void eps()
- {
- SelectObject(hDC, Peny);
- int i;
- double q, w = 0.001, c, eps;
- eps = 1;
- q = x[0];
- for (i = 0; i <= n ; i++)
- {
- eps = eps * (q - x[i]);
- }
- for (i = 1; i <= n + 1; i++)
- {
- eps = eps / i;
- }
- if (eps < 0) eps = eps * (-1);
- MoveToEx(hDC, 50 * q, 150 - 50 *eps, NULL);
- while (q < b)
- { q+= w;
- eps=1;
- for (i = 0; i <= n; i++) eps = eps* (q - x[i]);
- for (i = 1; i <= n + 1; i++)eps = eps/i;
- if (eps < 0) eps= eps * (-1);
- LineTo(hDC, 50 * q, 150 - 50 * eps);
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50 * q, 150 - 50 *eps, NULL);
- }
- }
- void epsch()
- {
- SelectObject(hDC, Peny);
- int i;
- double q, w = 0.001, c, eps;
- eps = 1;
- q = ch[0]+w;
- for (i = 0; i <= n; i++)
- {
- eps = eps * (q - ch[i]);
- }
- for (i = 1; i <= n + 1; i++)
- {
- eps = eps / i;
- }
- if (eps < 0) eps = eps * (-1);
- MoveToEx(hDC, 50 * q, 350 - 50 * eps, NULL);
- while (q < b)
- {
- q += w;
- eps = 1;
- for (i = 0; i <= n; i++) eps = eps * (q - ch[i]);
- for (i = 1; i <= n + 1; i++)eps = eps / i;
- if (eps < 0) eps = eps * (-1);
- LineTo(hDC, 50 * q, 350 - 50 * eps);
- //std::cout << Lagrang(q)<<"\n";
- MoveToEx(hDC, 50 * q, 350 - 50 * eps, NULL);
- }
- }
- int main()
- {
- int i;
- double p,pi, h;
- std::cout << "Write your kol-vo of points" << "\n";
- std::cin >> n;
- std::cout << "Write yourinterval " << "\n";
- std::cin >> a >> b;
- std::cout << "\n";
- x = new double[n + 1];
- y = new double[n + 1];
- ch = new double[n + 1];
- cy = new double[n + 1];
- p = ( b-a) / n;
- pi = 3.1415;
- for (i = 0; i < n + 1; i++)
- {
- x[i] = a + i * p;
- y[i] = sin(x[i]);
- }
- ch[0] = a;
- cy[0] = sin(a);
- for (i = 1; i < n ; i++)
- {
- ch[i] = ((b - a)*cos((2 * i + 1)*pi / (2 * n + 2))+a+b) / 2;
- cy[i] = sin(ch[i]);
- }
- /*for (i = 0; i < n + 1; i++)
- {
- std::cout <<sin(x[i])<<" " <<Lagrang(x[i])<<"\n";
- }*/
- graf();//построение интерполянта
- grafs();//построение sin
- epsL();//построение точной погрешности
- eps();//построение приближенной погрешности
- grafch();
- grafsch();
- epsLch();
- epsch();
- std::cin >> h;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement