采用fsolve求解L,A,B的数值解;所得数值解精确度远大于0.01,理论上L数量级在1e-3,A数量级在1e-42,B数量级在1e-18
问题相关代码
clear;clc;
va=1775;
T1=4;
T2=300;
T3=100;
hbar=1.05457266e-34;
k=1.3806505e-23;
% l = x1, a = x2, b = x3 t=x4
f = @(x)[(k./(2*((pi)^2).*va)).*((k./hbar).^3).*(T1.^3).*integral(@(t)(t.^4).*exp(t)./(((1e3*va./x(1))+(1e-42*x(2).*(k.*T1./hbar).^4.*(t.^4))+(1e-18*x(3).*T1.*exp(-203./(3*T1)).*(k.*T1./hbar).^2.*t.^2)).*((exp(t)-1).^2)),0,38.75)-66.3478;
(k./(2*((pi)^2).*va)).*((k./hbar).^3).*(T2.^3).*integral(@(t)(t.^4).*exp(t)./(((va./x(1))+(x(2).*(k.*T2./hbar).^4.*(t.^4))+(x(3).*T2.*exp(-203./(3*T2)).*(k.*T2./hbar).^2.*t.^2)).*((exp(t)-1).^2)),0,0.5167)-1.4602;
(k./(2*((pi)^2).*va)).*((k./hbar).^3).*(T3.^3).*integral(@(t)(t.^4).*exp(t)./(((va./x(1))+(x(2).*(k.*T3./hbar).^4.*(t.^4))+(x(3).*T2.*exp(-203./(3*T3)).*(k.*T3./hbar).^2.*t.^2)).*((exp(t)-1).^2)),0,1.55)-4.3545];
options = optimset('Display','iter','TolFun',1e-2,'TolX',0.5e-2,'MaxFunEvals',1e20,'LargeScale','on');
%TolFun – 函数值的终止容限:当迭代所得函数值小于此容限时即认为结果收敛,停止运算。
% TolX – x处的终止容限:当迭代所得函数值小于此容限时即认为结果收敛,停止运算
x = fsolve(f,[3.45,7.5,18],options);
disp(x);
运行结果及报错内容
最终结果f(x)迭代到21.0939就结束了,达不到想要的精度
我想要达到的结果
如何改进代码,使得函数所得精度小于等于0.01