Octave fzero不是有效的初始包围

时间:2015-11-16 17:02:29

标签: loops octave

为什么这个for循环会出错:fzero:不是有效的初始包围

代码:

a = input('Introduza o valor de a: ');
x = 0:.1:50;
h = @(x) cos(x);
g = @(x) exp(a*x)-1;
f = @(x) h(x) - g(x);

c = zeros(length(x))
for i=1:length(x)
    c(i) = fzero(f,x(i));
end

plot(x, f(x));
hold on
plot(c,f(c),'-xr')
hold off

1 个答案:

答案 0 :(得分:5)

您的代码在Matlab R2015b中完美运行。我猜测Octave的fzero使用不同的例程来查找根的括号,只提供一个初始猜测(或者您使用旧版本的Octave / fzero,它不支持单值选项。)

您可以尝试提供自己的功能,以便从单个初始猜测中找到有效的括号。请参阅MathWorks创始人Cleve Moler的recent post,特别是示例signchange函数。在signchange函数的路径上创建一个M文件(或子函数),然后尝试:

x = 0:0.1:50;
h = @(x) cos(x);
g = @(x) exp(a*x)-1;
f = @(x) h(x) - g(x);

c = zeros(length(x),1)
for i=1:length(x)
    [a,b] = signchange(f,x(i))
    c(i) = fzero(f,[a b]);
end

plot(x, f(x));
hold on
plot(c,f(c),'-xr')
hold off