level 7
你这个是超越方程吧,没有解析解,要用数值解fzero、vpasolve、fsolve
2020年07月28日 10点07分
3
level 7
x=0:0.01:100;
result = arrayfun(@(z)fzero(@(y)tan(y)-tanh(y),z),x);
result(result>0.001) = 0;
result = uniquetol(result);
2020年07月28日 10点07分
4
回复 如舟靠岸🌴 :啊这,我发现我中间写得有问题,你看看下面楼吧
2020年07月29日 16点07分
level 7
% fzero和fsolve的对比
tic
x = 0:0.01:100;
[result1,fval1] = arrayfun(@(z)fzero(@(y)tan(y)-tanh(y),z),x);
indexf1 = abs(fval1)>0.001; %fzero解会有奇异点,需去除
result1(indexf1) = [];
[result1,indexf2] = uniquetol(result1,1e-3);%带容差去除相同零点
toc
fval1(indexf1) = [];
fval1 = fval1(indexf2);
% 利用fsolve得到的解没有奇异解但是效率低而且精度低
tic
opt = optimset('Display','off'); % 你不加试试
x = 0:0.01:100;
result2 = arrayfun(@(z)fsolve(@(y)tan(y)-tanh(y),z,opt),x);
result2 = uniquetol(result2,1e-3);
toc
fval2 = tan(result2)-tanh(result2);
plot(fval1);hold on ;plot(fval2)
legend('fval1','fval2')
2020年07月29日 16点07分
5