Я хотел бы решить уравнение (A * x = b) с помощью Matlab в моем приложении iOS. Я сгенерировал исходные файлы C и добавил их в Xcode. Странно то, что для тех же (A, b) я получаю разные результаты в Matlab и Xcode.Сгенерированный код Matlab C не работает должным образом
Я использую настройки по умолчанию. Любое предложение?
Matlab:
%#codegen
function X = solveEquation(A, B)
X = linsolve(A,B);
end
Xcode:
double* A_data = malloc(num * num * sizeof(double));
double* B_data = malloc(num * sizeof(double));
for (int i=0; i<num; i++) {
for (int j=0; j<num; j++) {
double sum = 0.0;
for (int k=0; k<9; k++) {
double diff = powf(A[i][k]-A[j][k],2);
sum += diff;
}
A_data[j*num+i] = exp(sum/-2);
}
B_data[i] = A[i][9];
}
int A_sizes[] = {num, num};
int B_sizes[] = {num, 1};
double* X_data = malloc(num * sizeof(double));
int X_sizes[] = {num, 1};
solveEquation(A_data, A_sizes, B_data, B_sizes, X_data, X_sizes);
Какие результаты у вас есть? –
Начните с проверки того, что ваши входы A и B одинаковы с обеих сторон. Не забывайте, что индексы MATLAB - столбцы, а индексы C - рядовые. Кроме того, 'powf' является неправильной функцией для удвоений. Используйте 'pow()', или даже лучше, просто умножайте их самостоятельно. – Peter
'B_data [i] = A [i] [9];' индексируется за пределы (инициализированного) размера. (и, мы надеемся: 9 <размер.) – wildplasser