#matlab
#matlab
Вопрос:
Хорошо, итак, я определил функцию MetBisectiei, которая имеет следующий код:
function [xaprox] = MetBisectiei(Fun,a,b,eps)
Fa = Fun(a);
Fb = Fun(b);
if Fa*Fb>0
xaprox = ('Error: The function has the same sign at points a and b.');
else
N=ceil((log10(b-a)-log10(eps))/log10(2));
for i = 1:n
xaprox = (a b)/2;
Fxaprox=Fun(xaprox);
if(Fxaprox == 0)
break
end
if Fa*Fxaprox<0
b=Fxaprox;
else
a=xaprox;
Fa=Fxaprox;
end
end
end
И когда я пытаюсь фактически использовать функцию для нахождения решения уравнения, я получаю следующую ошибку, которая на самом деле не объясняет, что не так:
Error in tema2_2 (line 8)
xaprox = MetBisectiei(f,0,1,eps);
Код для нахождения решения уравнения следующий:
syms x
f = x^3-7*x^2 14*x-6;
f = matlabFunction(f);
x = 0:4;
y = f(x);
plot(x,y);
eps = 10^(-5);
xaprox = MetBisectiei(f,0,1,eps);
Комментарии:
1. Это действительно полное сообщение об ошибке? Странно! Вы пробовали использовать отладчик для пошагового выполнения кода? Установите точку останова, щелкнув по левому краю в редакторе MATLAB, затем запустите свой код. Она остановится в точке останова и позволит вам пошагово просмотреть код построчно.
Ответ №1:
Я вижу здесь несколько ошибок. Сначала вы должны завершить
function [xaprox] = MetBisectiei(Fun,a,b,eps)
с помощью end
, видимого в вашем примере, просто инструкции close if
. Вторая проблема заключается в том, что n
не определено, вероятно, вы упускаете из виду, что matlab чувствителен к регистру и N
не равен n
. Итак, вы должны:
n=ceil((log10(b-a)-log10(eps))/log10(2));
Если вы исправите эти две вещи — ваши коды завершатся без каких-либо ошибок, ( xaprox = 0.5210
) протестированные на Matlab R2017b.
Комментарии:
1. Первое, что на самом деле не требуется, хотя настоятельно рекомендуется.
end
завершение функции неявно добавляется в конце файла, если это единственная вещь в файле . Т.е. сохранение вышеуказанного какMetBisectiei.m
будет работать. В тот момент, когда вы делаете больше в скрипте (определения классов, дополнительные функции, скрипт с частной функцией и т.д.),end
Требуется2. @Adriaan: На самом деле, вам даже не нужно
end
использовать частные функции, только если вы делаете сумасшедшую вложенную область видимости. Правило гласит, что либо все функции в файле заканчиваются наend
, либо ни одна. Функция в файле сценария действительно нуждается вend
.3. Не было четкой информации о структуре файла, поэтому я предполагаю, что функция не была разделена на файл сценария.