0

作为一项家庭作业,我正在编写一个代码,该代码使用二分法来计算一个函数的根,其中一个变量在一个范围内。我创建了一个执行计算的用户函数,但是该函数的输入之一应该是“有趣的”,应该设置为等于该函数。

这是我的代码,在我继续之前:

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))

但是当我尝试这样做时,我得到了错误,错误:意外的 MATLAB 运算符。

如果你们想在发布之前尝试运行程序来测试您的解决方案(希望我的程序有效!),您可以使用书中示例中的这些变量:

fun = 8 - 4.5*(x - sin(x)) a = 2 b = 3 TolMax = .001

使用这些的书中得到的答案是2.430664

我敢肯定,这个问题的答案非常简单明了,但由于某种原因,我找不到解决方法!感谢您的帮助。

4

1 回答 1

3

为了让您继续前进,您的示例似乎缺少一些语法。而不是其中任何一个(来自您的问题):

fun = 8 - 4.5*(x - sin(x))  % Missing function handle declaration symbol "@"
F = @ (x) 8-4.5*(x-sin9(x))  %Unless you have defined it, there is no function "sin9"

采用

fun = @(x) 8 - 4.5*(x - sin(x))

然后你会这样调用你的函数:

fun = @(x) 8 - 4.5*(x - sin(x));
a = 2;
b = 3;
TolMax = .001;
root = BisectionRoot( fun,a,b,TolMax );

要调试(您需要这样做),请使用调试器。

  1. 该命令dbstop if error停止执行并在问题点打开文件,让您检查变量值和函数堆栈。

  2. 单击编辑器中的“-”标记会创建一个断点,强制函数在该点暂停执行,再次以便您可以检查内容。请注意,您可以使用编辑器顶部的调试按钮逐行执行代码。

  3. dbquit退出调试模式

  4. dbclear all清除所有断点

于 2013-02-13T20:39:27.493 回答