内置的MATLAB命令来查找未知上限,使得整数等于零?

时间:2018-12-07 19:17:37

标签: matlab math

我需要知道使用什么命令来查找上限(当前未知),该上限在以下积分中返回零。下限为零。

积分:log(x)* sin(x)* cos(1/1 + x ^ 2)

谢谢。

2 个答案:

答案 0 :(得分:0)

使用let str = "teste,,teste1,teste2,,,,teste4".split(',').filter(e=>e).join(',') console.log(str);,但是对于每个起点fminbnd,解决方案将有所不同,具体取决于起点所在的区域:

x0

如果要查找全局最小值,则需要尝试其他起点,直到找到实际上为您提供零的解决方案。

答案 1 :(得分:0)

实际上,牛顿法 https://en.wikipedia.org/wiki/Newton%27s_method (最有效的寻根方法之一)可以通过以下方式直接使用:

clear all;close all;hold on;
f=@(x)log(x).*sin(x).*cos(1./(1+x.^2)); % parentheses added in cos() !
F=@(x)integral(f,0,x); % antiderivative of f such that F(0)=0.
%x=0:0.01:5;plot(x,f(x));plot(x,arrayfun(@(x)F(x),x),'r') % see figure.
x0=4;x=x0; % starting point ; different x0 may not give the same limit...
for k=1:5; % 5 steps are usually sufficient
   x=x-F(x)/f(x); % Newton's iteration
end
x
F(x), % should be almost 0

enter image description here

图。 1:蓝色为f,红色为F。根变成黑色圆圈。

一个发现

  • ,起始点x0 = 1.5,结果为x = 1.6466,F(x)= -3.2446e-10。

  • ,起始点x0 = 4,结果为x = 4.2133,F(x)= -3.2448e-10。

  • ,起始点x0 = 8,结果为x = 8.0445,F(x)= -3.2447e-10。

等“随意”:由于绕x轴的波动越来越大,因此将有无限个解。

备注:

严格来说,对于x = 0,f是未定义的,但是取f(0)= 0是自然的选择(即使对于Matlab!),因为f(x)可以写为

                   f(x) = (x log(x)). (sin(x)/x) . (cos(1/(1+x^2))

当x趋于0时,在RHS上,第一个括号趋于$ 0 $,第二个括号趋于1,第三个趋于cos(1)。因此,它们的乘积趋向于0。