【问题标题】:Why matlab gives fminsearch optimisation error?为什么matlab给出fminsearch优化错误?
【发布时间】:2020-03-30 05:46:15
【问题描述】:

我有这样一个问题,我会在matlab中做。但是,我得到了一些错误:

求 x ∈ [0, 1] 的值最小化矩阵 A(x) = xM +(1−x)P 的最大特征值,其中 M 是 5×5 幻方,P 是 5 × 5 帕斯卡矩阵。

我的 matlab 代码:

 %Define Matrices 
 M = magic(5);
 P = pascal (5);

% Define the variable x
 syms x

%Define the given matrix A
>> A = x*M + (1-x)*P;

%Define the eigenvalue lambda as y;
 syms y

%Find determinant of |A - lambda * I|
 D = det (A - y*eye(5))

%Define Objective function 
objective = @(y) y

%And Define the constraint
constraint = @(x,y) (-1)*D

%initial value x0 = (0:0.001:1);

%Minimization problem solving 

x = fmincon(objective, constraint, x0)

我收到此错误;

使用 fmincon 时出错(第 221 行) FMINCON 要求以下输入为双精度数据类型:'X0'。

或者如果我使用另一个函数:fminsearch

x = fminsearch(目标,约束,x0) 在这种情况下,我收到以下错误:

使用 fminsearch 时出错(第 96 行) FMINSEARCH 只接受双精度数据类型的输入。

我该如何处理这些错误?我的错误在哪里?我该如何纠正它们?

【问题讨论】:

  • 您为什么要使用符号数学工具箱? fmincon 声明它假定矩阵具有某种形式。您实际上并没有为此定义符号函数。如果您确实想求解符号函数,请使用符号数学工具箱中的solve
  • 错误消息告诉您问题的确切原因。你读过它们吗? “FMINCON 要求以下输入为双精度数据类型:‘X0’。”这意味着 X0 必须是双精度数。因此,要修复此错误,请查看代码中 X0 的数据类型,并确保其为双精度。您应该能够自己解决这些问题,Matlab 错误消息通常很有帮助——请阅读它们!

标签: matlab fminsearch


【解决方案1】:

我猜你要找的可能是fminbnd,这有助于

在固定区间上求单变量函数的最小值

n = 5;
M = magic(n);
P = pascal(n);
x = fminbnd(@(x) max(eig(x*M + (1-x)*P)),0,1);

这样

>> x
x =  0.79603

【讨论】:

    【解决方案2】:

    我怀疑您没有向我们展示正确的代码,因为您在那里有 sums。我怀疑你的意思是syms

    fmincon 仅适用于数字数据,不适用于符号数据。

    【讨论】:

    • 对不起,在这里复制粘贴时,我写了总和。在matlab中,它是正确的。好吧,我该如何解决这个问题。除了这个,我没有任何想法和知识。你能帮帮我吗?也感谢您的评论。
    • @B11b 检查文档。也许solve 会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多