Ошибка без фактического объяснения того, что не так

#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. Не было четкой информации о структуре файла, поэтому я предполагаю, что функция не была разделена на файл сценария.