Octave fzero 不是有效的初始包围
Octave fzero not a valid initial bracketing
为什么这个 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
您的代码在 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
为什么这个 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
您的代码在 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