2015-09-25 5 views
0

Я пытаюсь реализовать алгоритм Невилла в MatLab с четырьмя заданными точками в этом случае. Тем не менее, я немного застрял в данный момент. Это мой сценарий до сих пор:Реализация алгоритма Невилла в MatLab

% Neville's Method 

% Function parameters 
x = [7,14,21,28]; 
fx = [58,50,54,53]; 
t = 10; 

n = length(x); 
Q = zeros(n,n); 


for i = 1:n 
    Q(i,1) = fx(i); 
end 
for j = 2:n 
    for i = j:n 
     Q(i,j) = ((t-x(i-j)) * Q(i,j-1)/(x(i)-x(i-j))) + ((x(i)-t) * Q(i-1,j-1)/(x(i)-x(i-j))); 
    end 
end 

print(Q); 

Что касается меня проблема, я получаю этот выход последовательно: индексы подстрочные должны быть либо вещественные положительные целые или логические выражения.

Я пытался настроить итерации цикла, но безрезультатно. Я знаю, что проблема заключается в основной логической линии во внутреннем цикле. Некоторые операции приводят к индексам массивов, которые первоначально равны нулю.

Вот где я, любая помощь будет оценена!

ответ

1

В вашей петле в первый раз i-j есть 0, потому что вы установили i = j. В индексах MATLAB начинаются с 1. Простое исправление, чтобы получить выполнение кода будет изменить

for i = j:n 

в

for i = j+1:n 

Это решает

: подстрочный индексы должны быть либо вещественные положительные целые числа или логические выражения.

Однако это может быть не идеальным, и вам может потребоваться переосмыслить вашу логику. Выход, который я получаю, равен

>> neville 
Q = 

    58.0000   0   0   0 
    50.0000   0   0   0 
    54.0000 50.8571   0   0 
    53.0000 54.2857 51.3469   0 
Смежные вопросы