
function f=myfun(x)
f=x(1)+x(2)+81;
end %%函数,其中x=x(1)y=x(2)
function [c,ceq]=mycon(x)
c(1)=100000-x(1)x(2);
c(2)=1-x(1);
c(3)=1-x(2);
ceq=[];
end %%条件
clc,clear all
x0=[400 ;400];
[x,fval]=fmincon(@myfun,x0,[],[],[],[],[],[],@mycon)
x =
3163406
3161150 %即x=y等于这个数时最小
fval =
7134556 %最小值为这个值
function f=myfun(x)
f=x(1)+x(2)+81;
end %%函数,其中x=x(1)y=x(2)
function [c,ceq]=mycon(x)
c(1)=100000-x(1)x(2);
c(2)=1-x(1);
c(3)=1-x(2);
ceq=[];
end %%条件
clc,clear all
x0=[400 ;400];
[x,fval]=fmincon(@myfun,x0,[],[],[],[],[],[],@mycon)
x =
3163406
3161150 %即x=y等于这个数时最小
fval =
7134556 %最小值为这个值
如何用蒙特卡洛法(Monte-Carlo法)求解多元函数的极值?
蒙特卡洛法(Monte-Carlo法)的思路:
1求变量受限的大致范围;
2在上述的范围中用随机数生成若干组实验点,先验证是否满足所有约束条件。若满足则将其划分到行组,再从组中找到的函数的最大值(最小值)。
根据题主给出的二元高次函数(题2),说明用matlab求其极值问题的过程:
第一步:确定x1、x2极值的范围,如x10,20,x20,100
第二步:自定义函数,即
function [f,g]=fun1(x)
f=x(1)^3+x2^2-10x(1)x(2)+1;
g=[-x(1)-20; -x(2)-40];
第三步:利用for循环语句和if判断语句,求解其最优解
for i=1:10^7
x=unifrnd(0,100,1,2); %随机数
[f,g]=fun1(x);
if all(g<=0)
if p0>f
x0=x;p0=f;
end
end
end
第四步:整理代码并运行,得到x0 和p0的结果。
运行结果
你这个问题属于参数拟合问题。可以通过Matlab的nlinfit()非线性最小二乘回归函数来求解。计算参数后再绘制Q(t)的曲线图。
解决途径:
1、Q=[。。。],t=[。。。] %给出一组Q,t数据;
2、自定义函数,syms n,fun=@(a,t)a(1)(1-exp(-0001t))(816468746375+6531749971symsum((-1)^n/(n^2pi^2a(2)-04),1,inf))
3、用nlinfit()函数求参数,即K=a(1),a=a(2)
[a,r,J] = nlinfit(t,Q,fun,t0) %t0为t的初值
4、然后根据t的范围内的值,求出一系列Q值,绘出其Q(t)的曲线图。
利用linprog()函数就可以了,下面是我做的一个题,给你参考一下: 求解线性规划问题: min z=-09x1-045x2+005x3-14x4-095x5-045x6-19x7-145x8-095x9 st x1+x2+x3
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)