Я пытаюсь написать код, чтобы найти A
в системе линейных уравнений Ax=B
, поэтому я использовал разложение LU. Теперь, когда у меня есть L и U правильно, я застрял в прямой подстановке, чтобы получить y в B = Ly.Прямая замена не работает должным образом в C
Я написал некоторый код в MatLab, который отлично работает, но я не могу получить те же результаты, что и переписывание кода на C. Поэтому мне было интересно, может ли кто-нибудь узнать, что я делаю неправильно, я не полностью использую к С.
Вот мой код в MatLab:
y(1,1) = B(1,1)/L(1,1);
for i= 2:n
sum=0;
sum2=0;
for k = 1: i-1
sum = sum + L(i,k)*y(k,1);
end
y(i,1)=(B(i,1)-sum)/L(i,i);
end
где L
моя нижняя треугольная матрица, B
вектор того же размера, и n
является 2498 в этом случае.
Мой C код выглядит следующим образом:
float sum = 0;
y_prev[0]=B[0]/(float)Low[0][0];
for (int i = 1; i < CONST; i++)
{
for (int k = 0; k < i-1; k++)
{
sum = sum +Low[i][k]*y_prev[k];
}
y_prev[i]= (B[i]- sum)/(float)Low[i][i];
}
Где вы находитесь в C 'float (Low [0] [0])' вы имели в виду '(float) Low [0] [0]'? '(Float)' здесь должен быть типом cast, а не функцией. –
Какова ваша проблема? (кроме флоат-броска). Если вы получаете ошибки, возможно, это из-за кода определения/распределения массива, который мы не видим. –
Я не получаю ошибки для кода, но выходной вектор неверен. Благодарю вас. – SDj