ошибка вычисления из линейной системы - извлечение каждого столбца

0

Я хочу вычислить ошибку в методе линейных наименьших квадратов.

У меня есть матрицы A, B и X. (AX = B).

Размеры: A (NxN), B (NxNRHS), X (N, NRHS), где NRHS - номер правой стороны.

Ошибка вычисляется как sqrt (сумма (B -A X)).

Но я должен учитывать каждый столбец B и X, чтобы сделать это.

Я должен вычесть B [i] -A [..] X [i] → где я - каждый столбец из B и X.

Я не могу понять, как это сделать, следовательно, как извлечь каждый столбец. Я не могу найти правильные индексы для матриц B и X (я думаю), потому что я должен выйти за пределы матрицы A и только за каждый столбец B и X.

Я делаю что-то вроде этого (используя основной порядок столбцов):

int N=128;
int NRHS =1;
int Asize=N*N;
int Bsize=N*NRHS;
int Xsize=N*NRHS;

A=(double*)malloc(Asize*sizeof(double));  
B=(double*)malloc(Bsize*sizeof(double));
X=(double*)malloc(Xsize*sizeof(double));
...

for(int i = 0; i < N; i++)
    {
        for (int j=0;j<NRHS; j++){

               diff[i+j*N] = fabs(B[i+j*N] - A[i+j*N]*X[i+j*N]);

               abs_error=sqrt(sums(diff,N));


        }
    }

Я думал о добавлении некоторого выражения с помощью оператора modulo, но я не мог понять.

sums - это просто функция, которая дает сумму массива, где вторым аргументом является количество элементов.

  • 0
    Как вы объявили A , B и X ? Как вы передаете их функции? Что такое sums() ?
  • 0
    @ Филипп Гонсалвеш: я обновил.
Теги:
linear-algebra

1 ответ

1
Лучший ответ

Сначала вы можете сделать матричное умножение A и X с помощью циклов.

Затем вы можете написать еще 2 циклы, чтобы вычислить разницу (B - AX). Это просто ваша проблема.

редактировать

После того, как вы вычислите произведение A и X, считая, что вы храните продукт в переменной AX, следующий код даст вам разницу между соответствующими элементами.

differenceMatrix = (double*)malloc(Bsize*sizeof(double));

for(int i = 0; i < N; i++)
{
    for (int j = 0; j < NRHS; j++){

           differenceMatrix[i+j*N] = fabs(B[i+j*N] - AX[i+j*N]);

    }
}

Каждый столбец разницыMatrix содержит разницу между соответствующими элементами.

редактировать

Чтобы получить сумму разницы в каждом столбце

double sumOfDifferencePerColumn;
for(int i = 0; i < N; i++)
{
    sumOfDifferencePerColumn = 0.0;
    for (int j = 0; j < NRHS; j++){

           sumOfDifferencePerColumn += ( fabs(B[i+j*N] - AX[i+j*N]) );

    }

    // add code to take square root or use the sum of difference of each column
}
  • 0
    Я тоже это попробовал. Я не могу снова вычислить петли и индексы. Если вы что-то имеете в виду и можете это показать ...
  • 0
    @ Джордж Какова точная формула, которую вы должны вычислить? Для каждого столбца нужно найти сумму, затем добавить ее и взять квадратный корень?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню