Как домашнее задание, я пишу код, который использует метод bisection для вычисления корня функции с одной переменной в пределах диапазона. Я создал функцию пользователя, которая выполняет вычисления, но один из входов функции должен быть «забавным», который должен быть установлен равным функции.Как установить функцию в переменную в MATLAB
Вот мой код, прежде чем идти дальше:
function [ Ts ] = BisectionRoot(fun,a,b,TolMax)
%This function finds the value of Ts by finding the root of a given function within a given range to a given
%tolerance, using the Bisection Method.
Fa = fun(a);
Fb = fun(b);
if Fa * Fb > 0
disp('Error: The function has no roots in between the given bounds')
else
xNS = (a + b)/2;
toli = abs((b-a)/2);
FxNS = fun(xns);
if FxNS == 0
Ts = xNS;
break
end
if toli , TolMax
Ts = xNS;
break
end
if fun(a) * FxNS < 0
b = xNS;
else
a = xNS;
end
end
Ts
end
входные аргументы определяются нашим учителем, поэтому я не могу возиться с ними. Мы должны установить эти переменные в командном окне до, выполняющего функцию. Таким образом, мы можем использовать программу позже для других вещей. (Хотя я думаю, что fzero() может быть использован для этого)
Моя проблема в том, что я не уверен, как отвлекаться на что-то, а затем использовать это так, чтобы я мог весело (a) или забавой (b). В нашей книге они делают то, что они называют определением f (x) как анонимная функция. Они делают это для примера проблемы:
F = @ (x) 8-4.5*(x-sin(x))
Но когда я пытаюсь сделать это, я получаю ошибку, Error: Unexpected оператор MATLAB.
Если вы, ребята, хотите попробовать запустить программу, чтобы проверить свои решения перед публикацией (надеюсь, моя программа работает!), Вы можете использовать эти переменные из примера в книге:
fun = 8 - 4.5*(x - sin(x))
a = 2
b = 3
TolMax = .001
Ответ на получение в книге для использования: 2.430664
.
Я уверен, что ответ на этот вопрос невероятно прост и прост, но по какой-то причине я не могу найти способ сделать это! Спасибо за помощь.
Там опечатка здесь: 'F = @ (х) 8-4.5 * (х-sin9 (х))' , это должно быть 'F = @ (x) 8-4.5 * (x-sin (x))'. Кроме того, строка 'if toli, TolMax' не будет делать то, что вы хотите, вероятно, вы пропустили знак' == '? Наконец, я не вижу никакого цикла в функции, которая позволяла бы итерационное решение. – Jonas
Извините, компьютер, на который я писал, имеет довольно дерьмовую клавишу переключения. Мне пришлось переписывать так много вещей. Наверное, я пропустил два! Благодарим за указание этого. На самом деле это должно быть <. Я добавил в цикл! Не могу поверить, что я забыл об этом! – TheTreeMan