如何用matlab求解下面的一元非线性方程?
1个回答
展开全部
1、因被积函数的形式,使用符号积分的方法应该不可行。
2、使用数值方法方法,定义函数
f=@(x)quadl(@(e)e.^2./(exp((e-x)/0.026)-1),0.9,3.4)-quadl(@(e)e.^2./(exp((e+x-3.04)/0.026)-1),2.5,3.4)-0.1527
这时x不宜出现在积分区间内,否则分母出现0,导致积分结果为无穷大(其实未必为无穷大,但数值积分方法存在这样的弊病)。
3、经试探,取x=0.85~0.9,绘制曲线
x=0.85:0.001:0.9;
plot(x,arrayfun(f,x))
可见在此区间内存在解。
4、使用fsolve求解得到的结果为0.9
>>
fsolve(f,0.85,optimset('tolfun',1e-14,'tolx',1e-8))
optimization
terminated:
relative
function
value
changing
by
less
than
max(options.tolfun^2,eps)
and
sum-of-squares
of
function
values
is
less
than
sqrt(options.tolfun).
ans
=
0.9000
使用fzero求解失败(得到nan)。
5、经多次手工试探,较为准确的解为
>>
f(0.8999796679293)
ans
=
-1.6582e-011
这种方法总感觉有些问题,但毕竟花了一些时间,写出来供楼主参考吧。
2、使用数值方法方法,定义函数
f=@(x)quadl(@(e)e.^2./(exp((e-x)/0.026)-1),0.9,3.4)-quadl(@(e)e.^2./(exp((e+x-3.04)/0.026)-1),2.5,3.4)-0.1527
这时x不宜出现在积分区间内,否则分母出现0,导致积分结果为无穷大(其实未必为无穷大,但数值积分方法存在这样的弊病)。
3、经试探,取x=0.85~0.9,绘制曲线
x=0.85:0.001:0.9;
plot(x,arrayfun(f,x))
可见在此区间内存在解。
4、使用fsolve求解得到的结果为0.9
>>
fsolve(f,0.85,optimset('tolfun',1e-14,'tolx',1e-8))
optimization
terminated:
relative
function
value
changing
by
less
than
max(options.tolfun^2,eps)
and
sum-of-squares
of
function
values
is
less
than
sqrt(options.tolfun).
ans
=
0.9000
使用fzero求解失败(得到nan)。
5、经多次手工试探,较为准确的解为
>>
f(0.8999796679293)
ans
=
-1.6582e-011
这种方法总感觉有些问题,但毕竟花了一些时间,写出来供楼主参考吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |