Ошибка при использовании функции ==> fprintf не определена для входов 'sym'

Это мой код MATLAB. Функция trapezoid() определена отдельно и работает нормально.

syms x;

f = 10 + 2 * x - 6 * (x^2) + 5 * (x^4);

a = 0;
b = 2;

ans_3points = trapezoidal(f, a, b, 3);
ans_5points = trapezoidal(f, a, b, 5);
ans_7points = trapezoidal(f, a, b, 7);

fprintf('Integral estimate for three equally spaced points is %f.\n', ans_3points);
fprintf('Integral estimate for five equally spaced points is %f.\n', ans_5points);
fprintf('Integral estimate for seven equally spaced points is %f.\n', ans_7points);

actual_ans = int(f, 0, 2);

error_3points = 100 * (actual_ans - ans_3points) / actual_ans;
error_5points = 100 * (actual_ans - ans_5points) / actual_ans;
error_7points = 100 * (actual_ans - ans_7points) / actual_ans;

fprintf('Percentage relative error for three equally spaced points is %f.\n', error_3points);
fprintf('Percentage relative error for five equally spaced points is %f.\n', error_5points);
fprintf('Percentage relative error for seven equally spaced points is %f.\n', error_7points);

Но это дает следующую ошибку в строке, которая печатает error_3points: ??? Ошибка при использовании функции ==> fprintf не определена для входных данных 'sym'.

Я не помещал какие-либо «символические» входы в fprintf(), не так ли? ans_3points, ans_5points, ans_7points печатаются без проблем. Ошибки рассчитываются, но когда я проверял, они отображались в виде дробей. В чем именно проблема в этом коде? Я действительно не могу понять это. Спасибо.

Функция trapezoidal:

function l = trapezoidal(f, a, b, n)

N = n - 1;  % N - the number of segmets

syms x;

series_sum = 0;

for i = (0 : (N - 1))
    series_sum = series_sum + subs(f, x, xterm(i, a, b, n)) + subs(f, x, xterm((i + 1), a, b, n));
end

l = series_sum * (b - a) / (2 * N);

person Ruwangi    schedule 11.09.2014    source источник
comment
Какой тип данных возвращает trapezoidal?   -  person Luis Mendo    schedule 11.09.2014
comment
Функция trapezoid возвращает число с плавающей запятой.   -  person Ruwangi    schedule 11.09.2014
comment
Можете ли вы опубликовать эту функцию?   -  person Luis Mendo    schedule 11.09.2014
comment
Добавил к вопросу.   -  person Ruwangi    schedule 11.09.2014


Ответы (1)


Проблема в использовании функции int

actual_ans = int(f, 0, 2);

`actual_ans' по-прежнему является символической переменной, даже если она является константой. Вы можете перевести его в числовую переменную с помощью

actual_ans = double(actual_ans);
person alexmogavero    schedule 11.09.2014
comment
Вот в чем проблема! Спасибо большое. Изменение типа указанным выше методом дало ошибку, но fact_ans = cast(actual_ans, 'double'); работал. - person Ruwangi; 11.09.2014
comment
Странно... у меня сработало, наверное зависит от версии Matlab - person alexmogavero; 11.09.2014