2010-06-22 3 views
4

Как вы поместили бы 2d-кривую, такую ​​как ln (x^2) + 3y в массив mxn?Установка 2D-данных в Matlab

Update

Я имею в виду у меня есть MXN массив и хотите установить его с 2D кривой. Извините за недопонимание.

+0

Вы имеете в виду уместить mxn к двумерной кривой, такой как ln (x^2) + 3y? – Jacob

+2

Непонятно, какие части вашего выражения являются свободными параметрами, которые вы пытаетесь приспособить к данным. –

ответ

2

Я бы порекомендовал бегать cftool. На самом деле это вполне возможно для гаджета типа мастера.

Вот programmatic fitting example (мне нравится в документации MATLAB), и, возможно, уместна отрывок:

s = fitoptions('Method','NonlinearLeastSquares',... 
       'Lower',[0,0],... 
       'Upper',[Inf,max(cdate)],... 
       'Startpoint',[1 1]); 
f = fittype('a*(x-b)^n','problem','n','options',s); 

Установить данные с помощью опции уложения и значение п = 2:

[c2,gof2] = fit(cdate,pop,f,'problem',2) 
4

Вы можете начать с использования meshgrid для генерации двух массивов, соответствующих индексам вашего массива mxn (который мы назовем z для простоты). Например:

[x,y] = meshgrid(1:size(z,2),1:size(z,1)); 

Отслеживание x и y в окне команд, чтобы увидеть их структуру, это будет иметь смысл.

Тогда вы можете использовать функцию, такую ​​как lsqnonlin (нелинейные наименьшие квадраты), чтобы соответствовать кривой 2d вашей матрице z. Так, если кривая вы хотите, чтобы соответствовать является «журнал (х^2) + б у», где а и Ь являются свободными параметрами, то вы могли бы использовать что-то вроде этого:

%Define a function which returns the residual between your matrix and your fitted curve 
myfun = @(params) params(1)*log(x(:).^2) + params(2)*y(:) - z(:) 
%Define initial guesses for parameters a, b 
params0 = [1,3]; 
%Add lots of debugging info 
opts = optimset('Display','Iter'); 
%Fit 
fitparams = lsqnonlin(myfun,params0,[],[],opts); 
Смежные вопросы