2013-07-24 24 views
2

只要我有5 * 5 dataArray中如何使用数据矩阵,以适应特定的2D功能的MATLAB

d= [0.0177104427823448,0.00246661459209512,0.0399831543374395,0.0615494164555707,0.0476204124707652;0.0275276152854314,0.0219153841813084,0.0581144391404502,0.144890028400954,0.157839631316098;0.0622883972729130,0.0716157303159909,0.245482781674067,0.123999612575059,0.177495187746408;0.0200735764542146,0.0573087934038160,0.0636451189717613,0.0160810084568415,0.0484992279558924;0.0185180386159227,0.00841167700273800,0.0372017422726281,0.0173721095082637,0.0459520362441099] 

而且我想用数据以适应一个特定的2D功能最小二乘拟合技术。的功能是这样的:

r = alfa*sin(pi*(n1+delta1))*sin(pi*(n2+delta2))/(25*sin(pi/5*(n1+delta1))*sin(pi/5*(n2+delta2))), 

其中的阿尔法,DELTA1,DELTA2是需要被估计的参数,和N1,N2范围从1到5

函数拟合结果会是这样: enter image description here

我不知道如何在MATLAB中做这些事情。谁能帮我?

+1

你有曲线拟合工具箱?如果你这样做,那么'lsqnonlin'是你最好的选择。否则,也许看看'fmincon' – Dan

+0

是的,我确实有。但是'lsqnonlin'能解决二维函数拟合问题吗? @Dan –

+2

当然,它需要一点操作,虽然:https://www.mathworks.com/matlabcentral/newsreader/view_thread/238630 – Dan

回答

2

好了,这样可以实现感谢@ Dan.My问题似乎:

[n,m]=size(d);%assumes that d is a n x m matrix 
[X,Y]=meshgrid(1:n,1:m);%your x-y coordinates 
x(:,1)=X(:); % x= first column 
x(:,2)=Y(:); % y= second column 
f=d(:); % your data f(x,y) (in column vector) 

%--- now define the function in terms of x 
%--- where you use x(:,1)=X and x(:,2)=Y 
fun = @(c,x) c(1)*sin(pi*(x(:,1)+c(2))).*sin(pi*(x(:,2)+c(3))) ./ (25*sin(pi/5*(x(:,1)+c(2))).*sin(pi/5*(x(:,2)+c(3)))); 

%--- now solve with lsqcurvefit 
options=optimset('TolX',1e-6); 
c0=[1 0 0];%start-guess here 
cc=lsqcurvefit(fun,c0,x,f,[],[],options); 
Ifit=fun(cc,x); 
Ifit=reshape(Ifit,[n m]);%fitting data reshaped as matrix 
surf(X,Y,Ifit); 
hold on; 
plot3(X, Y, dataArray);