怎样用matlab编写最小二乘法直线和曲线拟合的m文件

2024-12-04 07:02:53
推荐回答(1个)
回答(1):

最小二乘法直线
clear all
clc
x=[1 2 3 4 6 8 10];
y=[109.78 80.35 58.81 43.04 23.05 12.35 6.61];
a=polyfit(x,y,1);
x1=0:0.01:11;
y1=polyval(a,x1);
plot(x,y,'b*',x1,y1,'r','linewidth',3,'markersize',18) %作二维图形曲线图和点图。
legend('原始点','拟合曲线') %显示图例
axis([0,11,1,110]) %显示坐标轴的长度
h=legend('Actual','Predicted');
xlabel('Time(h)','fontsize',24,'fontweight','bold')
ylabel('Drug concentration(ug/ml)','fontsize',24,'fontweight','bold')
title('curve fitting(parabola)','fontsize',26,'fontweight','bold')
set(gca,'linewidth',2.5,'fontsize',24,'fontname','Arial','ytick',[50 100 150])
set(gcf,'color','w')
axis([0 12 0 155])

最小二乘法曲线拟合

clear all
clc
xdata=[1 2 3 4 6 8 10];
ydata=[109.78 80.35 58.81 43.04 23.05 12.35 6.61];
x0=[0,0,5];
b=lsqcurvefit(@nhfun,x0,xdata,ydata)
t1=0:0.01:12;
c1=b(1)+b(2)*t1+b(3)*t1.^2;
plot(xdata,ydata,'*',t1,c1,'linewidth',3,'markersize',18)
function y=nhfun(x,xdata)
y=x(1)+x(2).*xdata+x(3)*xdata.^2;

建议你换个高点的版本