作为家庭作业,我正在编写一个代码,该代码使用二分法来计算一个范围内一个变量的函数的根。我创建了一个用于执行计算的用户函数,但函数的一个输入应该是“有趣的”,应该设置为等于函数。
在我继续之前,这是我的代码:
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
。
我确信这个问题的答案非常容易和简单,但由于某种原因,我找不到办法来做到这一点!谢谢你的帮助。
答案 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 );
要进行调试(您需要执行此操作),请使用调试器。
命令dbstop if error
停止执行并在问题点打开文件,让您检查变量值和函数堆栈。
单击编辑器中的“ - ”标记会创建一个断点,强制该函数暂时停止执行,以便您可以检查内容。请注意,您可以使用编辑器顶部的调试按钮逐行执行代码。
dbquit
退出调试模式
dbclear all
清除所有断点