Как вы поместили бы 2d-кривую, такую как ln (x^2) + 3y в массив mxn?Установка 2D-данных в Matlab
Update
Я имею в виду у меня есть MXN массив и хотите установить его с 2D кривой. Извините за недопонимание.
Как вы поместили бы 2d-кривую, такую как ln (x^2) + 3y в массив mxn?Установка 2D-данных в Matlab
Update
Я имею в виду у меня есть MXN массив и хотите установить его с 2D кривой. Извините за недопонимание.
Я бы порекомендовал бегать 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)
Вы можете начать с использования 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);
Вы имеете в виду уместить mxn к двумерной кривой, такой как ln (x^2) + 3y? – Jacob
Непонятно, какие части вашего выражения являются свободными параметрами, которые вы пытаетесь приспособить к данным. –