1

我有一个用于解决此问题的 1000x2 数据文件。

我应该用 Acos(wt + phi) 拟合数据。t 为时间,即数据文件中的第一列,即自变量。我需要找到拟合参数(A、f 和 phi)及其不确定性。

我的代码如下:

%load initial data file
data = load('hw_fit_cos_problem.dat');
t = data(:,1); %1st column is t (time)
x = t;
y = data(:,2); %2nd column is y (signal strength)

%define fitting function
f = fittype('A*cos(w*x + p)','coefficients','A','problem',{'w','p'});

% check fit parameters
coeffs = coeffnames(f);

%fit data
[A] = fit(x,y,f)

disp('confidence interval/errorbars');
ci = confint(A) 

这会产生 4 条我不理解的不同错误消息。

错误信息:

使用 fit>iAssertNumProblemParameters 时出错(第 1113 行)缺少问题参数。将值指定为一个元胞数组,其中 fittype 中的每个问题参数都有一个元素。

拟合错误>iFit (line 198) iAssertNumProblemParameters(probparams, probnames(model));

拟合错误(第 109 行)[fitobj, goodness, output, convmsg] = iFit(xdatain, ydatain, fittypeobj, ...

问题 2 中的错误(第 14 行)[A] = fit(x,y,f)

4

2 回答 2

1

代码行

f = fittype('A*cos(w*x + p)','coefficients','A','problem',{'w','p'});

指定A为模型中的“系数”,并将值w指定p为“问题”参数。

因此,拟合工具箱希望您提供更多关于wand的信息p,然后它会有所不同A。如果没有向拟合工具提供有关wp的更多信息,则会导致错误。

我不确定这个项目的目标,或者为什么wp指定为问题参数。但是,一种简单的解决方案是允许工具箱将Awp视为“系数”,如下所示:

f = fittype('A*cos(w*x + p)','coefficients', {'A', 'w', 'p'});

在这种情况下,代码不会抛出错误,并且会返回 、 和 的 95%A置信w区间p

我希望这会有所帮助。

于 2012-10-21T22:01:53.533 回答
0

您的问题的直接答案是生成错误“缺少问题参数”,因为您已将 w 和 p 标识为特定于问题的固定参数,但您没有告诉 fit 函数这些固定值是什么。

您可以通过更改线路来做到这一点

[A] = 拟合(x,y,f)

[A]=fit(x,y,f,'问题',{100,0.1})

它在拟合中提供值 w=100 和 p=0.1。这应该可以解决您指定的错误(所有 4 条错误消息都来自此错误)

通常,将拟合方程中的一些量指定为特定于问题的固定参数可能是一件有效的事情——例如,如果您已经独立确定了它们并且有充分的理由相信您获得的值是可靠的。在这种情况下,您可能以这种方式知道频率 w,但您很可能不知道相位 p,因此这应该是一个拟合系数。

希望有帮助。

于 2013-07-06T18:53:12.190 回答