Помощь MATLAB требуется функция root - PullRequest
1 голос
/ 31 декабря 2010

Я сделал программу,

function bisection;
x1=input('enter the first value=')
x2=input('enter the second value=')
%f3=[];

for x=1:20
    %x=1;
       x3=(x1+x2)/2;
    while x3-x1 >= 0.001

    f3(x)=x3^3 + x3^2 - 3*x3 - 3;
    f1(x)=x1^3 + x1^2 - 3*x1 - 3;

    if ((f3(x)*f1(x)) < 0)
    x2=x3;
    else
     x1=x3;
    end   
    break
 end


 format long
 f3'
 disp('The root is found to be =');
 x3
end

.,,,,программа вычисляет функцию интервала (x1, x2), заданного пользователем,

моя программа компилируется и выполняет, но небольшое глупое повторение до завершения цикла, я хочу остановить дальнейший цикл печати, когда будет достигнуто желаемое значение, пока условиеб.

1 Ответ

3 голосов
/ 31 декабря 2010

Метод деления пополам реализован следующим образом.Анализируемая функция, а также границы интервалов передаются в качестве параметров.

function bisection(f, x1, x2)

if f(x1)*f(x2) < 0  % check precondition sign(f(x1)*f(x2)) = -1
    while abs(x2-x1) >= 0.001
        x3=(x1+x2)/2;
        if ((f(x1)*f(x3)) < 0)
            x2 = x3;
        elseif ((f(x2)*f(x3)) < 0)
            x1 = x3;
        else
            break
        end
    end

    fprintf('The root is found to be = %.3f\n', x3);
else
    fprintf('f(x1) and f(x2) must have opposite signs!\n')
end

Бегунок часть вашей корневой задачи поиска.

format long

f = @(x) x^3 + x^2 - 3*x - 3;
x1=input('enter the first value=');
x2=input('enter the second value=');
bisection(f, x1, x2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...