我有以下功能:
我想通过MATLAB函数lsqcurvefit获得least squares method
的系数。
问题是,我不知道,当我的函数t
有多个自变量而不只是一个变量时,它是否甚至可以使用该函数。所以,根据链接,我应该有多个xData
向量 - 类似这样的东西:
lsqcurvefit(f, [1 1 1], nprocs, ndoms, nDOF, measuredVals)
你知道怎么做吗?
我试图像这样定义我的目标函数
f = @(c, x) c(1)*x(2).^(c(2)*x(1).^c(3)) + (c(4) + c(5)*x(1))/x(3);
并像这样使用lsqcurvefit
lsqcurvefit(f, [1 1 1], [ndoms nDOF nprocs], measuredVals),
但是有一个问题,measuredVals
是一个大小为56x1的向量,但是我的" xData"是一个大小为56x3的矩阵,所以我收到了这个错误:
Index exceeds matrix dimensions.
Error in factorizatonKGlobRegr>@(c,x)c(1)*x(2).^(c(2)*x(1).^c(3))+(c(4)+c(5)*x(1))/x(3)
Error in lsqcurvefit (line 202)
initVals.F = feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
Caused by:
Failure in initial objective function evaluation. LSQCURVEFIT cannot continue.
但是我怎么做这个,当$ t:\ mathbb {R} ^ 3 \ rightarrow \ mathbb {R} $?
我稍微改变了目标函数
f = @(c, x) c(1)*x(:,2).^(c(2)*x(:,1).^c(3)) + (c(4) + c(5)*x(:,1))/x(:,3);,
但错误仍然存在。
measuredVals = [
0.1647815
0.06300775
0.05769325
0.04803725
0.04290825
0.0405065
0.03807525
0.03487725
0.284112
0.13495675
0.12740075
0.11109725
0.105036
0.11022575
0.100587
0.09803775
0.48695475
0.30563525
0.30084925
0.283312
0.2745085
0.271998
0.27472625
0.27103925
0.89953925
0.68234025
0.6783635
0.65540225
0.64421475
0.64214725
0.63949875
0.623119
1.588605
1.37335275
1.36082075
1.35097375
1.34813125
1.34932025
1.3519095
1.34521625
2.820884
2.63251325
2.640659
2.6338805
2.636361
2.62748
2.6233345
2.63821
4.81472975
4.65116425
4.664892
4.64225625
4.6734825
4.63981675
4.635483
4.6280245];
n = 56;
ndoms = [];
for i=1:n
ndoms = [ndoms; 288];
end
tmp = [
375
1029
2187
3993
6591
10125
14739];
nDOF = [];
for i=1:7
for j=1:8
nDOF = [
nDOF
tmp(i)];
end
end
nprocs = [];
for i=1:7
nprocs = [nprocs; [1 2 3 4 6 8 12 24]'];
end
答案 0 :(得分:0)
当我使用模拟的c和x输入测试目标函数时,它返回了一个与数据集大小相当的NxN矩阵。情况并非如此。你应该只为每个数据集获得一个值,所以我期望一个Nx1矩阵。尝试将您的功能更新到此
f = @(c,x)c(1)。* x(:,2)。^(c(2)。* x(:,1)。^ c(3))+(c(4 )+ c(5)* x(:,1))./ x(:,3)
我给了除数一段时间。