【问题标题】:Using fminsearch on Matlab for Smallest Circle在 Matlab 上使用 fminsearch 获取最小圆
【发布时间】:2016-11-03 12:12:25
【问题描述】:

对于我的作业,我应该计算最小的圆。第一部分要求我计算欧几里得距离,我使用以下代码进行管理:

function euclidean = center(x, y)
maximaldist = 0;
rng(0, 'twister')
A= randi([0 10],10,2)
for i=1:size(A,1)
    euclidean=sqrt((x-A(i)).^2 + (y-A(i+size(A,1))).^2);
    if euclidean > maximaldist
        maximaldist = euclidean;
    end
end

对于第二部分,我需要继续使用 fminsearch,但由于某种原因,我无法在代码中实现它(我可以从命令窗口使用它)。谁能帮我解决这个问题?

编辑:所以我尝试过...

基本上我能找到的所有东西。

for i=1:size(A,1)
fun=@(x) sqrt((x(1)-A(i)).^2 + (x(2)-A(i+size(A,1))).^2);
end
x0=[0 0];
fminsearch(fun, x0)
end

这是我绝望的 fminsearch 部分。

然后我把代码改成了这个;所以我可以尝试如下;

function euclidean = denneme(x,y)
%point_x=point(1);
%point_y=point(2);
rng(0, 'twister')
a= randi([0 10],10,1);
b= randi([0 10],10,1);
distance=sqrt((x-a).^2 + (y-b).^2);
euclidean=max(distance);
f= @(x) denneme(x(1),x(2));
fminsearch(f, [0 0])

但它说输入参数不足。我尝试了很多东西并删除了很多东西,所以我无法进行很多试验。

【问题讨论】:

    标签: matlab fminsearch


    【解决方案1】:

    如果您发布您已经尝试过的内容并描述您遇到的问题会有所帮助。

    编辑:在这里,您是否正在重载中心功能?我很好奇那个代码运行了。

    【讨论】:

    • 哦,对不起。我现在正在编辑以添加我尝试过的内容。在某些情况下,它会使系统过载并给出“内存不足”错误,在某些情况下,我只会收到“输入参数不足”错误。
    • 我看到你正在定义 denneme,但我没有看到结束,所以我假设你没有包括那部分......看起来denneme 需要两个输入,而你'重新给它一个。这可能是你的问题。
    • 我环顾四周,我认为fminsearch 实际上要求您的函数只有一个输入变量。您可能需要一个循环来评估您的输入变量之一并在其上运行fminsearch。看起来你试图在你的第一个fminsearch sn-p 中做到这一点,但在循环中,你只会得到fun where i=size(A,1),因为你每次都覆盖它,什么时候我试过了,在循环中使用匿名函数意味着它将Ai 作为变量读取,而不是评估A(i)
    • 哦,我只是没有复制 denneme 的“结尾”,它有结尾。问题是,我可以从命令窗口使用 fminsearch。但我不能只在代码中实现它。第一次尝试对问题进行编码有很多错误——这就是为什么我切换到第二个,看看它是否会更好。它返回正确的值,但我不能使用 fminsearch :/
    • 啊,明白了。那么,您是否能够在命令窗口中使用 f 的两个输入变量使其工作?这就是我尝试复制它时遇到的问题。您可以尝试将 denneme 更改为采用 2 元素数组的单个输入,然后在函数中对其进行索引,并查看 fminsearch 是否适用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多