Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <windows.h>
- #define N 12
- int fnumber(double x);
- double absolute_error(double x, double rel_error);
- double relative_error(double x);
- double pow_absolute(double x, int step, double x_abs);
- double exp_absolute(double x1, double x2, double x_abs);
- double mul_absolute(double x1, double x2, double x_abs);
- double F(double x1, double x2, double x3);
- double F_absolute(double x1, double x2, double x3, double x_abs);
- double ctg(double x);
- int main(void){
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- double x1=1.51,x2=2.15,x3= 0.43, abs_x = N * 0.001;
- printf("x1 = %f\tx2 = %f\tx3 = %f",x1,x2,x3);
- puts("\n\nВідносні похибки: ");
- printf("x1 = %.5f %%\tx2 = %.5f %%\tx3 = %.5f %%\n",relative_error(x1)*100,relative_error(x2)*100,relative_error(x3)*100);
- puts("\nАбсолютні похибки: ");
- printf("x1 = %.5f \tx2 = %.5f \tx3 = %.5f\n",relative_error(x1)*x1,relative_error(x2)*x2,relative_error(x3)*x3);
- double f, abs_f;
- f = F(x1,x2,x3);
- abs_f= F_absolute(x1,x2,x3, abs_x);
- printf("\nПохибки F при дельта Х = %.5f Абсолютна = %.5f Відносна = %.5f",f,abs_f,abs_f/f);
- puts("\nЗмінюємо похибки Х:\n");
- int i;
- for(i=1;i<=N;i++){
- abs_x = N * pow(10, -1 * (3 + i*0.1));
- abs_f= F_absolute(x1,x2,x3, abs_x);
- printf("Абсолютна = %.5f Відносна = %.5f Похибка Х= %.5f\n",abs_f,abs_f/f, abs_x);
- }
- return 0;
- }
- //відносна похибка
- double relative_error(double x){
- double x_cp = x;
- double count = 0;
- while (((int)x_cp - x_cp) != 0){
- x_cp *= 10;
- count++;
- }
- if (count == 0){ return 0.5; }
- double znach = (double)fnumber(x);
- return (1 / (2 * (znach))) / (pow(10, count));
- }
- //перша значуща цифра
- int fnumber(double x){
- x = fabs(x);
- if ((int)x >= 1){
- while ((int)(x / 10) != 0){
- x /= 10;
- }
- }
- else{
- while ((int)x == 0){
- x *= 10;
- }
- }
- return (int)x;
- }
- //знаходження абс. степеня
- double pow_absolute(double x, int step, double x_abs){
- return step*pow(x, step - 1)*x_abs;
- }
- //знаходження абс. множення
- double mul_absolute(double x1, double x2, double x_abs){
- double A = (x1 + x_abs)*(x2 + x_abs);
- double u = x1*x2;
- return fabs(A - u);
- }
- //знаходження абс. котангенса
- double ctg_absolute(double x2, double x3, double x_abs){
- //exp(8*x2 - x1)
- return 20*(fabs(-1/pow(sin(x2-x3),2))*x_abs) + (fabs(-1/pow(sin(x2-x3),2)-1)*x_abs);
- }
- //абсолютна похибка величини F
- double F_absolute(double x1, double x2, double x3, double x_abs){
- return 8 * pow_absolute(x1, 2, x_abs) +
- 6 * pow_absolute(x2, 2, x_abs) +
- 4 * pow_absolute(x3, 2,x_abs) +
- 6 * mul_absolute(x2,x3,x_abs) +
- 4*x_abs +
- 20*ctg_absolute(x2,x3,x_abs);
- }
- //значення величини F
- double F(double x1, double x2, double x3){
- return 8 * pow(x1, 2) + 6 * pow(x2, 2) + 4 * pow(x3, 2) - 6 * x2*x3 - 4*x1 + 20*ctg(x2 - x3);
- }
- double ctg(double x )
- {
- return cos( x )/sin( x );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement