【发布时间】:2018-04-25 07:45:26
【问题描述】:
我今年才开始使用 MATLAB for Uni,作为一个家庭作业测验问题,我被要求创建一个分段函数(我称之为“piecewise_method”),它能够在“x”上建立一个不同的方程" 取决于 "x" 是低于 0、介于 0 和 8 之间还是高于 8。这是我目前编写的代码。
function solution = piecewise_method(x)
% given the value of the input x, the function
% piecewise_method will choose from one of the three specified
% equations to enact upon the given value of x
% and give the user a solution
solution = zeros(size(x));
e = exp(1);
for j = 1:size(x)
a = x(j);
if a < 0
solution(j) = -a.^3 - 2*a.^2 + 3*a;
elseif (a >= 0) && (a <= 8)
solution(j) = (12/pi)*sin(pi*a./4);
else
solution(j) = ((600.*e.^(a-8))./(7*(14+6.*e.^(a-8))) - 30/7);
end
end
使用输入运行时...
x = -3:12
它为变量解产生这个结果...
解决方案 =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
现在这向我表明该数组正在正确创建,但由于某种原因,for 循环没有正常运行,或者没有按预期运行。我尝试从基本级别开始多次重建 for 循环,但是当我开始输入方程式时,它又开始分崩离析,所以我相信我的方程式可能有问题(这就是为什么我到处都放括号的原因,以防万一)。
问题还要求我使用if语句,所以我无法尝试使用其他方法来产生分段方法函数,并且从我的搜索来看,似乎没有很多分段函数中if语句的例子.
如果您能提供任何可以帮助我使用此功能的建议,将不胜感激,谢谢!
附:如果您有任何建议可以在将来改进我的问题,那也很好!
【问题讨论】:
-
您只需将
for j = 1:size(x)替换为for j = 1:numel(x)。size(x)将为 x 的行和列返回 [1 16],而numel(x)将返回元素的数量,而与 x 是行向量还是列向量无关。更一般地说,断点是你的朋友:在你的函数中放置一个断点,然后一步一步地遍历它,查看变量值! -
哦,对了,在你提到它之前,我没有看到关于断点的选项。 MATLAB 给我一个错误关于索引函数,当我尝试你的方法时,可能还有其他需要先完成的事情吗?
-
错误是什么?无论如何,我的方法与下面答案中提出的方法完全相同,所以如果该方法有效,我的方法也应该...
-
我明白了,我想我一直很困惑。但它现在可以工作了,谢谢。
-
不要使用
e.^(a-8),使用exp(a-8)会更精确(而且可能更快)。注意是相同的字符数!