matlab:没有足够的输入参数错误

时间:2017-02-05 22:15:40

标签: matlab function

我是Matlab的新手,并试图找到我的代码错误的解决方案:

  

输入参数不足。
     F9> f中的错误(第42行)
     y =(2 - 2 * t * x)/(x ^ 2 + 1);
     F9中的错误(第18行)
             e = euler(f,trange(1),y0_value,h,trange(end));

function [] = F9()
% Euler's Method to solve given functions
% Set initial values
hi = [1/2, 1/4];
trange = [0, 2];
y0_value = 1;
% Set functions' and exact functions' handles
% Calculate and show results
% Loop for functions
for i = 1:2
    fprintf('###########\n');
    fprintf('Function #%d\n', i)
    fprintf('###########\n');
    exact_value = f_exact(trange(end));
    % Loop for h
    for h = hi
        % Euler calculations
        e = euler(f, trange(1), y0_value, h, trange(end));
        fprintf('\nh: %f\n', h);
        fprintf('\nEuler: %f \n', e(end));
        fprintf('Error: %f\n\n', abs((e(end)-exact_value)/exact_value));
    end
    fprintf('Exact: %f\n\n', exact_value);
end
end
% Euler's Method
function y = euler(f, t0, y0, h, tn)
n = (tn-t0)/h;
% Initialize t, y
[t, y] = deal(zeros(n, 1));
% Set t0, y0
t(1) = t0;
y(1) = y0;
for i = 1:n
    t(i+1) = t(i) + h;
    y(i+1) = y(i) + h/2 * (f(t(i), y(i))+ f(t(i+1) , y(i) + h * f(t(i), y(i))));
end
end
% Functions to solve

function y = f(t, x)
y = (2 - 2*t*x) / (x^2 + 1) ;
end
function y = f_exact(x)
y = (2*x + 1) / (x^2 + 1);
end

1 个答案:

答案 0 :(得分:1)

当您将f传递给euler时,您需要将其作为句柄传递,即在其前面加上@

e = euler(@f, trange(1), y0_value, h, trange(end));