Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Метод Эйлера*/
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- using namespace std;
- void priblizhennoe(ofstream&out, double N, double h, double t0, double U0)
- {
- double t, u, f;
- t = t0;
- u = U0;
- //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- out << u << "\n";
- for (int i = 0; i < N; i++)
- {
- f = (4 / (t * t)) - (u / t) - (u * u);
- u = u + h * f;
- t = t + h;
- //cout << "При t" << i + 1 << " = " << t << " U" << i+1 << " = " << u << "\n";
- out << fixed << u << "\n";
- }
- }
- void tochnoe(ofstream&out, double N, double h, double t0, double U0, double C)
- {
- double t, u;
- t = t0;
- u = U0;
- //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- out << setprecision(16);
- out << u << "\n";
- for (int i = 0; i < N; i++)
- {
- t = t + h;
- u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
- //cout << "При t" << i + 1 << " = " << t << " U" << i+1 << " = " << u << "\n";
- out << u << "\n";
- }
- }
- int main()
- {
- ofstream out("pribresh.txt");
- ofstream outt("tochnoee.txt");
- setlocale(LC_ALL, "RU");
- double t0, T, h, N, U0;
- cout << "Введите область [to,T]:\n";
- cin >> t0 >> T;
- cout << "Введите N и U0: ";
- cin >> N >> U0;
- h = (T - t0) / N;
- double C;
- C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
- //cout << "Приближенные решения: \n";
- priblizhennoe(out, N, h, t0, U0);
- //cout << "Точные решения: \n";
- tochnoe(outt, N, h, t0, U0, C);
- out.close();
- outt.close();
- ifstream inout("pribresh.txt");
- ifstream inoutt("tochnoee.txt");
- ofstream outn100("n100.txt");
- ofstream outtn100("tochn100.txt");
- string s, s1;
- while (inout.peek() != EOF)
- {
- inout >> s;
- inoutt >> s1;
- for (int i = 0; i < s.length(); i++)
- {
- if (s[i] == '.')
- s[i] = ',';
- if (s1[i] == '.')
- s1[i] = ',';
- }
- outn100 << s << "\n";
- outtn100 << s1 << "\n";
- }
- inout.close();
- inoutt.close();
- outn100.close();
- outtn100.close();
- return 0;
- }
- /*Метод Рунге-Кутта*/
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- using namespace std;
- double function(double t, double u)
- {
- return 4 / (t * t) - (u / t) - (u * u);
- }
- void priblizhennoe(ofstream&out, double h, double N, double t0, double U0)
- {
- double t, u, f, k1, k2, k3, k4;
- u = U0;
- t = t0;
- //cout << "Для t0 = " << t << " U0 = " << u << "\n";
- out << setprecision(16);
- out << u << "\n";
- for (int i = 0; i < N; i++)
- {
- k1 = function(t, u);
- k2 = function(t + h / 2, u + (h * k1) / 2);
- k3 = function(t + h / 2, u + (h * k2) / 2);
- k4 = function(t + h, u + h * k3);
- u += h * (k1 + (2 * k2) + (2 * k3) + k4) / 6;
- t += h;
- //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " равно: " << u << "\n";
- out << u << "\n";
- }
- }
- void tochnoe(double N, double h, double t0, double U0, double C)
- {
- double t, u;
- t = t0;
- u = U0;
- cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- for (int i = 0; i < N; i++)
- {
- t = t + h;
- u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
- cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
- }
- }
- int main()
- {
- ofstream out("pribresh.txt");
- setlocale(LC_ALL, "RU");
- double t0, T, h, N, U0;
- cout << "Введите область [to,T]:\n";
- cin >> t0 >> T;
- cout << "Введите N и U0: ";
- cin >> N >> U0;
- h = (T - t0) / N;
- //double C;
- //C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
- //cout << "Приближенные решения: \n";
- priblizhennoe(out, h, N, t0, U0);
- out.close();
- //cout << "Точные решения: \n";
- //tochnoe(N, h, t0, U0);
- ifstream inout("pribresh.txt");
- ofstream outn100("n100.txt");
- string s;
- while (inout.peek() != EOF)
- {
- inout >> s;
- for (int i = 0; i < s.length(); i++)
- if (s[i] == '.')
- s[i] = ',';
- outn100 << s << "\n";
- }
- inout.close();
- outn100.close();
- return 0;
- }
- /*Метод посл. приближений*/
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- #define EPS 0.000001
- using namespace std;
- double f(double t, double u)
- {
- return 4 / (t * t) - u / t - (u * u);
- }
- void pribl(ofstream&out, double U0, double t0, int N, double h)
- {
- double u, un, uo, t, tnext;
- bool a;
- int maxl = 1, l; //макс кол-во итераций
- uo = u = U0;
- t = t0;
- out << setprecision(16);
- out << u << "\n";
- //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- for (int i = 0; i < N; i++)
- {
- tnext = t + h;
- un = u + h * (f(t, u) + f(tnext, uo)) / 2;
- a = true;
- l = 1;
- while (abs(un - uo) > EPS)
- {
- uo = un;
- un = u + h * (f(t, u) + f(tnext, uo)) / 2;
- a = false;
- l++;
- }
- if (l > maxl)
- maxl = l;
- if (a)
- u = un;
- else
- u = uo;
- t = tnext;
- //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
- out << u << "\n";
- }
- out << "Макс кол-во итераций = " << maxl;
- }
- void tochnoe(double N, double h, double t0, double U0, double C)
- {
- double t, u;
- t = t0;
- u = U0;
- cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- for (int i = 0; i < N; i++)
- {
- t = t + h;
- u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
- cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
- }
- }
- int main()
- {
- setlocale(LC_ALL, "RU");
- double t0, T, h, U0;
- int N;
- cout << "Введите область [to,T]:\n";
- cin >> t0 >> T;
- cout << "Введите N и U0: ";
- cin >> N >> U0;
- h = (T - t0) / N;
- double C;
- C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
- ofstream out("pribresh.txt");
- //cout << "Приближенные решения:\n";
- pribl(out, U0, t0, N, h);
- //cout << "\n";
- //cout << "Точные решения:\n";
- //tochnoe(N, h, t0, U0);
- out.close();
- ifstream in("pribresh.txt");
- ofstream outn("n100.txt");
- string s;
- while (in.peek() != EOF)
- {
- in >> s;
- for (int i = 0; i < s.length(); i++)
- if (s[i] == '.')
- s[i] = ',';
- outn << s << "\n";
- }
- in.close();
- outn.close();
- return 0;
- }
- /*Метод предиктор-корректор*/
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- using namespace std;
- double f(double t, double u)
- {
- return 4 / (t * t) - u / t - (u * u);
- }
- void pribl(ofstream&out, double u0, double t0, double h, int N)
- {
- double ue, u, t, tnext;
- u = u0;
- t = t0;
- //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- out << setprecision(16);
- out << u << "\n";
- for (int i = 0; i < N; i++)
- {
- ue = u + h * f(t, u);
- tnext = t + h;
- u = u + h * (f(t, u) + f(tnext, ue)) / 2;
- t = tnext;
- //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
- out << u << "\n";
- }
- }
- void tochnoe(double N, double h, double t0, double U0, double C)
- {
- double t, u;
- t = t0;
- u = U0;
- cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- for (int i = 0; i < N; i++)
- {
- t = t + h;
- u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
- cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
- }
- }
- int main()
- {
- setlocale(LC_ALL, "RU");
- double t0, T, h, U0;
- int N;
- cout << "Введите область [to,T]:\n";
- cin >> t0 >> T;
- cout << "Введите N и U0: ";
- cin >> N >> U0;
- h = (T - t0) / N;
- double C;
- C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
- ofstream out("pribresh.txt");
- //cout << "Приближенные решения:\n";
- pribl(out, U0, t0, h, N);
- //cout << "\n";
- //cout << "Точные решения:\n";
- //tochnoe(N, h, t0, U0);
- out.close();
- ifstream in("pribresh.txt");
- ofstream outn("n100.txt");
- string s;
- while (in.peek() != EOF)
- {
- in >> s;
- for (int i = 0; i < s.length(); i++)
- if (s[i] == '.')
- s[i] = ',';
- outn << s << "\n";
- }
- in.close();
- outn.close();
- return 0;
- }
- /*Метод Ньютона*/
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <iomanip>
- #define eps 0.000001
- using namespace std;
- double f(double t, double u)
- {
- return 4 / (t * t) - u / t - u * u;
- }
- double df(double t, double u)
- {
- return -1 / t - 2 * u;
- }
- double F(double t, double y, double x, double h)
- {
- return x - y - (h / 2) * (f(t, y) + f(t + h, x));
- }
- double dF(double t, double x, double h)
- {
- return 1 - (h / 2) * df(t + h, x);
- }
- void priblizhennoe(ofstream&out, double t0, double U0, double h, int N)
- {
- double y, t, x_prev, x_curr;
- y = U0;
- t = t0;
- bool a;
- int l, maxl = 1;
- //cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << y << "\n";
- out << setprecision(16);
- out << y << "\n";
- for (int i = 0; i < N; i++)
- {
- x_curr = 0;
- x_prev = t;
- a = true;
- l = 0;
- while (a)
- {
- x_curr = x_prev - F(t, y, x_prev, h) / dF(t, x_prev, h);
- l++;
- if (abs(x_curr - x_prev) < eps)
- a = false;
- x_prev = x_curr;
- }
- t += h;
- y = x_curr;
- if (l > maxl)
- maxl = l;
- //cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << y << "\n";
- out << y << "\n";
- }
- out << "Макс кол-во итераций = " << maxl;
- }
- void tochnoe(int N, double h, double t0, double U0, double C)
- {
- double t, u;
- t = t0;
- u = U0;
- cout << "При t" << 0 << " = " << t << " U" << 0 << " = " << u << "\n";
- for (int i = 0; i < N; i++)
- {
- t = t + h;
- u = (2 * (t * t * t * t + C)) / (t * (t * t * t * t - C));
- cout << "При t" << i + 1 << " = " << t << " U" << i + 1 << " = " << u << "\n";
- }
- }
- int main()
- {
- setlocale(LC_ALL, "RU");
- double t0, T, U0, h;
- int N;
- cout << "Введите t0 и T: \n";
- cin >> t0 >> T;
- cout << "Введите N и U0: \n";
- cin >> N >> U0;
- h = (T - t0) / N;
- double C;
- C = (t0 * t0 * t0 * t0 * (t0 * U0 - 2)) / (2 + U0 * t0);
- // cout << "Приближенные решения: \n";
- ofstream out("pribresh.txt");
- priblizhennoe(out, t0, U0, h, N);
- //cout << "\n";
- // cout << "Точные решения: \n";
- //tochnoe(N, h, t0, U0);
- out.close();
- ifstream in("pribresh.txt");
- ofstream outn("n100.txt");
- string s;
- while (in.peek() != EOF)
- {
- in >> s;
- for (int i = 0; i < s.length(); i++)
- if (s[i] == '.')
- s[i] = ',';
- outn << s << "\n";
- }
- in.close();
- outn.close();
- return 0;
- }
Add Comment
Please, Sign In to add comment