shenlanyan 发表于 2009-8-9 15:27 
我有个问题想问大家一下,解方程
0.7672=1+4/a*(1/a*(int(t/(exp(t)-1),0,a)-1)
求出里面的a,我用matlab编程时,里面出现了polylog(2,exp(a)),对于polylog函数,查了一下资料,还是不懂怎样使用他,恳请大家帮我看看上述方程怎样用matlab编程求解,非常感谢!
你个int是定积分的意思吧?如果是的话,我算出来的解是1.2442,没有碰到你说的这个问题啊?思路是按照二楼的建议,先画图看看解大概在哪里,然后fsolve.中间的定积分部分用的是quad函数进行数值积分。注意不要直接用这个解,我没怎么检查代码,不敢保证没有录入错误什么的;尤其是积分哪部分用到了点乘点除,至少你拿其他的数值积分办法验证一下我那个数值积分是对的,比如trapz.还有你给的那个函数里面多了个左括号,我给删了,也不知道删的对不对。自己看代码吧。
代码分两部分,主程序画图、求解,pinggu.m定义你的那个方程:
主程序:
clear;
clc;
% 以下部分是画图
n=100;
xmin=0.6;
xmax=2; % 花完图看到解大概在0.6-2之间,所以把这部分图专门画出来
x=xmin:(xmax-xmin)/(n-1):xmax;
y=zeros(1,100);
for i=1:n
y(i)=pinggu(x(i)); % pinggu(.)就是你的那个函数,下面有定义
end
plot(x, y, 'DisplayName', 'y vs x', 'XDataSource', 'x', 'YDataSource', 'y'); figure(gcf);
%求解
fsolve(@pinggu,1)
pinggu.m:
function y=pinggu(a)
integ=@(t) t./(exp(t)-1); %定义被积函数。注意用的是点除而不是除法
y=1+4/a*1/a.*(quad(integ,0,a)-1)-0.7672; % 同样注意用的是点乘而不是乘法,主要是因为quad函数要进行向量运算。