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

采用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日

悬赏问题

  • ¥15 请问为什么我配置IPsec后PC1 ping不通 PC2,抓包出来数据包也并没有被加密
  • ¥200 求博主教我搞定neo4j简易问答系统,有偿
  • ¥15 nginx的使用与作用
  • ¥100 关于#VijeoCitect#的问题,如何解决?(标签-ar|关键词-数据类型)
  • ¥15 一个矿井排水监控系统的plc梯形图,求各程序段都是什么意思
  • ¥15 ensp路由器启动不了一直报#
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了