如何在MATLAB中将函数设置为变量

时间:2013-02-13 18:59:32

标签: function matlab bisection

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

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

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

我确信这个问题的答案非常容易和简单,但由于某种原因,我找不到办法来做到这一点!谢谢你的帮助。

1 个答案:

答案 0 :(得分: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清除所有断点