matlab中fsolve函数求解中的一个问题求解方程e^(-(x/a1)^b1)+e^(-(x/a2)^b2)+e^(-(x/a3)^b3)=3*(1-Ft),其中a1,a2,a3为服从均值为4000,方差为1000的正态分布随机值,b1,b2,b3为服从均值为2,方差为0.5的正态分布随机值
matlab中fsolve函数求解中的一个问题求解方程e^(-(x/a1)^b1)+e^(-(x/a2)^b2)+e^(-(x/a3)^b3)=3*(1-Ft),其中a1,a2,a3为服从均值为4000,方差为1000的正态分布随机值,b1,b2,b3为服从均值为2,方差为0.5的正态分布随机值
matlab中fsolve函数求解中的一个问题
求解方程e^(-(x/a1)^b1)+e^(-(x/a2)^b2)+e^(-(x/a3)^b3)=3*(1-Ft),其中a1,a2,a3为服从均值为4000,方差为1000的正态分布随机值,b1,b2,b3为服从均值为2,方差为0.5的正态分布随机值,Ft为[0,1]均匀分布的随机值.我自己编的程序如下:
m文件:
function F = myfun(x)
Ft = rand;
a1 = 3000; a2 = 3500; a3 = 4200; b1 = 2; b2 = 2.5; b3 = 1.8;
F = exp(-(x/a1)^b1)+exp(-(x/a2)^b2)+exp(-(x/a3)^b3)-3*[1-Ft];
主程序:
x0 = 4000;
options=optimset('Display','iter');
[x,fval] = fsolve(@myfun,x0,options)
输出结果始终与x0相同(即x0改变后,输出值都是与x0相同的值),这显然不对,如果将Ft改成[0,1]区间的某一固定值(如:0.2551),则输出不同于x0的初值(这时理论上应该是正确的).
疑问:估计m文件中Ft = rand语句有问题,请高手指点(我所要求的Ft是某一随机值,而不是某一固定值);另外(1)以上程序中a1,a2,a3,b1,b2,b3都已经是固定值,如果要取成服从对应分布的随机值,应该怎么改程序;(2)如果a1,a2,a3,b1,b2,b3都已取成服从对应分布的随机值作为他们的固定值,重复取10个[0,1]区间均匀分布的随机值赋给Ft,计算得到对应10个x值,程序该怎么改?
如有未表述清楚之处,可进一步交流.
matlab中fsolve函数求解中的一个问题求解方程e^(-(x/a1)^b1)+e^(-(x/a2)^b2)+e^(-(x/a3)^b3)=3*(1-Ft),其中a1,a2,a3为服从均值为4000,方差为1000的正态分布随机值,b1,b2,b3为服从均值为2,方差为0.5的正态分布随机值
嗯,确实是你Ft = rand的错误,每次调用函数Ft都改变了.要实现你的要求程序如下:
a = normrnd(4000, sqrt(1000), 1, 3); % a = [1 2 3];b = normrnd(2, sqrt(0.5), 1, 3);
f = @(a,b,Ft)fsolve(@(x)sum(exp(-(x./a).^b))-3*(1-Ft), 0, optimset('Display','off'));
x = [];
for Ft = rand(1,10)
\x09x = [x f(a,b,Ft)];
end
至于为什么x总等于 0,不是程序有错,而是a的值总是太大!你可以试试小点的a,比如a = [1 2 3].