24小时热门版块排行榜    

查看: 346  |  回复: 0

wave0403

金虫 (小有名气)

[求助] 积分并拟合实验数据

最近用matlab处理一个实验数据,是极坐标下的.dat文件(以附件为例),文件格式:(r, theta, I)。这里半径0.5<r<237.5,  9.5度<theta<89度,I代表(r, theta)的强度。我想对任意两个半径0.5<r1<r2<237.5强度求和得intensity(theta),然后对这个intensity随theta变化的曲线进行拟合并最后做误差分析,具体拟合公式见代码,编了下面代码,但是运行不了。烦请高手指正错误,谢谢了。

function b = intensity(r1,r2,'1_polar.dat')
start_r = ((r1/0.5)-1)*160+1;
end_r = ((r2/0.5)-1)*160 +1;
global intensity theta
a = load('1_polar.dat ');
p = 1;
% Loop for every value of theta
for i = 9.5:0.5:89
j = 1;
for k = start_r:160:end_r
r(j) = a(k,1);
I(j) = a(k,3);
j = j+1;
end
%Method of Trapezoidal integration is used for integrating the intenstiy values
intensity(p) = trapz(r',I);
theta(p) = i;
clear r I
%increment radius bounds for getting next values
start_r = start_r +1;
end_r = end_r + 1;
p = p+1;
end

%Guess for two parameters C, beta
guess = [1 1];
param = fminsearch(@fun, guess);
c = param(1);
beta = param(2);
%Generate the fitted values
yfit = c.*(1+b.* (5*(cosd(theta)).^5 - 1));
plot(theta,intensity, 'o',theta,yfit,'-');
function sse = fun(param)
global intensity theta
c = param(1);
b = param(2);
%error and sum of squared error
error = intensity - c.*(1+b.* (5*(cosd(theta)).^5 - 1));
sse = sum(error.^2);
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 1_polar.dat
  • 2014-10-24 15:58:55, 1.53 M

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 wave0403 的主题更新
信息提示
请填处理意见