看一下这个程序 曲线拟合
%exm041022_1.m clear;k_noise=0.01; %控制噪声水平
[x,y,STDY]=xydata(k_noise); %运行仿真数据产生程序,产生数据
a0=[1 1 1 1]; %被估参数的初试猜测
options=optimset('fminsearch');
options.TolX=0.001; %控制被估参数的迭代精度
options.Display='off'; %避免显示收敛信息
a=fminsearch(@twosins,a0,options,x,y); %计算二乘残差最小时的参数估计
chi_est=twosins(a,x,y)/STDY^2; %估计参数下的Chi2量计算
freedom=length(x)-length(a0); %自由度
Q=1-chi2cdf(chi_est,freedom); %适当度
y_est=a(1)*sin(-a(3)*x)+a(2)*sin(-a(4)*x);
ych='y_e_s_t='; %注意:该格式使图形中est三个字母成为下标
a1=num2str(a(1));a2=num2str(a(2));a3=num2str(a(3));a4=num2str(a(4));
char_y_est=[ych,a1,'*sin(-',a3,'*x)+ ',a2,'*sin(-',a4,'*x)'];
disp(['估计方程',char_y_est])
plot(x,y,'b+');hold on,plot(x,y_est,'r');hold off,axis([0,4,-16,16])
function E=twosins(a,x,y)
%twoexps.m 计算二乘残差的程序
x=x(:);y=y(:);Y=a(1)*sin(-a(3)*x)+a(2)*sin(-a(4)*x); %计算估计函数值
E=sum((y-Y).^2);
function [x,y,STDY]=xydata(k_noise)
%xydata.m
x=[0:0.2:16]';
yo=3*sin(-0.4*x)+12*sin(-3.2*x);
rand('seed',234)
y_noise=k_noise*(rand(size(x))-0.01);
y=yo+y_noise;
STDY=std(y_noise);
运算的结果是错误的 估计方程y_e_s_t=-0.53863*sin(-2.1244*x)+ 0.13755*sin(-1.1765*x)
与原题明显不同
问题出在哪里?请高手赐教