prudentL 2022-02-15 23:20 采纳率: 100%
浏览 37
已结题

采用fsolve求数值解,最终精度达不到0.01就停止,如何改进代码使得函数值的终止容限为0.01

img

采用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);
运行结果及报错内容

img


最终结果f(x)迭代到21.0939就结束了,达不到想要的精度

我想要达到的结果

如何改进代码,使得函数所得精度小于等于0.01

  • 写回答

2条回答 默认 最新

  • youcans_ 人工智能领域优质创作者 2022-02-16 21:15
    关注

    fslove 不是万能的,特别是你给出的这样复杂的方程,可能是病态的而不能用导数方法求解。
    建议做几个尝试:
    (1)把等式右侧前 3项 移项到左侧,即右侧只保留积分项;
    (2)fslove 选择 单纯性方法 优化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月26日
  • 已采纳回答 2月18日
  • 创建了问题 2月15日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来