Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <malloc.h>
- long double eps1 = 0.000000000001;
- long double pol_1(long double x) {
- return cos(x) - x;
- }
- //полином с косинусом
- long double diff1_pol_1(long double x) {
- return (-sin(x)) - 1;
- }
- //первая производная полинома с косинусом
- long double diff2_pol_1(long double x) {
- return -cos(x);
- }
- //вторая производная полинома с косинусом
- long double pol_2(long double x) {
- return pow(x, 3) - 1.44*pow(x, 2) + 0.6203*x - 0.07866;
- }
- //полином 3-й степени
- long double diff1_pol_2(long double x) {
- return 3*pow(x, 2) - 2*1.44*x + 0.6203;
- }
- //первая производная полинома 3-й степени
- long double diff2_pol_2(long double x) {
- return 6 * x - 2 * 1.44;
- }
- //вторая производная полинома 3-й степени
- long double pol_3(long double x) {
- return exp(x) - 1.59*x - 0.945;
- }
- //полином с exp
- long double diff1_pol_3(long double x) {
- return exp(x) - 1.59;
- }
- //первая производная полинома с exp
- long double diff2_pol_3(long double x) {
- return exp(x);
- }
- //вторая производная полинома с exp
- long double Biss_pol_1(long double a, long double b,FILE *f){
- int i = 0;
- long double mid;
- while ((b - a) > eps1) {
- mid = (a + b) / 2;
- if (pol_1(mid) * pol_1(b) < 0) {
- a = mid;
- i++;
- }
- else {
- b = mid;
- i++;
- }
- }
- fprintf(f," %.15lf steps %d", mid, i);
- return mid;
- }
- // метод биссекции для полинома с косинусом
- long double Chord_pol_1(long double a, long double b,FILE *f) {
- long double x[10000];
- int i = 1;
- if (pol_1(a) > 0) {
- x[0] = a;
- x[1] = a - pol_1(a)*(b-a)/ (pol_1(b)-pol_1(a));
- while (fabs(x[i] - x[i-1]) > eps1) {
- x[i + 1] = x[i] - (pol_1(x[i])*(x[i] - a)) / (pol_1(x[i]) - pol_1(a));
- i++;
- }
- }
- else {
- x[0] = b;
- x[1] = a - pol_1(a)*(b - a) / (pol_1(b) - pol_1(a));
- while (fabs(x[i + 1] - x[i]) > eps1) {
- x[i + 1] = x[i] - (pol_1(x[i])*(b - x[i])) / (pol_1(b) - pol_1(x[i]));
- i++;
- }
- }
- fprintf(f," %.15lf steps %d", x[i], i);
- return x[i];
- }
- //метод хорд для полинома с косинусом
- long double Cheb_pol_1(long double a, long double b,FILE *f) {
- long double x[10000];
- int i = 1;
- x[0] = 0.5;
- x[1] = x[0] - pol_1(x[0]) / diff1_pol_1(x[0]) - 0.5*diff2_pol_1(x[0])*pow(pol_1(x[0]), 2) / pow(diff1_pol_1(x[0]), 3);
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i+1] = x[i] - pol_1(x[i]) / diff1_pol_1(x[i]) - 0.5*diff2_pol_1(x[i])*pow(pol_1(x[i]), 2) / pow(diff1_pol_1(x[i]), 3);
- i++;
- }
- fprintf(f," %.15lf steps %d", x[i], i);
- return x[i];
- }
- //метод Чебышёва для полинома с косинусом
- long double New_pol_1(long double a, long double b,FILE *f) {
- long double x[10000];
- int i = 1;
- x[0] = 0.5;
- x[1] = 0.5 - pol_1(0.5) / diff1_pol_1(0.5);
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - pol_1(x[i]) / diff1_pol_1(x[i]);
- i++;
- }
- fprintf(f, "%.15lf steps %d \n", x[i], i);
- return x[i];
- }
- //метод Ньютона для полинома с косинусом
- long double Biss_pol_2_one(long double a, long double b,FILE *f) {
- int i = 0;
- long double mid;
- while ((b - a) > eps1) {
- mid = (a + b) / 2;
- if (pol_2(a) * pol_2(b) < 0) {
- if (pol_2(mid)*pol_2(b) < 0) {
- a = mid;
- i++;
- }
- else {
- b = mid;
- i++;
- }
- }
- else {
- return 0;
- }
- }
- fprintf(f, "%.15lf steps %d \n", mid, i);
- return mid;
- }
- //метод биссекции для нахождения одного корня для полинома 3-й степени
- void Biss_pol_2_more(long double a, long double b,FILE *f) {
- long double a_work[10];
- for (int j = 0; j < 10; j++) {
- a_work[j] = a + j * (b - a) / 10;
- }
- for (int k = 0; k < 9; k++) {
- Biss_pol_2_one(a_work[k], a_work[k + 1],f);
- }
- }
- //метод биссекции для нахождения всех корней для полинома 3-й степени
- long double Chord_pol_2_one(long double a, long double b,FILE *f) {
- long double x[1000];
- int i = 1;
- if (pol_2(a) > 0 && pol_2(b) < 0) {
- x[0] = a;
- x[1] = a - pol_2(a)*(b - a) / (pol_2(b) - pol_2(a));
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - (pol_2(x[i])*(x[i] - a)) / (pol_2(x[i]) - pol_2(a));
- i++;
- }
- }
- if (pol_2(b) > 0 && pol_2(a) < 0) {
- x[0] = b;
- x[1] = a - pol_2(a)*(b - a) / (pol_2(b) - pol_2(a));
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - (pol_2(x[i])*(b - x[i])) / (pol_2(b) - pol_2(x[i]));
- i++;
- }
- }
- if ((pol_2(b) > 0 && pol_2(a) > 0) || (pol_2(b) < 0 && pol_2(a) < 0))
- {
- return 0;
- }
- fprintf(f, "%.15lf steps %d \n", x[i], i);
- return x[i];
- }
- //метод хорд для нахождения одного корня для полинома 3-й степени
- void Chord_pol_2_more(long double a, long double b,FILE *f) {
- long double a_work[10];
- for (int j = 0; j < 10; j++) {
- a_work[j] = a + j * (b - a) / 10;
- }
- for (int k = 0; k < 9; k++) {
- Chord_pol_2_one(a_work[k], a_work[k + 1],f);
- }
- }
- //метод хорд для нахождения всех корней для полинома 3-й степени
- void Cheb_pol_2_more(long double a, long double b,FILE *f) {
- long double a_work[100];
- for (int j = 0; j < 100; j++) {
- a_work[j] = a + j * (b - a) / 100;
- }
- long double x[10000];
- for (int k = 0; k < 99; k++) {
- if (pol_2(a_work[k])*pol_2(a_work[k+1]) < 0) {
- int i = 1;
- x[0] = a_work[k];
- x[1] = x[0] - pol_2(x[0]) / diff1_pol_2(x[0]) - 0.5*diff2_pol_2(x[0])*pow(pol_2(x[0]), 2) / pow(diff1_pol_2(x[0]), 3);
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - pol_2(x[i]) / diff1_pol_2(x[i]) - 0.5*diff2_pol_2(x[i])*pow(pol_2(x[i]), 2) / pow(diff1_pol_2(x[i]), 3);
- i++;
- }
- fprintf(f, "%.15lf steps %d \n", x[i], i);
- }
- }
- }
- //метод Чебышёва для нахождения всех корней полинома 3-й степени
- void New_pol_2_more(long double a, long double b, FILE *f) {
- long double a_work[100];
- for (int j = 0; j < 100; j++) {
- a_work[j] = a + j * (b - a) / 100;
- }
- long double x[10000];
- for (int k = 0; k < 99; k++) {
- if (pol_2(a_work[k])*pol_2(a_work[k + 1]) < 0) {
- int i = 1;
- x[0] = a_work[k];
- x[1] = x[0] - pol_2(x[0]) / diff1_pol_2(x[0]);
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - pol_2(x[i]) / diff1_pol_2(x[i]);
- i++;
- }
- fprintf(f, "%.15lf steps %d \n", x[i], i);
- }
- }
- }
- //метод Ньютона для нахождения всех корней для полинома 3-й степени
- long double Biss_pol_3_one(long double a, long double b, FILE *f) {
- int i = 0;
- long double mid;
- while ((b - a) > eps1) {
- mid = (a + b) / 2;
- if (pol_3(a) * pol_3(b) < 0) {
- if (pol_3(mid)*pol_3(b) < 0) {
- a = mid;
- i++;
- }
- else {
- b = mid;
- i++;
- }
- }
- else {
- return 0;
- }
- }
- fprintf(f, "%.15lf steps %d \n", mid, i);
- return mid;
- }
- //метод биссекции для нахождения одного корня для полинома с exp
- void Biss_pol_3_more(long double a, long double b, FILE *f) {
- long double a_work[10];
- for (int j = 0; j < 10; j++) {
- a_work[j] = a + j * (b - a) / 10;
- }
- for (int k = 0; k < 9; k++) {
- Biss_pol_3_one(a_work[k], a_work[k + 1], f);
- }
- }
- //метод биссекции для нахождения всех корней для полинома с exp
- long double Chord_pol_3_one(long double a, long double b, FILE *f) {
- long double x[1000];
- int i = 1;
- if (pol_3(a) > 0 && pol_3(b) < 0) {
- x[0] = a;
- x[1] = a - pol_3(a)*(b - a) / (pol_3(b) - pol_3(a));
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - (pol_3(x[i])*(x[i] - a)) / (pol_3(x[i]) - pol_3(a));
- i++;
- }
- }
- if (pol_3(b) > 0 && pol_3(a) < 0) {
- x[0] = b;
- x[1] = a - pol_3(a)*(b - a) / (pol_3(b) - pol_3(a));
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - (pol_3(x[i])*(b - x[i])) / (pol_3(b) - pol_3(x[i]));
- i++;
- }
- }
- if ((pol_3(b) > 0 && pol_3(a) > 0) || (pol_3(b) < 0 && pol_3(a) < 0))
- {
- return 0;
- }
- fprintf(f,"%.15lf steps %d \n", x[i],i);
- return x[i];
- }
- //метод хорд для нахождения одного корня для полинома с exp
- void Chord_pol_3_more(long double a, long double b,FILE *f) {
- long double a_work[10];
- for (int j = 0; j < 10; j++) {
- a_work[j] = a + j * (b - a) / 10;
- }
- for (int k = 0; k < 9; k++) {
- Chord_pol_3_one(a_work[k], a_work[k + 1], f);
- }
- }
- //метод хорд для нахождения всех корней для полинома с exp
- void Cheb_pol_3_more(long double a, long double b, FILE *f) {
- long double a_work[100];
- for (int j = 0; j < 100; j++) {
- a_work[j] = a + j * (b - a) / 100;
- }
- long double x[10000];
- for (int k = 0; k < 99; k++) {
- if (pol_3(a_work[k])*pol_3(a_work[k + 1]) < 0) {
- int i = 1;
- x[0] = a_work[k];
- x[1] = x[0] - pol_3(x[0]) / diff1_pol_3(x[0]) - 0.5*diff2_pol_3(x[0])*pow(pol_3(x[0]), 2) / pow(diff1_pol_3(x[0]), 3);
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - pol_3(x[i]) / diff1_pol_3(x[i]) - 0.5*diff2_pol_3(x[i])*pow(pol_3(x[i]), 2) / pow(diff1_pol_3(x[i]), 3);
- i++;
- }
- fprintf(f, "%.15lf steps %d \n", x[i], i);
- }
- }
- }
- //метод хорд для нахождения всех корней для полинома с exp
- void New_pol_3_more(long double a, long double b, FILE *f) {
- long double a_work[100];
- for (int j = 0; j < 100; j++) {
- a_work[j] = a + j * (b - a) / 100;
- }
- long double x[10000];
- for (int k = 0; k < 99; k++) {
- if (pol_3(a_work[k])*pol_3(a_work[k + 1]) < 0) {
- int i = 1;
- x[0] = a_work[k];
- x[1] = x[0] - pol_3(x[0]) / diff1_pol_3(x[0]);
- while (fabs(x[i] - x[i - 1]) > eps1) {
- x[i + 1] = x[i] - pol_3(x[i]) / diff1_pol_3(x[i]);
- i++;
- }
- fprintf(f, "%.15lf steps %d \n", x[i], i);
- }
- }
- }
- //метод Ньютона для нахождения всех корней для полинома с exp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement