我有两个数组x和y,并希望用(1)和a(2)作为拟合参数拟合指数。我写了一个测试代码如下:
k=6.63e-34*3e8/1.38e-23
x=[1;2;3;4;5;6;7;8;9;10]
y=[280;320;369.22772;391.25743;414.74257;
439.75248;466.06931;493.60396;523.87129;530]
w=[0;0;1;1;1;1;1;1;1;0] //weighting
//fitting function
function y=yth(x,a)
y=a(1)*exp(-k/x/a(2))
endfunction
//initial parameter guess
a0=[1.0,1.0]
function e=myfun(a,x,y,w)
e=w.*(yth(x,a)-y)
endfunction
[f,xopt,gopt]=leastsq(list(myfun,x,y,w),a0)
我遇到以下错误
[f,xopt,gopt]=leastsq(list(myfun,x,y,w),a0)
!--error 9
Inconsistent subtraction.
at line 2 of function fn called by :
at line 2 of function %opt called by :
at line 92 of function leastsq called by :
[f,xopt,gopt]=leastsq(list(myfun,x,y,w),a0)
答案 0 :(得分:0)
这不是我的一杯茶,但你的错误在于yth
功能
function y=yth(x,a)
y=a(1)*exp(-k/x/a(2))
endfunction
k
的划分不是按元素划分的,但也可以转置矩阵。
k = 5
x = randn(10,1)
// You are doing this in your code
disp( k / x)
// But you are probably wanting to do this
disp( k ./ x )
再次,这不是我的茶杯,但它至少解决了错误。
function y=yth(x,a)
y=a(1)*exp(-k./x/a(2))
endfunction
答案 1 :(得分:0)
我做了类似的事情并通过提供列向量而不是像这样的行向量来消除错误:
[f,xopt,gopt]=leastsq(list(myfun,x',y',w),a0)