2013-09-09 1 views
0

Я пытаюсь сделать простую функцию, которая сделает для меня определенную кривую. Я использую это для фитингаОшибка MATLAB при изменении размера изображения YDATA при использовании lsqcurvefit X и Y имеют одинаковый размер

data = importdata('in.dat'); 
X = data(:,1); 
Y = data(:,2); 
err = data(:,3); 
disp(size(X)) 
disp(size(Y)) 
F = @(x,xdata)x(1)+x(2); 
x0 = [8,2]; 
stuff=lsqcurvefit(F,x0,X,Y); 


fout = fopen('out.dat','w'); 
fprintf('kappa = ',x(1)); 
fprintf('alpha = ',y(2)); 
fclose(fout); 
exit 

Но я получаю сообщение об ошибке

lsqcurvefit (F, x0, X, Y)
Ошибка при помощи lsqcurvefit (строка 248)
значение функции и размеры YDATA не равны.

Эта ошибка читает мне, как будто X и Y не одного и того же размера. Однако по этому образцу данные

X = 

     0 
    0.6931 
    1.3863 
Y = 
    -5.2546 
    -6.6642 
    -8.0545 

Просто, чтобы убедиться, я проверил размеры.

>> size(X) 
size(X) 

ans = 

    3  1 

>> size(Y) 
size(Y) 

ans = 

    3  1 

Итак, что я делаю неправильно?

ответ

3

Ваша функция возвращает F скаляр, где вектор размера Y (или xdata, как его называют сферу F), как ожидается.

Рабочий пример будет, например:

F = @(x,xdata) x(1) * xdata;