24小时热门版块排行榜    

查看: 4326  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

星——星

新虫 (初入文坛)

[求助] matlab中已知积分结果,求变量的值

积分函数如图所示,已知函数F的值,如何用matlab求出t的值,还请各位大侠帮帮忙~

matlab中已知积分结果,求变量的值
1852167079.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yz457694

铁杆木虫 (正式写手)

【答案】应助回帖

星——星: 回帖置顶 2016-08-20 16:14:54
代码没缩进了,重发一下
函数代码:
CODE:
function F=myfun(t)     
  ubound=10000;     
  x=0:0.1:ubound;     
  y=sqrt(x)./(1+exp(x-t));     
  F=trapz(x,y);%梯形积分

求解代码:
CODE:
clear,clc
F=1.4893 ;   %给定的F值
ta=0;tb=100;
fa=F-myfun(ta);
fb=F-myfun(tb); %fa*fb<0即可,不满足的话可以适当放大区间
error=inf;
while error>0.001   %自定义精度     
    tc=(ta+tb)/2;     
    fc=F-myfun(tc);     
    if fa*fc<0         
        tb=tc;     
    else         
        ta=tc;     
    end     
    error=tb-ta;
end
t=(ta+tb)/2;
t

11楼2016-08-20 00:37:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 13 个回答

月只蓝

主管区长 (职业作家)

代入高精度的辛普森积分公式,将原式化成只包含t的代数式,解该代数方程即可。
或者,根据F值,试算t值,可得到t的大概范围,将t范围缩小到足够小,然后将该范围区间等分100份(或者更多),逐个扫描取F值误差左偏差和右偏差最小的两个t值,再以此两者为范围扫描100次,即可获得精度很高的t值。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2016-08-18 22:13:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yz457694

铁杆木虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
如下:
syms x;
F=      ;%给定F的值
myfun=@(t) F-int(sqrt(x)/(1+exp(x-t)),x,0,inf);
t0=     ;%给一个t的初值,最好取接近真实值,收敛会快些
t=eval(fzero(myfun,t0))   %也可以用fsolve
3楼2016-08-18 23:13:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

星——星

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 月只蓝 at 2016-08-18 22:13:33
代入高精度的辛普森积分公式,将原式化成只包含t的代数式,解该代数方程即可。
或者,根据F值,试算t值,可得到t的大概范围,将t范围缩小到足够小,然后将该范围区间等分100份(或者更多),逐个扫描取F值误差左偏 ...

可以附上相应的代码吗?本人也是最近才开始接触Matlab,对于积分的计算还是第一次,望大侠不吝赐教
4楼2016-08-19 11:46:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见