24小时热门版块排行榜    

查看: 578  |  回复: 0

thooo1985

新虫 (初入文坛)

[求助] MATLAB二元非线性优化问题

麻烦老师帮忙看一下程序的问题。中间函数相互关联,不知道该怎么编写函数了,程序如下。谢谢
function [w,x,n]=tansuo3(W,x1,x2,x4)
%初始输入值%
% w=20;
% x(1,1)=180;
% x(1,2)=4;
% x(1,4)=3;
x(1,1)=x1;
x(1,2)=x2;
x(1,4)=x4;
%第一次方程求解得到的值%
y(1,1)=2.2171+0.021226.*x(1,1)-0.47545.*x(1,2);
y(1,2)=-18.09883+0.32313.*x(1,1)-1.00499.*x(1,2)-7.84734*10.^(-4).*x(1,1).^2;
y(1,3)=y(1,1);   %方程组(y(1,1),y(1,2))与方程组(y(1,3),y(1,4))的关系%
x(1,3)=(%y(1,3)-4.12488+1.5333.*x(1,4)-0.13043.*x(1,4).^2)./0.031;
y(1,4)=0.61721+0.058066.*x(1,3)+0.01073.*x(1,4)-5.5*10.^(-3).*x(1,3).*x(1,4);

%第一次计算满足条件的最小n值%
w(1,1)=W;
n(1,1)=(3*w(1,1)+3*y(1,2)/2-y(1,4)*3/2)/(2*y(1,2));
n(1,1)=ceil(n(1,1));
%返回计算最终的w值%
if n>2
    w(1,1)=y(1,4)/2+y(1,2)/3+(n(1,1)-2)*y(1,2)*2/3+y(1,2)/2;
elseif n==2
    w(1,1)=y(1,4)/2+y(1,2)/3+y(1,2)/2;
elseif n<2
    w(1,1)=y(1,4)/2;
end
%以第一次计算的w为条件,计算第二次至第i次的x(i,1),x(i,2),x(i,3),x(i,4)和最小值n%
k=y(1,1);
i=1;
while k<=w %循环终止条件%
    i=i+1; %10是假定的值,循环可能在10次内停止%
    %第i次方程组的关系,与第一次的关系相同%
%     y(i,1)=2.2171+0.021226.*x(i,1)-0.47545.*x(i,2);
%     y(i,2)=-18.09883+0.32313.*x(i,1)-1.00499.*x(i,2)-7.84734*10.^(-4).*x(i,1).^2;
%     y(i,3)=y(i,1);
%     x(i,3)=(y(i,3)-4.12488+1.5333.*x(i,4)-0.13043.*x(i,4).^2)./0.031;
%     y(i,4)=0.61721+0.058066.*x(i,3)+0.01073.*x(i,4)-5.5*10.^(-3).*x(i,3).*x(i,4);
    %%%%%%%%%%%%%%%%%%%%%%%第二次循环时的电流未知
    w(i,1)=w(i-1,1)-y(i-1,2)/2;   %第i次w的值与第i-1次的关系%
    [X fval]=fmincon(@GAsovle1,[100,3,95,3.2],[164,3.6,94,2.6],[206,6.4,136,5.4]) %求满足x(i,1),x(i,2),x(i,3),x(i,4)范围要求的最小的n的值%
    n(i,1)=ceil(n(i,1)) %对n取整%
    %取整后的n带入w的计算公式,求解新的w值%
    y(1)=;
    y(2)=(-18.09883+0.32313.*X(1)-1.00499.*X(2)-7.84734*10.^(-4).*X(1).^2);
    y(3)=;
    y(4)=(0.61721+0.058066.*X(3)+0.01073.*X(4)-5.5*10.^(-3).*X(3).*X(4));
    if n>2
        w(i,1)=y(i,4)/2+y(i,2)/3+(n(i,1)-2)*y(i,2)*2/3+y(i,2)/2;
    elseif n==2
        w(i,1)=y(i,4)/2+y(i,2)/3+y(i,2)/2;
    elseif n<2
        w(i,1)=y(i,4)/2;
    end
    %输出第i次计算的w,n,x的值
    w(i,1)
    n(i,1)
    x(i,1)=X(1);
    x(i,2)=X(2);
    x(i,3)=X(3);
    x(i,4)=X(4);
k=k+y(i,1)
end
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 thooo1985 的主题更新
信息提示
请填处理意见