Я пытаюсь передать дескриптор функции в функцию, которую я создал ниже. Я не совсем уверен, как это сделать.
Например, как я могу получить:
conjugate_gradient(@(y) ABC(y), column_vector, initial_guess)
чтобы не ошибка?
Если я использую функцию pcg в Matlab таким же образом, она будет работать:
pcg(@(y) ABC(y),b,tol).
Я попытался прочитать функцию pcg, и они все-таки взялись за это в описании функции, однако я все еще супер неопытен в MATLAB и, скажем, столкнулся с некоторыми трудностями в понимании того, что они сделали. Спасибо!
function [x] = conjugate_gradient(matrix, column_vector, initial_guess)
y = [];
col_size = length(column_vector);
temp = size(matrix);
mat_row_len = temp(2);
% algorithm:
r_cur = column_vector - matrix * initial_guess;
p = r_cur;
k = 0;
x_approx = initial_guess;
for i=1:mat_row_len
alpha = ( r_cur.' * r_cur ) / (p.' *(matrix* p));
x_approx = x_approx + alpha * p;
r_next = r_cur - alpha*(matrix * p);
fprintf(num2str(r_next'*r_next), num2str(i))
y = [y; i, r_next'*r_next];
%exit condition
if sqrt(r_next'*r_next) < 1e-2
y
break;
end
beta = (r_next.'* r_next )/(r_cur.' * (r_cur) );
p = r_next + beta * p;
k = k+1;
r_cur = r_next;
end
y
[x] = x_approx;
end