2nd_Sem_Bogachev/2025.03.28/Matvei/matrix.c
2025-03-25 22:53:39 +03:00

99 lines
2 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "matrix.h"
void multmatvec(double* a, double* x1, double* x2, int n)
{
int i, j;
double sum;
for (i = 0; i < n; i++)
{
sum = 0;
for (j = 0; j < n; j++)
sum += a[i * n+ j] * x1[j];
x2[i] = sum;
}
}
double scalp(double* a, double* b, int n)
{
int i;
double mult = 0;
for (i = 0; i < n; i++) mult += a[i] * b[i];
return mult;
}
double count_task1(double* a, double* x, double r1, int n)
{
int i, j;
double mltd_el_x, sum, modsum1 = 0, modsum2 = 0;
for (i = 0; i < n; i++)
{
sum = 0;
for (j = 0; j < n; j++) sum += a[i * n + j] * x[j];
mltd_el_x = r1 * x[i];
modsum1 += fabs(sum - mltd_el_x);
modsum2 += fabs(mltd_el_x);
}
return modsum1 / modsum2;
}
double count_r1(double* a, double* b, double* x, int n)
{
int i, j;
double el_b, sum, modsum1 = 0, modsum2 = 0;
for (i = 0; i < n; i++)
{
sum = 0;
for (j = 0; j < n; j++) sum += a[i * n + j] * x[j];
el_b = b[i];
modsum1 = fabs(sum - el_b);
modsum2 = fabs(el_b);
}
return modsum1 / modsum2;
}
double count_r2(double* x, int n)
{
int i;
double modsum = 0;
int ost, sum = 0;
for (i = 0; i < n; i++)
{
ost = (i + 1) % 2;
modsum += fabs(x[i] - ost);
sum += ost;
}
return modsum / sum;
}
void vecdiff(double* a, double* b, int n)
{
int i;
for (i = 0; i < n; i++) a[i] -= b[i];
}
void vecmult(double* a, double lambda, int n)
{
int i;
for (i = 0; i < n; i++) a[i] = lambda * a[i];
}
void veccpy(double* a, double* b, int n)
{
int i;
for (i = 0; i < n; i++) a[i] = b[i];
}
void veccomb(double lambda, double* a, double myu, double* b, int n)
{
int i;
for (i = 0; i < n; i++) a[i] = lambda * a[i] + myu * b[i];
}
int equal(double a, double b)
{
if (fabs(a - b) <= EPS * fmax(fabs(a), fabs(b))) return 1;
return 0;
}