Я пытаюсь интегрировать функцию fx, используя интеграцию Ромберга, с x = 0 до x = 0.8 с максимум 10 итерациями, используя следующие два сценария:
RomScript.m:
function [rom_I,I,ea] = RomScript(a,b,fx,maxit,es)
maxit=10;
I=zeros(maxit+1,maxit+1);
es=0.001;
fx=@(x) 0.2 + 25*x - 200*x^2 + 675*x^3 - 900*x^4 + 400*x^5;
a=0;
b=0.8;
ea = 0;
iter=1;
while iter<=maxit+1
for k=1:iter
j=iter-k+1;
if k==1
n=2^(j-1);
I(j,1)=TrapM(a,b,n,fx);
else
I(j,k) = (4^(k-1) * I(j+1,k-1) - I(j,k-1) )/ (4^(k-1) - 1);
end
end
if iter>1
ea = abs((I(1,iter) - I(2,iter-1)) / I(1,iter)) * 100;
if ea < es
break;
end
end
iter=iter+1;
end
TrapM.m:
function [TrapM,eapprox] = TrapM(a,b,n,fx);
h=(b-a)/n;
f=zeros(n+1,1);
for fi=1:n+1
f(fi)=fx(a+h*fi-h);
end
sum=f(1);
for i=2:size(f,1)-1
sum=sum+2*f(i);
end
sum=sum+f(end);
Trap=h*sum/2;
df = matlabFunction(diff(sym(fx),2));
df2= integral(df,a,b);
eapprox=df2/(b-a)*(b-a).^3/12/n.^2;
end
Всякий раз, когда я запускаю RomScript.m, он выдает эту ошибку:
error: 'TrapM' undefined near line 16 column 20
error: called from
RomScript at line 16 column 19
Из того, что я видел, просто возиться, выглядитнапример, Octave просто не понимает, что я ссылаюсь на другой файл .m, в то время как MATLAB может это сделать.