Сначала я провел рефакторинг вашего кода, чтобы удалить ситуацию с j = 0, поскольку это ничего не меняет, поскольку x=x
его можно пропустить, начав с j = 1. Я также добавил отладочную печать:
function f=veelTermEvaluatie(V,x)
f=V(1);
for i=2:length(V)
printf("\nI: %d --> ", i)
for j=1:i-1
x = x * x
printf("j: %d, x=%d ",j,x)
end
f=V(i)*x
end
return f
endfunction
После этого стало ясно, что вы каждый раз умножаете один и тот же x:
I: 2 --> j: 1, x=9
I: 3 --> j: 1, x=81 j: 2, x=6561
I: 4 --> j: 1, x=43046721 j: 2, x=-501334399 j: 3, x=0
I: 5 --> j: 1, x=0 j: 2, x=0 j: 3, x=0 j: 4, x=Inf
I: 6 --> j: 1, x=Inf j: 2, x=Inf j: 3, x=Inf j: 4, x=Inf j: 5, x=Inf
Также происходит то, что вы обновляете значение f до самого высокого члена, игнорируя любые другие члены. Я думаю, ваш смысл в том, чтобы вернуть все термины
Поэтому вы должны создать локальный x, который сбрасывается для каждого термина.
Рабочий пример
function f=veelTermEvaluatie(V,x)
//Initialize the result to be a copy of the input
f=V;
// For each element in the input (except the first)
for i=2:length(V)
printf("\nI: %d --> ", i);
//Initialize a local x variable to the global x
new_x = x;
for j=1:i-1
// Update only the local x
new_x = new_x * x;
printf("j: %d, x=%d ",j,x);
end
// Multiply the value in the array with the local x value
f(i)=V(i)*new_x;
end
return f
endfunction
V=[1 2 3 4 5 6]
x=3
result = veelTermEvaluatie(V,x)
disp(result)
disp(sum(result))
person
spoorcc
schedule
25.02.2014
f=sum(i=1 to n) V(i)*x^(i-1)
илиf=sum(i=1 to n) V(i)*x^(n-i)
или что-то совсем другое? - person Lutz Lehmann   schedule 03.03.2014