【发布时间】:2012-02-16 13:21:40
【问题描述】:
我正在使用 matlab 来最小化平方和(卡方)函数。我的模型有一个定积分(从零到数据值)。模型有三个参数 w.r.t 我需要最小化。
我需要将(1+x).^(b-a-2).* exp(-b.*x)从零积分到z(i),其中a和b是参数。
我做一个函数句柄
modelfun1=@ (y,a,b,c) (978.4./c).int( (1+x).^(ba-2). exp(-b.* x),0,y)
然后平方和函数为
sum1=@(a,b,c,data) sum(((data.ydata-modelfun1(data.xdata,a,b,c)).^2)./data.zdata.^2);
其中data.xdata 包含所有z 值,data.ydata 是观察值,data.zdata 是方差。
当我使用fminsearch 最小化这个函数时
[tmin,ssmin]=fminsearch(sum1,[-0.1;0.06;70],[],data)
我收到以下错误
使用错误
@(a,b,c,data)sum(((data.ydata-modelfun1(data.xdata,a,b,c)).^2)./data.zdata.^2)输入参数不足。
fminsearch 中的错误(第 191 行)
fv(:,1) = funfcn(x,varargin{:});
谁能指出我做错了什么。我尝试了更多的东西,但这似乎是最经常出现的错误。
这是解决问题的另一种尝试
我正在尝试使用 nlinfit 最小化卡方函数(涉及模型中的定积分)。这是我的尝试: 我使模型功能如下:
function [ f ] = modelf( p,ul )
syms x
a=p(1);
b=p(2);
c=p(3);
f=(978.4./c).*int((1+x)^(b-a-2)*exp(-b*x),x,0,ul);
end
这里的'ul'是积分的上限。它是从数据矩阵z (32X1) 中代入的。相关数据在矩阵 y(32X1) 中。我制作了另一个具有加权 y 值的数据集
w = 1/variance;
其中方差是数据点上的单个误差 yw = sqrt(w).*y;
我还将加权函数句柄设为
modelfunw=@(p,z) (sqrt(var))'.*modelf(p,z);
然后我将 nlinfit 称为
p0=[-0.1 0.05 70]'; %the initial guess
beta=nlinfit(z,yw,modelfunw,p0)
但我收到以下错误消息
使用 nlinfit 时出错(第 120 行) 评估模型函数 '@(p,z)(sqrt(var))'.*modelf(p,z)' 时出错。
原因: 使用 mupadmex 时出错 MuPAD 命令错误:非法参数 [checkNumber]
有人可以指出我做错了什么吗?或者有没有更好的方法来最小化卡方?
【问题讨论】:
标签: matlab