使用^时出错一个参数必须是方阵,另一个必须是标量。使用POWER(。^)表示元素功率

时间:2017-09-22 13:48:51

标签: matlab matlab-figure minimization simulated-annealing

我正在尝试从此函数中编写最小化函数,

mode1(x)

其中,    -10< = x1< = 10和-10< = x2< = 10.

这就是我写的,这是对的吗?

(4-2.1*x1^2+x1^4/3)*x1^2+x1*x2+(-4+4*x2^2)*x2^2

但为什么,

min = -10;
max = 10;
x1 = min+max*rand();
x2 = min+max*rand();
T = 1.0;
Tmin = 0.0000001;
refresh = 0.9;
finalMin = (4-2.1*x1^2+x1^4/3)*x1^2+x1*x2+(-4+4*x2^2)*x2^2;
finalCoordinate=[x1,x2];
while(T>Tmin)
    i=0;
    while(i<=300)
        x1= min+max*rand(1,1);
        x2= min+max*rand(1,1);
        newMin = (4-2.1*x1^2+x1^4/3)*x1^2+x1*x2+(-4+4*x2^2)*x2^2;
        delta1 = finalMin-newMin;
        if(newMin < finalMin)
            finalMin=newMin;
            finalCoordinate=[x1,x2];
        elseif(2.71828^(delta/T))>(0+(rand(1)*1))
            finalCoordinate=[x1,x2];
        end;
        i=i+1;
    end;
    T = T*refresh;
end;

如何从该坐标获得100%的准确度?

1 个答案:

答案 0 :(得分:0)

好吧,根据错误消息,delta可能不是标量。你没有在这里的代码中定义它。

通常,您的问题是非线性约束优化问题,可以使用优化工具箱中的fmincon快速解决:

fun = @(x) (4-2.1*x(1)^2+x(1)^4/3)*x(1)^2+x(1)*x(2)+(-4+4*x(2)^2)*x(2)^2;
x0 = rand(2,1)*20-10;
[x,fval] = fmincon(fun, x0, [],[], [],[], [-10;-10], [10;10])