coff_a = [p(2);p(1)];
save 'coef_ex2a.dat' 'coff_a' -ascii
mse_ex2a = mean((polyval(p,t) - y).^2);
save 'mse_ex2a.dat' 'mse_ex2a' -ascii
opts=optimset('MaxIter',600,'MaxFunEvals',600,'TolFun',1e-12,'TolX',1e-12);
coef_ex2b = lsqcurvefit(@(p,tdata)p(1)+p(2)*tdata +p(3)*sin(tdata),zeros(3,1),t,y,[],[],opts);
%这里做非线性曲线拟合
save 'coef_ex2b.dat' 'coef_ex2b' -ascii
b1 = coef_ex2b(1);
b2 = coef_ex2b(2);
b3 = coef_ex2b(3);
mse_ex2b = mean((feval(@(t) b1+b2*t+b3*sin(t),t) - y).^2);
save 'mse_ex2b.dat' 'mse_ex2b' -ascii作者: matlab的旋律 时间: 2015-3-25 17:56
今天遇到了对匿名函数的参数个数是变动的情况,比如@(p,x)p(1)+p(2)*x+p(3)*x^2 + ...p(N)*x^(N-1),假设N为可变参数.我的解决办法是先申明sym向量
for k =1:N
p(k) = sym(['p(',num2str(k),')']);
end
然后计算出sym类型的函数表达式
syms x
f = 0;
for k = 1:N
f = f + p(k)*x^(k - 1);
end
最后将f转变为匿名函数