2015-11-24 2 views
0

Я пытаюсь решить два нелинейных уравнения с двумя неизвестными с помощью метода Ньютона-Рафсона в MATLAB. Вот мой код MATLAB:Как исправить эту ошибку в MATLAB: «Индекс превышает размеры матрицы».

f = @(x)[ x(1)^2+x(2)^2; 
      2*x(1)-x(2)]; 
J = @(x)[ 2*x(1), 2*x(2); 
      2, -1]; 
tol = 1e-4; % Or some other tolerance 
err = 1000; % Any value larger than tol 
x = 0.01; % However this is defined. 
iter = 1; max_iter = 30; % Or whatever. 
while (err > tol) 
    delta_x = J(x)\(-f(x)); % Compute x_{n+1}-x_n 
    err = norm(delta_x); 
    x = x + delta_x; 
    iter = iter + 1; 
    [iter x']; % This line simply outputs the current iteration and the solution. You can dress this up by using sprintf if you like. 
    if (iter > max_iter) 
     disp 'Failed to converge'; 
     break; 
    end 
end 

Почему MATLAB шоу «Индекс превышает размеры матрицы.»?

+4

Ваши функции '' J' и ф 'use' x (2) ', в то время как вы вызываете их со скаляром' x'. Там * нет * 'x (2)'. –

+0

Заранее спасибо :) – asghar

ответ

1

Вы определяете f и J получить вектор x с двумя элементами, но инициализировать x как скаляр: x = 0.01;. Определим его как вектор:

x = [0.01;0.01]; 

Кроме того, для части кода отображаются вещи ([iter x'];), я предлагаю простую рабочую версию как

disp(['iter: ',num2str(iter)]); 
disp(x.'); 
+0

Заранее спасибо :) – asghar

Смежные вопросы