2016-11-23 2 views
0

私はmatlabAckley Functionをプロットしようとしているしかし、私は次のようなエラーにサーフィン(ラインXXXを使用して「サーフィン」エラー(MATLAB)

エラーを取得しています)

X、Y、Z、およびCは複合体ではありません。

ここで私はあなたがterm1 = -a * exp(-b*sqrt(1/d * sum(x)));であなたのsqrt()の計算のために負の引数を取得している

clear; clc; close all; 
% Parameters 
nx = 2;     % No. of Input variables 
f = @ackley; 
limits = repmat([-40 40], nx, 1); 
titl = 'Ackley'; 

% Plot 
[X,Y] = meshgrid(linspace(limits(1,1),limits(1,2),100),... 
        linspace(limits(2,1),limits(2,2),100)); 
Z = reshape(f([X(:)'; Y(:)']), 100, 100); 

surfc(X,Y,Z); 

Ackley.m

function [y] = ackley(x) 
    d = length(x); 
    a = 20; 
    b = 0.2; 
    c = 2*pi; 

    term1 = -a * exp(-b*sqrt(1/d * sum(x))); 
    term2 = -exp(1/d * sum(cos(c * x))); 

    y = term1 + term2 + a + exp(1); 
end 
+0

それは '合計(X)でなければなりません^ 2 ' – hbaderts

+0

@hbadertsまたは'合計(X。 。^ 2) ' –

+0

@hbadertsしかし、私は上記のコードで間違ったプロットを取得しています。 –

答えて

0

として言及hbaderts、次のようにアクレイ機能を変更すると、あなたのコードは動作します:

function [y] = ackley(x) 
    d = length(x); 
    a = 20; 
    b = 0.2; 
    c = 2*pi; 

    term1 = -a * exp(-b*sqrt(1/d * sum(x.^2))); 
    term2 = -exp(1/d * sum(cos(c * x))); 

    y = term1 + term2 + a + exp(1); 
end 
+0

あなたが言及したようにエラーを修正した後、私は間違った数字になっています。私はこのプロットを得ています https://s17.postimg.org/kqe7lo5cv/Capture2.png しかし、私はこのプロットを期待しています https://upload.wikimedia.org/wikipedia/commons/thumb/9/98 /Ackley%27s_function.pdf/page1-640px-Ackley%27s_function.pdf.jpg –

+0

どのプロットを期待していますか?あなたは正しい機能ですか? – bushmills

+0

私はこのプロットを期待しています https://www.sfu.ca/~ssurjano/ackley.html –

0

を使用しているコードです。プロット範囲を調整してください。例えばlimits = repmat([0 40], nx, 1);