matlab中fsolve函数求解中的一个问题
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/18 15:53:37
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值,程序该怎么改?
如有未表述清楚之处,可进一步交流.
求解方程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值,程序该怎么改?
如有未表述清楚之处,可进一步交流.
嗯,确实是你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].
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].
Matlab中syms构建函数后用fsolve求解
MATLAB求解非线性方程组用fsolve函数求解
MATLAB中fsolve解非线性方程问题
Matlab问题:请教fsolve求解非线性方程问题
matlab 中解二元非线性方程组问题,fsolve高手帮帮忙
求Matlab大神!我用fsolve函数求解六元非线性方程组,但是方程组中的系数是通过其它函数求出,然后通过全
求Matlab高手帮我解答!我用fsolve函数求解非线性方程组,但是方程组中的系数我是通过另一个程序求出的,
关于Matlab求解非线性隐式方程组的求解,利用fsolve,solve,或ezplot等自带函数求解,
matlab 中fsolve求解非线性方程组可以给定解的区间么
matlab用fsolve求解非线性方程组,无法求解……
matlab中solve函数求解隐函数的问题
使用matlab中的solve函数求解符号方程组的问题