我需要知道使用什么命令来查找上限(当前未知),该上限在以下积分中返回零。下限为零。
积分:log(x)* sin(x)* cos(1/1 + x ^ 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
图。 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。