最小二乘拟合MATLAB程序

合集下载

最小二乘法曲线拟合的Matlab程序

最小二乘法曲线拟合的Matlab程序

方便大家使用的最小二乘法曲线拟合的Matlab程序非常方便用户使用,直接按提示操作即可;这里我演示一个例子:(红色部分为用户输入部分,其余为程序运行的结果,结果图为Untitled.fig,Untitled2.fig) 请以向量的形式输入x,y.x=[1,2,3,4]y=[3,4,5,6]通过下面的交互式图形,你可以事先估计一下你要拟合的多项式的阶数,方便下面的计算.polytool()是交互式函数,在图形上方[Degree]框中输入阶数,右击左下角的[Export]输出图形回车打开polytool交互式界面回车继续进行拟合输入多项式拟合的阶数m = 4Warning: Polynomial is not unique; degree >= number of data points. > In polyfit at 72In zxecf at 64输出多项式的各项系数a = 0.0200000000000001a = -0.2000000000000008a = 0.7000000000000022a = 0.0000000000000000a = 2.4799999999999973输出多项式的有关信息 SR: [4x5 double]df: 0normr: 2.3915e-015Warning: Zero degrees of freedom implies infinite error bounds.> In polyval at 104In polyconf at 92In zxecf at 69观测数据拟合数据x y yh1.0000 3.0000 3.00002.0000 4.0000 4.00003 5 54.0000 6.0000 6.0000剩余平方和 Q = 0.000000标准误差 Sigma = 0.000000相关指数 RR = 1.000000请输入你所需要拟合的数据点,若没有请按回车键结束程序.输入插值点x0 = 3输出插值点拟合函数值 y0 = 5.0000>>结果:untitled.figuntitled2.fig一些matlab优化算法代码的分享代码的目录如下:欢迎讨论1.约束优化问题:minRosen(Rosen梯度法求解约束多维函数的极值)(算法还有bug) minPF(外点罚函数法解线性等式约束)minGeneralPF(外点罚函数法解一般等式约束)minNF(内点罚函数法)minMixFun(混合罚函数法)minJSMixFun(混合罚函数加速法)minFactor(乘子法)minconPS(坐标轮换法)(算法还有bug)minconSimpSearch(复合形法)2.非线性最小二乘优化问题minMGN(修正G-N法)3.线性规划:CmpSimpleMthd(完整单纯形法)4.整数规划(含0-1规划)DividePlane(割平面法)ZeroOneprog(枚举法)5.二次规划QuadLagR(拉格朗日法)ActivedeSet(起作用集法)6.辅助函数(在一些函数中会调用)minNT(牛顿法求多元函数的极值)Funval(求目标函数的值)minMNT(修正的牛顿法求多元函数极值)minHJ(黄金分割法求一维函数的极值)7.高级优化算法1)粒子群优化算法(求解无约束优化问题)1>PSO(基本粒子群算法)2>YSPSO(待压缩因子的粒子群算法)3>LinWPSO(线性递减权重粒子群优化算法)4>SAPSO(自适应权重粒子群优化算法)5>RandWSPO(随机权重粒子群优化算法)6>LnCPSO(同步变化的学习因子)7>AsyLnCPSO(异步变化的学习因子)(算法还有bug)8>SecPSO(用二阶粒子群优化算法求解无约束优化问题)9>SecVibratPSO(用二阶振荡粒子群优化算法求解五约束优化问题)10>CLSPSO(用混沌群粒子优化算法求解无约束优化问题)11>SelPSO(基于选择的粒子群优化算法)12>BreedPSO(基于交叉遗传的粒子群优化算法)13>SimuAPSO(基于模拟退火的粒子群优化算法)2)遗传算法1>myGA(基本遗传算法解决一维约束规划问题)2>SBOGA(顺序选择遗传算法求解一维无约束优化问题)3>NormFitGA(动态线性标定适应值的遗传算法求解一维无约束优化问题)4>GMGA(大变异遗传算法求解一维无约束优化问题)5>AdapGA(自适应遗传算法求解一维无约束优化问题)6>DblGEGA(双切点遗传算法求解一维无约束优化问题)7>MMAdapGA(多变异位自适应遗传算法求解一维无约束优化问题)自己编写的马尔科夫链程序A 代表一组数据序列一维数组本程序的操作对象也是如此t=length(A); % 计算序列“A”的总状态数B=unique(A); % 序列“A”的独立状态数顺序,“E”E=sort(B,'ascend');a=0;b=0;c=0;d=0;for j=1:1:ttLocalization=find(A==E(j)); % 序列“A”中找到其独立状态“E”的位置for i=1:1:length(Localization)if Localization(i)+1>tbreak; % 范围限定elseif A(Localization(i)+1)== E(1)a=a+1;elseif A(Localization(i)+1)== E(2)b=b+1;elseif A(Localization(i)+1)== E(3)c=c+1;% 依此类推,取决于独立状态“E”的个数elsed=d+1;endendT(j,1:tt)=[a,b,c,d]; % “T”为占位矩阵endTT=T;for u=2:1:ttTT(u,:)= T(u,:)- T(u-1,:);endTT; % 至此,得到转移频数矩阵Y=sum(TT,2);for uu=1:1:ttTR(uu,:)= TT(uu,:)./Y(uu,1);endTR % 最终得到马尔科夫转移频率/概率矩阵% 观测序列马尔科夫性质的检验:N=numel(TT);uuu=1;Col=sum(TT,2); % 对列求和Row=sum(TT,1); % 对行求和Total=sum(Row); % 频数总和for i=1:1:ttfor j=1:1:ttxx(uuu,1)=sum((TT(i,j)-(Row(i)*Col(j))./Total).^2./( (Row(i)*Col(j)). /Total));uuu=uuu+1; % 计算统计量x2endendxx=sum(xx)。

matlab多元一次方程最小二乘拟合求取系数

matlab多元一次方程最小二乘拟合求取系数

matlab多元一次方程最小二乘拟合求取系数最小二乘法是一种数学方法,可用于数据拟合以及误差分析。

在科学与工程中,我们经常需要解决数据拟合的问题,而最小二乘法便是其中最常用的方法之一。

本文将介绍如何使用MATLAB进行多元一次方程最小二乘拟合并求取系数。

第一步:准备数据首先,我们需要准备一组数据以进行最小二乘拟合。

这组数据需要是多个变量之间的关系,并且这些变量需要满足线性关系。

对于这个问题,我们可以先简化成一个二元一次方程y=ax+b。

这个方程可以表示成矩阵形式:```Y = [y1;y2;...;ym]X = [1,x1;1,x2;...;1,xm]B = [b;a]```其中,Y是一个m行一列的向量,表示对应的y值;X是一个m 行两列的矩阵,第一列为1表示截距项,第二列为x值;B是一个两行一列的向量,表示最终的系数。

第二步:计算最小二乘法接下来,我们需要使用MATLAB求解这个最小二乘问题。

我们可以使用MATLAB内置的regress函数,它可以帮助我们求解系数B。

具体使用方法如下:```B = regress(Y,X)```这个函数会返回一个2行1列的向量,也就是系数B的值。

第三步:验证结果最后,我们需要验证我们拟合出的结果是否可靠。

我们可以使用拟合残差来评估我们的拟合效果,同时也可以用图形的方式来直观地观察。

对于残差,可以使用如下代码来计算:```e = Y - X * B```这个代码会计算出每一行数据的残差。

我们可以使用hist函数来显示残差分布的直方图:```hist(e)```对于图形,我们可以使用plot函数来绘制拟合曲线。

具体代码如下:```plot(X(:,2),Y,'o')hold onplot(X(:,2),X * B,'-')hold off```这个代码会在同一个坐标系内绘制出数据点以及拟合曲线,以直观地观察拟合效果。

以上就是在MATLAB中进行多元一次方程最小二乘拟合的步骤。

最小二乘法matlab多项式拟合

最小二乘法matlab多项式拟合

最小二乘法拟合探究吴春晖(中国海洋大学海洋环境学院山东青岛 266100)摘要:本文的拟合对象为含多个变量的待定系数的多项式。

通过最小二乘法对多项式作出拟合,以向量矩阵的形式来解出待定的系数。

在matlab中,通过算法,写出具体的解法。

之后,先对最小二乘法的准确性作出检验,分析该方法在应对复杂情况的误差。

在检验该方法的可行性之后,对给定的变量值进行拟合与解题。

同时,本文将对基于Laguerre多项式的最小二乘法进行分析检验,关键词:最小二乘法拟合多变量 Laguerre多项式引言:在之前的计算方法中,在给出已知节点后,如果需要根据给出的节点来确定未知节点的值,我们需要运用插值。

在对插值的精准性进行分析后,我们发现不同插值方式的误差都极大,而且插值所得出的函数的特征由插值方式所决定,并不能反映具体的节点原来可能的规律与分布。

所以,拟合的方法相比插值而言,并不要求函数值在原节点处的值相等,却能在一定程度上反映原函数的规律。

在该文中,我们主要运用最小二乘法进行拟合。

目录第一章matlab最小二乘法拟合程序 (3)1.1 最小二乘法拟合的数学方法 (3)1.2 编写最小二乘法的matlab拟合程序 (3)1.2.1程序算法 (3)1.2.2 最小二乘法拟合的程序 (4)1.3程序的分析说明 (4)第二章最小二乘拟合法的检验及应用 (5)2.1 最小二乘法拟合的检验 (5)2.2最小二乘法拟合的实际应用 (7)第三章Laguerre多项式的最小二乘拟合 (8)3.1 算法与程序 (8)3.2检验与分析 (9)第四章最小二乘法拟合的分析总结 (11)第一章matlab 最小二乘法拟合程序1.1 最小二乘法拟合的数学方法最小二乘法拟合的算法如下:对于给定的一组数据(,)i i x y ,1,2,,i N =求t ()t N 次多项式jti j y a x ==∑使总误差21()j N ti i i j Q y a x ===-∑∑最小.由于Q 可以视作关于i a (0,1,2,,)i t =的多元函数,故上述拟合多项式的构造可归结为多元函数的极值问题.令0,0,1,2,,kQk ta ∂==∂得到1()0,0,1,2,,Ntjk ij ii i j y a xx k t==-==∑∑即有方程组0121011201t i t i it i i t i i i t t t t i i t i i i a N a x a x y a x a x a x x y a x a x a x x y++⎧+∑++∑=∑⎪∑+∑++∑=∑⎪⎨⎪⎪∑+∑++∑=∑⎩求解该正规方程组,即可得到最小二乘法的拟合系数。

最小二乘法曲线拟合的Matlab程序

最小二乘法曲线拟合的Matlab程序

方便大家使用的最小二乘法曲线拟合的Matlab程序非常方便用户使用,直接按提示操作即可;这里我演示一个例子:(红色部分为用户输入部分,其余为程序运行的结果,结果图为Untitled.fig,Untitled2.fig) 请以向量的形式输入x,y.x=[1,2,3,4]y=[3,4,5,6]通过下面的交互式图形,你可以事先估计一下你要拟合的多项式的阶数,方便下面的计算.polytool()是交互式函数,在图形上方[Degree]框中输入阶数,右击左下角的[Export]输出图形回车打开polytool交互式界面回车继续进行拟合输入多项式拟合的阶数m = 4Warning: Polynomial is not unique; degree >= number of data points. > In polyfit at 72In zxecf at 64输出多项式的各项系数a = 0.0200000000000001a = -0.2000000000000008a = 0.7000000000000022a = 0.0000000000000000a = 2.4799999999999973输出多项式的有关信息 SR: [4x5 double]df: 0normr: 2.3915e-015Warning: Zero degrees of freedom implies infinite error bounds.> In polyval at 104In polyconf at 92In zxecf at 69观测数据拟合数据x y yh1.0000 3.0000 3.00002.0000 4.0000 4.00003 5 54.0000 6.0000 6.0000剩余平方和 Q = 0.000000标准误差 Sigma = 0.000000相关指数 RR = 1.000000请输入你所需要拟合的数据点,若没有请按回车键结束程序.输入插值点x0 = 3输出插值点拟合函数值 y0 = 5.0000>>结果:untitled.figuntitled2.fig一些matlab优化算法代码的分享代码的目录如下:欢迎讨论1.约束优化问题:minRosen(Rosen梯度法求解约束多维函数的极值)(算法还有bug) minPF(外点罚函数法解线性等式约束)minGeneralPF(外点罚函数法解一般等式约束)minNF(内点罚函数法)minMixFun(混合罚函数法)minJSMixFun(混合罚函数加速法)minFactor(乘子法)minconPS(坐标轮换法)(算法还有bug)minconSimpSearch(复合形法)2.非线性最小二乘优化问题minMGN(修正G-N法)3.线性规划:CmpSimpleMthd(完整单纯形法)4.整数规划(含0-1规划)DividePlane(割平面法)ZeroOneprog(枚举法)5.二次规划QuadLagR(拉格朗日法)ActivedeSet(起作用集法)6.辅助函数(在一些函数中会调用)minNT(牛顿法求多元函数的极值)Funval(求目标函数的值)minMNT(修正的牛顿法求多元函数极值)minHJ(黄金分割法求一维函数的极值)7.高级优化算法1)粒子群优化算法(求解无约束优化问题)1>PSO(基本粒子群算法)2>YSPSO(待压缩因子的粒子群算法)3>LinWPSO(线性递减权重粒子群优化算法)4>SAPSO(自适应权重粒子群优化算法)5>RandWSPO(随机权重粒子群优化算法)6>LnCPSO(同步变化的学习因子)7>AsyLnCPSO(异步变化的学习因子)(算法还有bug)8>SecPSO(用二阶粒子群优化算法求解无约束优化问题)9>SecVibratPSO(用二阶振荡粒子群优化算法求解五约束优化问题)10>CLSPSO(用混沌群粒子优化算法求解无约束优化问题)11>SelPSO(基于选择的粒子群优化算法)12>BreedPSO(基于交叉遗传的粒子群优化算法)13>SimuAPSO(基于模拟退火的粒子群优化算法)2)遗传算法1>myGA(基本遗传算法解决一维约束规划问题)2>SBOGA(顺序选择遗传算法求解一维无约束优化问题)3>NormFitGA(动态线性标定适应值的遗传算法求解一维无约束优化问题)4>GMGA(大变异遗传算法求解一维无约束优化问题)5>AdapGA(自适应遗传算法求解一维无约束优化问题)6>DblGEGA(双切点遗传算法求解一维无约束优化问题)7>MMAdapGA(多变异位自适应遗传算法求解一维无约束优化问题)自己编写的马尔科夫链程序A 代表一组数据序列一维数组本程序的操作对象也是如此t=length(A); % 计算序列“A”的总状态数B=unique(A); % 序列“A”的独立状态数顺序,“E”E=sort(B,'ascend');a=0;b=0;c=0;d=0;for j=1:1:ttLocalization=find(A==E(j)); % 序列“A”中找到其独立状态“E”的位置for i=1:1:length(Localization)if Localization(i)+1>tbreak; % 范围限定elseif A(Localization(i)+1)== E(1)a=a+1;elseif A(Localization(i)+1)== E(2)b=b+1;elseif A(Localization(i)+1)== E(3)c=c+1;% 依此类推,取决于独立状态“E”的个数elsed=d+1;endendT(j,1:tt)=[a,b,c,d]; % “T”为占位矩阵endTT=T;for u=2:1:ttTT(u,:)= T(u,:)- T(u-1,:);endTT; % 至此,得到转移频数矩阵Y=sum(TT,2);for uu=1:1:ttTR(uu,:)= TT(uu,:)./Y(uu,1);endTR % 最终得到马尔科夫转移频率/概率矩阵% 观测序列马尔科夫性质的检验:N=numel(TT);uuu=1;Col=sum(TT,2); % 对列求和Row=sum(TT,1); % 对行求和Total=sum(Row); % 频数总和for i=1:1:ttfor j=1:1:ttxx(uuu,1)=sum((TT(i,j)-(Row(i)*Col(j))./Total).^2./( (Row(i)*Col(j)). /Total));uuu=uuu+1; % 计算统计量x2endendxx=sum(xx)。

曲线拟合的线性最小二乘法及其MATLAB程序

曲线拟合的线性最小二乘法及其MATLAB程序

1曲线拟合的线性最小二乘法及其MATLA程序例7.2.1 给出一组数据点(x j, y i)列入表7 -中,试用线性最小二乘法求拟合曲线,并用(7.2),(7.3 )和(7.4)式估计其误差,作出拟合曲线.解 (1)在MATLAB 工作窗口输入程序>> x=[-2.5 -1.7 -1.1 -0.8 0 0.1 1.5 2.7 3.6];y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.50 68.04];plot(x,y, 'r*'),legend('实验数据(xi,yi)' )xlabel( 'x' ), ylabel( 'y'),title('例7.2.1的数据点(xi,yi) 的散点图’)运行后屏幕显示数据的散点图(略)(3)编写下列MATLAB程序计算f (x)在(x i, y i)处的函数值,即输入程序>> syms a1 a2 a3 a4x=[-2.5 -1.7 -1.1 -0.8 0 0.1 1.5 2.7 3.6];fi=a1.*x.A3+ a2.*x.A2+ a3.*x+ a4运行后屏幕显示关于a1,a2, a3和a4的线性方程组fi =[ -125/8*a1+25/4*a2-5/2*a3+a4,-4913/1000*a1+289/100*a2-17/10*a3+a4,-1331/1000*a1+121/100*a2-11/10*a3+a4, -64/125*a1+16/25*a2-4/5*a3+a4, a4,1/1000*a1+1/100*a2+1/10*a3+a4,27/8*a1+9/4*a2+3/2*a3+a4, 19683/1000*a1+729/100*a2+27/10*a3+a4,5832/125*a1+324/25*a2+18/5*a3+a4]编写构造误差平方和的MATLAB程序>> y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.5068.04];fi=[-125/8*a1+25/4*a2-5/2*a3+a4,-4913/1000*a1+289/100*a2-17/10*a3+a4,-1331/1000*a1+121/100*a2-11/10*a3+a4,-64/125*a1+16/25*a2-4/5*a3+a4, a4,1/1000*a1+1/100*a2+1/10*a3+a4,27/8*a1+9/4*a2+3/2*a3+a4,19683/1000*a1+729/100*a2+27/10*a3+a4,5832/125*a1+324/25*a2+18/5*a3+a4];fy=fi-y; fy2=fy.A2; J=sum(fy.A2)运行后屏幕显示误差平方和如下J=(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)A2+(-4913/1000*a1+289/100*a2-17/10*a3+a4+171/2)A2+(-1331/1000*a1+121/100*a2-11/10* a3+a4+723/20)A2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)A2+(a4+91/10)A2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)A2+(27/8*a1+9/4*a2+3/2*a3+a4+328/25)A2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/2)A2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)A2为求a1,a2 ,a3, a4使J达到最小,只需利用极值的必要条件一丄0 (k 1,2,3,4),a k运行后屏幕显示 J 分别对a 1, a 2 ,a 3 ,a 4的偏导数如下Ja11=56918107/10000*a1+32097579/25000*a2+1377283/2500*a3+ 23667/250*a4-8442429/625Ja21 =32097579/25000*a1+1377283/2500*a2+23667/250*a3+67*a4+767319/625Ja311377283/2500*a1+23667/250*a2+67*a3+18/5*a4-232638/125Ja4123667/250*a1+67*a2+18/5*a3+18*a4+14859/25解线性方程组 Ja 11 =0, Ja 21 =0, Ja 31 =0, Ja 41 =0,输入下列程序>>A=[56918107/10000, 32097579/25000,23667/250; 32097579/25000, 1377283/2500, 1377283/2500, 23667/250, 67, 18/5; 23667/250, 67, 18/5, 18];B=[8442429/625, -767319/625, 232638/125, -14859/25]; C=B/A, f=poly2sym(C) 运行后屏幕显示拟合函数 f 及其系数 C 如下C = 5.0911 -14.1905 6.4102 -8.2574f=716503695845759/140737488355328*xA3 -7988544102557579/562949953421312*xA2 +1804307491277693/281474976710656*x -4648521160813215/562949953421312 故所求的拟合曲线为1.52.73.6]; y=[-192.9 -85.50 -36.15 -26.52 -9.10 -8.43 -13.12 6.5068.04];n=length(xi);f=5.0911.*xi.A3-14.1905.*xi.A2+6.4102.*xi -8.2574; x=-2.5:0.01: 3.6;F=5.0911.*x.A3-14.1905.*x.A2+6.4102.*x -8.2574; fy=abs(f-y); fy2=fy.A2; Ew=max(fy), E1=sum(fy)/n, E2=sqrt((sum(fy2))/n) plot(xi,y, 'r*'), hold on, plot(x,F, 'b-'), hold off legend( '数据点 (xi,yi)' ,'拟合曲线 y=f(x)' ), xlabel( 'x'), ylabel( 'y'), title('例7.2.1的数据点(xi,yi)和拟合曲线y=f(x)的图形')运行后屏幕显示数据(x^yj 与拟合函数f 的最大误差 平均误差 E 和均方根误差 E及其数据点(X j ,yj 和拟合曲线y=f(x)的图形(略).Ew = E1 = E2 =3.105 4 0.903 4 1.240 9得到关于a 1,a 2 ,a 3, a 4的线性方程组,这可以由下面的 MATLAB 程序完成,即输入程序>> syms a1 a2 a3 a4J=(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)A2+(-4913/1000*a1 + 289/100*a2-17/10*a3+a4...+171/2)A2+(-1331/1000*a1+121/100*a2-11 /10*a3+a4+723/20)A 2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)A 2+(a4+91/10)A 2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)A 2+(27/8*a1+9 /4*a2+3/2*a3+a4+328/25)A2+(19683/1000*a1+729/100*a2+27/10*a3+a4 -13/2)A2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)A2;Ja1=diff(J,a1); Ja2=diff(J,a2); Ja4=diff(J,a4);Ja11=simple(Ja1), Ja41=simple(Ja4),Ja21=simple(Ja2), Ja3=diff(J,a3);Ja31=simple(Ja3),1377283/2500, 23667/250, 67;f (x) 5.0911 ( 4)编写下面的 MATLAB序x 3 14.1905 x 2 程序估计其误差, 8.2574 . 6.4102 x 并作出拟合曲线和数据的图形 .输入程 >> xi=[-2.5 -1.7 -1.1 -0.8 0 0.17.3函数m (x)的选取及其MATLA 程序例7.3.1 给出一组实验数据点 (x i ,y i )的横坐标向量为x =( -8.5,-8.7,-7.1,-6.8,-5.10,-4.5,-3.6,-3.4,-2.6,-2.5, -2.1,-1.5, -2.7,-3.6 ) , 纵横坐标向量为 y =( 459.26,52.81,198.27,165.60,59.17,41.66,25.92, 22.37,13.47, 12.87, 11.87,6.69,14.87,24.22 ) ,试用线性最小二乘法求拟合曲线,并用( 7.2),(7.3) 和( 7.4)式估计其误差,作出拟合曲线 .解 (1)在 MATLAB 工作窗口输入程序>>x=[-8.5,-8.7,-7.1,-6.8,-5.10,-4.5,-3.6,-3.4,-2.6,-2.5, -2.1,-1.5, -2.7,-3.6];y=[459.26,52.81,198.27,165.60,59.17,41.66,25.92,22.37,13.47, 12.87, 11.87,6.69,14.87,24.22];plot(x,y, 'r*' ),legend( ' 实验数据 (xi,yi)' )xlabel( 'x' ), ylabel( 'y' ),title( ' 例 7.3.1 的数据点 (xi,yi) 的散点图 ' ) 运行后屏幕显示数据的散点图(略) . (3)编写下列MATLAB 程序计算f (x)在(x i , y i )处的函数值,即输入程序>> syms a b x=[-8.5,-8.7,-7.1,-6.8,-5.10,-4.5,-3.6,-3.4,-2.6,-2.5,-2 .1,-1.5,-2.7,-3.6]; fi=a.*exp(-b.*x)运行后屏幕显示关于a 和b 的线性方程组fi =[ a*exp(17/2*b), a*exp(87/10*b), a*exp(71/10*b), a*exp(34/5*b), a*exp(51/10*b),a*exp(9/2*b), a*exp(18/5*b), a*exp(17/5*b), a*exp(13/5*b), a*exp(5/2*b), a*exp(21/10*b), a*exp(3/2*b), a*exp(27/10*b), a*exp(18/5*b)]编写构造误差平方和的 MATLAB 程序如下>>y=[459.26,52.81,198.27,165.60,59.17,41.66,25.92,22.37, 13.47,12.87, 11.87, 6.69,14.87,24.22]; fi =[ a*exp(17/2*b), a*exp(87/10*b), a*exp(34/5*b), a*exp(51/10*b), a*exp(18/5*b), a*exp(17/5*b), a*exp(5/2*b), a*exp(21/10*b), a*exp(27/10*b), a*exp(18/5*b)]; fy=fi-y; fy2=fy.A 2; J=sum(fy.A 2)运行后屏幕显示误差平方和如下J =(a*exp(17/2*b)-22963/50)A2+(a*exp(87/10*b)-5281/100)A2+( a*exp(71/10*b)-19827/100)A2+(a*exp(34/5*b)-828/5)A2+(a*exp(51/1 0*b)-5917/100)A2+(a*exp(9/2*b)-2083/50)A2+(a*exp(18/5*b)-648/25 )A2+(a*exp(17/5*b)-2237/100)A2+(a*exp(13/5*b)-1347/100)A2+(a*ex p(5/2*b)-1287/100)A2+(a*exp(21/10*b)-1187/100)A2+(a*exp(3/2*b)- 669/100)A2+(a*exp(27/10*b)-1487/100)A2+(a*exp(18/5*b)-1211/50)A 2为求a,b 使J 达到最小,只需利用极值的必要条件,得到关于 a,b 的线性方程组, 这可以由下面的 MATLAB 程序完成,即输入程序>> syms a bJ=(a*exp(17/2*b)-22963/50)A2+(a*exp(87/10*b)-5281/100)A2 +(a*exp(71/10*b)-19827/100)A2+(a*exp(34/5*b)-828/5)A2+(a*exp(51 /10*b)-5917/100)A2+(a*exp(9/2*b)-2083/50)A2+(a*exp(18/5*b)-648/ 25)A2+(a*exp(17/5*b)-2237/100)A2+(a*exp(13/5*b)-1347/100)A2+(a* exp(5/2*b)-1287/100)A2+(a*exp(21/10*b)-1187/100)A2+(a*exp(3/2*b )-669/100)A2+(a*exp(27/10*b)-1487/100)A2+(a*exp(18/5*b)-1211/50 )A 2;Ja=diff(J,a); Jb=diff(J,b);Ja 仁simple(Ja), Jb 仁simple(Jb),运行后屏幕显示J 分别对a, b 的偏导数如下Ja1 =2*a*exp(3*b)+2*a*exp(17*b)+2*a*exp(87/5*b)+2*exp(68/5*b)*a+2*exp(9*b)*a+2*a*exp(34/5*b)-669/50*exp(3/2*b)-1487/50*exp(2 7/10*b)-2507/25*exp(18/5*b)-a*exp(71/10*b), a*exp(9/2*b), a*exp(13/5*b), a*exp(3/2*b),22963/25*exp(17/2*b)-5281/50*exp(87 /10*b)-19827/50*exp(71/10*b)-2237/50*exp(17/5*b)-1656/5*exp(34/ 5*b)-1347/50*exp(13/5*b)-5917/50*exp(51/10*b)-1287/50*exp(5/2*b )-2083/25*exp(9/2*b)-1187/50*exp(21/10*b)+4*a*exp(36/5*b)+2*a*exp(26/5*b)+2*a*exp(71/5*b)+2*a*exp(51/5*b)+2*a*exp(5*b)+2*a*exp (21/5*b)+2*a*exp(27/5*b) Jb1 =1/500*a*(2100*a*exp(21/10*b)A2+8500*a*exp(17/2*b)A2+6800*a*exp(34/5*b)A2-10035*exp(3/2*b)-40149*exp(27/10*b)-180504*exp (18/5*b)-3903710*exp(17/2*b)-459447*exp(87/10*b)-1407717*exp(71/10*b)-76058*exp(17/5*b)-1126080*exp(34/5*b)-35022*exp(13/5*b)-301767*exp(51/10*b)-32175*exp(5/2*b)-187470*exp(9/2*b)-24927*exp(21/10*b)+7100*a*exp(71/10*b)A2+5100*a*exp(51/10*b)A2+4500*a*exp(9/2*b)A2+7200*a*exp(18/5*b)A2+3400*a*exp(17/5*b)A2+2600*a*exp(13/5*b)A2+2500*a*exp(5/2*b)A2+1500*a*exp(3/2*b)A2+2700*a*exp( 27/10*b)A2+8700*a*exp(87 /10*b)A2)用解二元非线性方程组的牛顿法的MATLAB^序求解线性方程组J ai =0, J bi =0,得a = b=2.811 0 0.581 6故所求的拟合曲线(7.13)为0.5816xf (x) 2.811 0 e . (7.14)(4)根据(7.2),( 7.3),( 7.4)和(7.14)式编写下面的MATLAB程序估计其误差,并做出拟合曲线和数据的图形.输入程序>> xi=[-8.5 -8.7 -7.1 -6.8 -5.10 -4.5 -3.6 -3.4 -2.6 -2.5-2.1 -1.5 -2.7 -3.6];y=[459.26 52.81 198.27 165.60 59.17 41.66 25.92 22.3713.47 12.87 11.87 6.69 14.87 24.22];n=le ngth(xi); f=2.8110.*exp(-0.5816.*xi); x=-9:0.01: -1;F=2.8110.*exp(-0.5816.*x); fy=abs(f-y); fy2=fy.A2;Ew=max(fy),E仁sum(fy)/n, E2=sqrt((sum(fy2))/n), plot(xi,y, 'r*' ), hold onplot(x,F, 'b-' ), hold off,legend('数据点(xi,yi)' ,'拟合曲线y=f(x)' )xlabel( 'x' ), ylabel( 'y'),title( '例7.3.1的数据点(xi,yi) 和拟合曲线y=f(x) 的图形')运行后屏幕显示数据(X i,yj与拟合函数f的最大误差E w = 390.141 5 ,平均误差E1=36.942 2 和均方根误差巳=106.031 7 及其数据点(X i,yj和拟合曲线y=f( x)的图形(略).7.4 多项式拟合及其MATLA程序例7.4.1给出一组数据点(X i, y i )列入表7 43中,试用线性最小二乘法求拟合曲线, 并用(7.2), (7.3 )和(7.4)式估计其误差,作出拟合曲线.解(1)首先根据表7-3给出的数据点(X i,yj,用下列MATLAB程序画出散点图在MATLAB 工作窗口输入程序>> x=[-2.9 -1.9 -1.1 -0.8 0 0.1 1.5 2.7 3.6]; y=[53.94 33.68 20.88 16.92 8.79 8.98 4.17 9.12 19.88];plot(x,y, 'r*' ), legend( ' 数据点(xi,yi)' )xlabel( 'x' ), ylabel( 'y' ),title( ' 例7.4.1 的数据点(xi,yi) 的散点图' ) 运行后屏幕显示数据的散点图(略) .(3 )用作线性最小二乘拟合的多项式拟合的MATLAB程序求待定系数a k (k 1, 2,3).输入程序>> a=polyfit(x,y,2) 运行后输出( 7.16)式的系数a =2.8302 -7.3721 9.1382故拟合多项式为f (x) 2.830 2x27.372 1x 9.138 2.(4)编写下面的MATLA龍序估计其误差,并做出拟合曲线和数据的图形•输入程序>> xi=[-2.9 -1.9 -1.1 -0.8 0 0.1 1.5 2.7 3.6]; y=[53.94 33.68 20.88 16.92 8.79 8.98 4.17 9.1219.88];n=le ngth(xi); f= 2.8302 ,*xi.A2 -7.3721 .*xi+ 9.1382x=-2.9:0.001:3.6;F= 2.8302 .*x.A2 -7.3721 .*x+8.79;fy=abs(f-y); fy2=fy.A2; Ew=max(fy), E1=sum(fy)/n, E2=sqrt((sum(fy2))/n), plot(xi,y, 'r*', x,F, 'b-'),legend( ' 数据点(xi,yi)' , ' 拟合曲线y=f(x)' )xlabel( 'x' ), ylabel( 'y' ),title( ' 例7.4.1 的数据点(xi,yi) 和拟合曲线y=f(x) 的图形' )运行后屏幕显示数据(X i,yj与拟合函数f的最大误差平均误差E1和均方根误差E 及其数据点(X i,y i)和拟合曲线y=f(x)的图形(略).Ew = E1 = E2 =0.745 7, 0.389 2, 0.436 37.5 拟合曲线的线性变换及其MATLA程序例7.5.1 给出一组实验数据点( x i , y i )的横坐标向量为x=(7.5 6.8 5.10 4.53.6 3.4 2.6 2.5 2.1 1.5 2.7 3.6 ),纵横坐标向量为y=(359.26 165.60 59.17 41.66 25.92 22.37 13.47 12.87 11.87 6.69 14.87 24.22 ),试用线性变换和线性最小二乘法求拟合曲线,并用( 7.2),(7.3)和( 7.4)式估计其误差,作出拟合曲线.解(1)首先根据给出的数据点(X i,yj,用下列MATLAB^序画出散点图.在MATLAB 工作窗口输入程序>> x=[7.5 6.8 5.10 4.5 3.6 3.4 2.6 2.5 2.1 1.5 2.73.6];y=[359.26 165.60 59.17 41.66 25.92 22.37 13.47 12.8711.87 6.69 14.87 24.22];plot(x,y, 'r*' ), legend( ' 数据点(xi,yi)' )xlabel( 'x' ), ylabel( 'y' ),title( ' 例7.5.1 的数据点(xi,yi) 的散点图' )运行后屏幕显示数据的散点图(略) .(2) 根据数据散点图,取拟合曲线为bxy a e bx(a 0,b 0) , (7.19)其中a,b是待定系数.令Y In y, A In a, B b,则(7.19)化为丫 A Bx .在MATLAB 工作窗口输入程序>> x=[7.5 6.8 5.10 4.5 3.6 3.4 2.6 2.5 2.1 1.5 2.73.6];y=[359.26 165.60 59.17 41.66 25.92 22.37 13.47 12.87 11.87 6.69 14.87 24.22];Y=log(y); a=polyfit(x,Y,1); B=a(1);A=a(2); b=B,a=exp(A)n=length(x); X=8:-0.01:1; Y=a*exp(b.*X); f=a*exp(b.*x);plot(x,y, 'r*' ,X,Y, 'b-' ), xlabel( 'x' ),ylabel( 'y' ) legend( ' 数据点(xi,yi)' , ' 拟合曲线y=f(x)' )title( ' 例7.5.1 的数据点(xi,yi) 和拟合曲线y=f(x) 的图形' )fy=abs(f-y); fy2=fy.A2; Ew=max(fy), E仁sum(fy)/n,E2=sqrt((sum(fy2))/n)运行后屏幕显示y a e bx的系数 b =0.624 1 , a =2.703 9,数据(x i, y i )与拟合函数f的最大误差Ew =67.641 9 ,平均误差E1=8.677 6 和均方根误差E2=20.711 3 及其数据点(x i, y i)和拟合曲线f(x) 2.703 9e0624 1x的图形(略).7.6 函数逼近及其MATLA程序最佳均方逼近的MATLAB程序function [yy1,a,WE]=zjjfbj(f,X,Y,xx) m=size(f);n=length(X);m=m(1);b=zeros(m,m);c=zeros(m,1); if n~=length(Y)error( 'X和Y的维数应该相同')endfor j=1:mfor k=1:mb(j,k)=0;for i=1:nb(j,k)=b(j,k)+feval(f(j,:),X(i))*feval(f(k,:),X(i));endendc(j)=0;for i=1:nc(j)=c(j)+feval(f(j,:),X(i))*Y(i);endenda=b\c;WE=0;for i=1:nff=0;for j=1:mff=ff+a(j)*feval(f(j,:),X(i));endWE=WE+(Y(i)-ff)*(Y(i)-ff);endif nargin==3return ;endyy=[];for i=1:ml=[];for j=1:length(xx)l=[l,feval(f(i,:),xx(j))];endyy=[yy l'];endyy=yy*a; yy1=yy'; a=a';WE;例7.6.1 对数据X和Y,用函数y 1, y x, y X2进行逼近,用所得到的逼近函数计算在x 6.5处的函数值,并估计误差•其中X=(1 3 4 5 6 7 8 9); Y=(-11 -13 -11 -7 -1 7 17 29).解在MATLA工作窗口输入程序>> X=[ 1 3 4 5 6 7 8 9]; Y=[-11 -13 -11 -7 -1 7 1729];f=['funO';'fun1';'fun2']; [yy,a,WE]=zjjfbj(f,X,Y,6.5)运行后屏幕显示如下yy =2.75000000000003a =-7.00000000000010 -4.99999999999995 1.00000000000000WE =7.172323350269439e-0272 x例7.6.2 对数据X 和Y,用函数y 1, y x, y x , y cosx, y e ,y si nx进行逼近,其中X=( 0 0.50 1.00 1.50 2.00 2.50 3.00 ),Y=( 0 0.4794 0.8415 0.98150.9126 0.5985 0.1645 ).解在MATLA工作窗口输入程序>> X=[ 0 0.50 1.00 1.50 2.00 2.50 3.00];Y=[0 0.4794 0.8415 0.9815 0.9126 0.5985 0.1645];f=['fu n0';'fu n1';'fu n2';'fu n3';'fu n4';'fu n5'];xx=0:0.2:3;[yy,a,WE]=zjjfbj(f,X,Y, xx), plot(X,Y,'ro',xx,yy,'b-')运行后屏幕显示如下(图略)yy = Columns 1 through 7-0.0005 0.2037 0.3939 0.5656 0.7141 0.83480.9236Colu mns 8 through 140.9771 0.9926 0.9691 0.9069 0.8080 0.67660.5191Colu mns 15 through 160.3444 0.1642a = 0.3828 0.4070 -0.3901 0.0765 -0.4598 0.5653WE = 1.5769e-004即,最佳逼近函数为y=0.3828+0.4070*x-0.3901*x A2+0.0765*exp(x) -0.4598*cos(x) +0.5653*si n(x)7.7 三角多项式逼近及其MATLA程序计算三角多项式的MATLA吐程序fun ction [A,B,Y1,Rm]=sanjiao(X,Y,X1,m)n= len gth(X)-1;max1=fix(( n-1)/2);if m > max1m=max1;endA=zeros(1,m+1);B=zeros(1,m+1);Ym=(Y(1)+Y( n+1))/2; Y(1)=Ym; Y(n+1)=Ym; A(1)=2*sum(Y)/n;for i=1:mB(i+1)=s in (i*X)*Y'; A(i+1)=cos(i*X)*Y';endA=2*A/n; B=2*B/n; A(1)=A(1)/2;Y 1=A(1);for k=1:m丫仁 Y1+A(k+1)*cos(k*X1)+ B(k+1)*s in (k*X1);Tm=A(1)+A(k+1).*cos(k*X)+ B(k+1).*si n( k*X); k=k+1;endY;Tm; Rm=(sum(Y-Tm).A2)/n;例7.7.1 根据[,]上的n 13,60,350个等距横坐标点x i,2—x(i 0,1,2,,n)和函数 f(x) 2sin .3(1 )求f(x)的6阶三角多项式逼近,计算均方误差183 ni n(1) 2 si nnxn i 9n 1的前6项进行比较(3) 利用三角多项式分别计算 X i = -2, 2.5的值;(4)在同一坐标系中,画出函数 f (x),n 13,60,350的三角多项式和数据点的图形• 解(1 )输入程序>> X 仁-pi:2*pi/13:pi;Y1=2*sin(X1/3);X1i=[-2,2.5]; [A1,B1,Y11,Rm1] =sanjiao(X1,Y1,X1i,6),X2=-pi:2*pi/60:pi;Y2=2*si n(X2/3); [A2,B2,Y12,Rm2]=sanjiao(X2,Y2,X1i,6)X3=-pi:2*pi/350:pi;Y3=2*si n(X3/3); [A3,B3,Y13,Rm3]=sanjiao(X3,Y3,X1i,6) X1i=[-2,2.5];Y1=2*si n(X1i/3) for n=1:6bi=(-1)A ( n+1)*18*sqrt(3)* n/(pi*(9* n A 2-1)) end(2)画图,输入程序>>X1=-pi:2*pi/13:pi;Y1=2*si n(X1/3);Xi=-pi:0.001:pi; f=2*si n(Xi/3); [A1,B1,Y1i,R1m]=sanjiao(X1,Y1,Xi,6);X2=-pi:2*pi/60:pi; Y2=2*si n(X2/3); X3=-pi:2*pi/350:pi;Y3=2*s in (X3/3); [A2,B2,Y2i,R2m]=sanjiao(X2,Y2,Xi,6); [A3,B3,Y3i,R3m]=sanjiao(X3,Y3,Xi,6); plot(X1,Y1, 'r*' , Xi, Y1i, 'b-' ,Xi, Y2i, 'g--' , Xi, Y3i, 'm:',Xi, f, 'k-.' )xlabel( 'x' ),ylabel( 'y')lege nd('数据点(xi,yi)' , ' n=13的三角多项式’,’n=60的三角多项式','n=350 的三角多项式','函数f(x)')title( '例7.7.1 的数据点(xi,yi) 、n=13,60,350的三角多项式 T3和函数f(x)的图形’) 运行后图形(略).7.8 随机数据点上的二元拟合及其 MATLA 程序2 2随机数,Z 是函数Z=7-3 x 3e -x -y 在(X,Y )的值,拟合点(X I ,Y I )中的X I =-3:023, Y I =-2.5:0.2:3.5. 分别用二元拟合方法中最近邻内插法、三角基线性内插法、三角基三次内插法和 MATLAB 4网格化坐标方法计算在 (X I ,Y I )处的值,作出它们的图形,并与 被拟和曲面进行比较.解 (1)最近邻内插法.输入程序>> x=ra nd(50,1);y=rand(50,1); %生成50个一元均匀分布随机数 x 和y , x ,y . X=-3+(3-(-3))*x; %利用x 生成的随机变量. Y=-2.5+(3.5-(-2.5))*y; %利用y 生成的随机变量. Z=7-3* X.A3 .* exp(-X.A2 - 丫.人2); %在每个随机点(X,Y )处计算 Z的值.X1=-3:0.2:3;(2)将这三个三角多项式分别与 f (x)的傅里叶级数f(x) 例 7.8.1 设节点(X,Y,Z )中的X 和Y 分别是在区间[3,3]和[2.5, 3.5]上的 50 个Y1=-2.5:0.2:3.5;[XI,YI] = meshgrid(X1,Y1);ZI=griddata(X,Y,Z,XI,YI, 处的插值ZI.title('用最近邻内插法拟合函数z =7-3 x A3 exp(-x A2 - y A2)和节点的图形' )%legend( ' 拟合曲面',' 节点(xi,yi,zi)' )输入程序>> x=rand(50,1);y=rand(50,1); %生成50个一元均匀分布随机数x和y , x , y .X=-3+(3-(-3))*x; %利用x生成上的随机变量.Y=-2.5+(3.5-(-2.5))*y; %利用y生成上的随机变量.Z=7-3* X.A3 .* exp(-X.A2 - 丫人2); %在每个随机点(X,Y )处计算Z 的值.%legend( ' 拟合曲面',' 节点(xi,yi,zi)' )hold on plot3(X,Y,Z, 'bo' ) hold of 运行后屏幕显示用三角基线性内插法拟合函数和节点的图形及其插值Z I (略).( 3)三角基三次内插法.输入程序%在当前图形上添加新图形.%用兰色小圆圈画出每个节点(X,Y,Z). %结束在当前图形上添加新图形.22Z=7-3 x3e -x -y在两组不同节点处的曲面>> x=rand(50,1);y=rand(50,1); %生成50个一元均匀分布随机数x和y , x,y .X=-3+(3-(-3))*x; %利用x生成上的随机变量.Y=-2.5+(3.5-(-2.5))*y;Z=7-3* X.A3 .* exp(-X.A2 - Y.A2); 的值.X1=-3:0.2:3;Y1=-2.5:0.2:3.5;[XI,YI] = meshgrid(X1,Y1);ZI=griddata(X,Y,Z,XI,YI, 处的插值ZI.mesh(XI,YI, ZI)xlabel( 'x' ), ylabel( 'y'%将坐标( XI,YI )网格化.'nearest' ) %计算在每个插值点( XI,YI )mesh(XI,YI, ZI) xlabel( 'x' ), ylabel( %作二元拟合图形'y' ), zlabel( 'z' ),的曲面hold on plot3(X,Y,Z, 'bo' )hold of运行后屏幕显示用最近邻内插法拟合函数插值乙(略).( 2)三角基线性内插法.%在当前图形上添加新图形.%用兰色小圆圈画出每个节点(X,Y,Z) %结束在当前图形上添加新图形.22Z=7-3 x3e -x -y在两组不同节点处的曲面及其X1=-3:0.2:3;Y1=-2.5:0.2:3.5;[XI,YI] = meshgrid(X1,Y1);ZI=griddata(X,Y,Z,XI,YI, 处的插值ZI.mesh(XI,YI, ZI)xlabel( 'x' ), ylabel(%将坐标( XI,YI )网格化.'linear' ) %计算在每个插值点( XI,YI )%作二元拟合图形'y' ), zlabel( 'z' ),title(曲面和节点的图形用三角基线性内插法拟合函数)z =7-3 xA3 exp(-xA2 - yA2)%利用y生成上的随机变量.%在每个随机点( X,Y )处计算Z%将坐标( XI,YI )网格化.'cubic' ) %计算在每个插值点( XI,YI )%作二元拟合图形.), zlabel( 'z' ),2title( ' 用三角基三次内插法拟合函数 z =7-3 xA3 exp(-xA2 - yA2) 曲面和节点的图形 ' ) %legend( ' 拟合曲面 ',' 节点 (xi,yi,zi)' hold on plot3(X,Y,Z, hold of 'bo' ) 运行后屏幕显示用三角基三次内插法拟合函数 和节点的图形及其插值 Z I (略). ( 4 ) MATLAB 4网格化坐标方法 . 输入程序 >> x=rand(50,1);y=rand(50,1); X=-3+(3-(-3))*x; Y=-2.5+(3.5-(-2.5))*y; )%在当前图形上添加新图形 . %用兰色小圆圈画出每个节点 (X,Y,Z). %结束在当前图形上添加新图形 .22 Z=7-3 x 3e -x2-y2 在两组不同节点处的曲面 Z=7-3* X.A3 .* exp(-X.A2 - Y.A2); 的值.X1=-3:0.2:3; Y1=-2.5:0.2:3.5;[XI,YI] = meshgrid(X1,Y1); ZI=griddata(X,Y,Z,XI,YI, 插值 ZI. mesh(XI,YI, ZI)xlabel( title( ' 的曲面和节点的图形%legend( hold on %生成50个一元均匀分布随机数 x 和y , x , y . %利用x 生成上的随机变量. %利用y 生成上的随机变量•%在每个随机点( X,Y )处计算 Z %将坐标( XI,YI )网格化 . 'v4' ) %计算在每个插值点( XI,YI )处的%作二元拟合图形 . 'y' ), zlabel( 'z' ), 'x' ), ylabel(用 MATLAB 4 网格化坐标方法 拟合函数 z =7-3 xA3 exp(-xA2 - yA2) ') ' 拟合曲面 ',' 节点 (xi,yi,zi)' )%在当前图形上添加新图形 . %用兰色小圆圈画出每个节点 (X,Y,Z). %结束在当前图形上添加新图形 .22 plot3(X,Y,Z, hold of 'bo' ) 运行后屏幕显示用 MATLAB 4网格化坐标方法拟合函数 Z=7-3 x 3e -x -y 在两组不同节点处 的曲面和节点的图形及其插值 ZI (略). 3 -x 2 -y 2(5)作被拟合曲面 Z =7-3x 3e -x -y 和节点的图形 . 输入程序 >> x=rand(50,1);y=rand(50,1); X=-3+(3-(-3))*x; Y=-2.5+(3.5-(-2.5))*y;Z=7-3* X.A3 .* exp(-X.A2 - Y.A2);%生成50个一元均匀分布随机数 x 和y , x , y . %利用x 生成随机变量. %利用 y 生成随机变量 .%在每个随机点( X,Y )处计算 Z的值. X1=-3.:0.1:3.; Y1=-2.5:0.1:3.5;[XI,YI] = meshgrid(X1,Y1); ZI=7-3* XI.A 3 .* exp(-XI42 - YI.A2); mesh(XI,YI, ZI) xlabel( title(%将坐标( XI,YI )网格化 . %作二元拟合图形 . 'x' ), ylabel( 'y' ), zlabel( 'z' ), 被拟合函数 z =7-3xA3 exp(-xA2 - yA2)的曲面和节点的图形 ') %legend( h old onplot3(X,Y,Z,hold of' 被拟合函数曲面 ',' 'bo' ) 2 运行后屏幕显示被拟合函数 Z=7-3 x 3e -x -y节点 (xi,yi,zi)' )%在当前图形上添加新图形 .%用兰色小圆圈画出每个节点 (X,Y,Z). %结束在当前图形上添加新图形 .的曲面和节点的图形及其函数值 ZI (略) .7.9 随机数据点上的n元拟合及其MATLA程序例7.9.1 首先利用MATLAB函数rand产生随机数据X i,Y i,Z i,然后用线性变换u at b ( 其中a 5,b 5 )将随机数据X1,Y1 ,Z 1 变换为节点坐标( X,Y,Z ), 再用函数222w 7 3x3y(z 1)e x y z生成数据W用三元最近邻内插法方法计算函数w在插值点x i 3:0.5:10, y i 2:0.5:13, z i=y i处拟合数据的值,并作其图形解输入程序>> X1=-5+5*ra nd(10,1);Y1=-5+5*rand(10,1);Z1=Y1;[X,Y,Z] = meshgrid(X1,Y1,Z1);W=7-3* X.A3 .* Y.*(Z+1).* exp(-X.A2 - Y.A2- Z.A2);xi=-3:0.5:10;yi=-2:0.5:13;zi=yi;[XI,YI,ZI] = meshgrid(xi,yi,zi);W1=griddata3(X, Y, Z, W, XI, YI, ZI, 'nearest' );slice(XI,YI,ZI,W1,[-2 4 9.5],9,[-2 2 9]),%shading flat%lighting flatxlabel( 'x' ), ylabel( 'y' ), zlabel( 'z' ),title( ' 被拟合函数W=7-3XA3Y(Z+1)exp(-XA2 - YA2- ZA2) ' );hold oncolorbar( 'horiz' )view([-30 45])运行后屏幕显示三元线性拟合值及其图形(略) .例7.9.2 设节点(X,Y,Z,W )中的X,Y和Z分别是在区间[3, 3]和[2.5, 3.5], Y=Z222上的15个随机数,W是函数W 2 x e x y z在(X,Y,Z )的值,拟合点(X i,y i ,z i)中的x i=-3:0.2:3 ,y i =-2.5:0.235 ,z i =y i,用'li near'方法计算拟合数据的值,并作其图形.解输入程序>> x=rand(15,1); y=rand(15,1);X1=-3+(3-(-3))*x;Y1=-2.5+(3.5-(-2.5))*y;Z1=Y1;[X,Y,Z] = meshgrid(X1,Y1,Z1);W=2+X.* exp(-X.A2 - Y.A2- Z.A2);xi=-3:0.2:3; yi=-2.5:0.2:3.5; zi=yi;[X2,Y2,Z2]=meshgrid(xi,yi,zi);W1=griddata3(X, Y, Z, W, X2,Y2,Z2, 'linear' );slice(X2,Y2,Z2,W1,[-1 0 1.5],2,[-2 3]), shading flat,lighting flat,xlabel( 'x' ), ylabel( 'y' ), zlabel( 'z' ),title( ' 被拟合函数W=2+X exp(-XA2 - YA2- ZA2)' );hold on,colorbar( 'horiz' ), view([-3 5])运行后屏幕显示三元线性拟合值及其图形(略) .。

最小二乘法matlab程序

最小二乘法matlab程序

文件说明1、使用说明1)加载P .m 文件至matlab2)命令行使用P 可以得到线性拟合参数,最终定价,最大利润和线性拟合对比图,蓝色为按照价格升序后的每个销量点连接的直线,绿色为拟合后的直线。

0.40.50.60.70.80.91 1.1010002000300040005000600070002、代码说明采用先线性拟合价格和销量直线方程,再代入利润函数,进行微分求极大值,即为最终定价,最后代回利润函数得到最大利润。

function P()%函数使用>>P%0.59,0.80,0.95,0.45,0.79,0.99,0.90,0.65,0.79,0.69,0.79,%0.49,1.09,0.95,0.79,0.65,0.45,0.60,0.89,0.79,0.99,0.85%3980,2200,1850,6100,2100,1700,2000,4200,2440,3300,2300,%6000,1190,1960,2760,4330,6960,4160,1990,2860,1920,2160%将价格和销量分别对应列入2行22列矩阵TEMP=[0.59,0.80,0.95,0.45,0.79,0.99,0.90,0.65,0.79,0.69,0.79,0.49,1.09,0.95,0.79,0. 65,0.45,0.60,0.89,0.79,0.99,0.85;3980,2200,1850,6100,2100,1700,2000,4200,2440,3 300,2300,6000,1190,1960,2760,4330,6960,4160,1990,2860,1920,2160];%将TEMP矩阵按照第一行的数进行从小到大的排列TEMP_T=sortrows(TEMP');TEMP=TEMP_T';Price=TEMP(1,:); %取第一行的数为价格Sales=TEMP(2,:); %取第二行的数为销量Cost=0.23; %成本L=polyfit(Price,Sales,1); %得到一阶最小二乘的2个拟合参数Sales_P=L(1)*Price+L(2); %得到拟合出的相应销量点disp('L(1)=');disp(L(1));disp('L(2)=');disp(L(2));plot(Price,Sales,Price,Sales_P); %做出对比图大概看下是否基本符合syms x; %定义变量xf(x)=L(1).*x+L(2); %写出拟合函数z(x)=f(x).*(x-Cost); %写利润函数明显利润函数为二次上凸抛物线dz(x)=diff(z(x)); %对利润函数求导Pricing=solve(dz(x),x); %极大值点即为最终定价Profit=subs(z(x),'x',Pricing); %计算最大利润Pricing=double(Pricing); %转换为双精度型Profit=double(Profit);disp('Pricing=');disp(Pricing);disp('Profit=');disp(Profit);end。

matlab最小二乘法拟合直线

matlab最小二乘法拟合直线

matlab最小二乘法拟合直线【导言】直线拟合是数据分析和数学建模中常用的方法之一,而最小二乘法则是在直线拟合中最常用的方法之一。

在本文中,将介绍使用Matlab进行最小二乘法拟合直线的步骤和原理,并就此主题进行深入的探讨。

【正文】一、最小二乘法简介最小二乘法是一种数学优化方法,它通过最小化误差的平方和来寻找函数与观测数据之间的最佳拟合。

在直线拟合中,最小二乘法的目标是找到一条直线,使得所有观测数据点到直线的距离之和最小。

1. 确定拟合的模型在直线拟合中,我们的模型可以表示为:Y = a*X + b,其中a和b为待求参数,X为自变量,Y为因变量。

2. 计算误差对于每一个观测数据点(x_i, y_i),计算其到直线的垂直距离d_i,即误差。

误差可以表示为:d_i = y_i - (a*x_i + b)。

3. 求解最小二乘法问题最小二乘法的目标是最小化所有观测数据点到直线的距离之和,即最小化误差的平方和:min Σ(d_i^2) = min Σ(y_i - (a*x_i + b))^2。

通过求解该最小化问题,可以得到最佳拟合的直线斜率a和截距b的值。

二、Matlab实现最小二乘法拟合直线的步骤下面将介绍使用Matlab进行最小二乘法拟合直线的基本步骤。

1. 导入数据需要将实验数据导入Matlab。

可以使用matlab自带的readtable函数从文件中读取数据,也可以使用xlsread函数直接从Excel文件中读取数据。

2. 数据预处理在进行最小二乘法拟合直线之前,先对数据进行预处理。

一般情况下,可以对数据进行去除异常值、归一化等操作,以确保数据的准确性和可靠性。

3. 拟合直线使用Matlab的polyfit函数可以实现直线拟合。

polyfit函数可以拟合输入数据的曲线或平面,并返回拟合参数。

在拟合直线时,需要指定拟合的阶数,对于直线拟合,阶数为1。

4. 绘制拟合直线使用Matlab的plot函数可以将拟合的直线绘制出来,以便于观察拟合效果。

最小二乘法拟合matlab

最小二乘法拟合matlab

最小二乘法拟合matlab
最小二乘法拟合MATLAB
最小二乘法是一种有效地估计未知参数值的统计学方法,它假定误差服从正态分布,然后进行极大似然估计。

下面我们就来介绍一下如何使用MATLAB来拟合最小二乘法。

1.第一步:绘制出要拟合的数据,这里我们绘制出了一个简单的抛物线数据:
x=[-3 -2 -1 0 1 2 3];
y=[6 3 1 0 -2 -4 -7];
plot(x,y);
2.第二步:根据你要拟合的函数,构建出你所要拟合的模型。

这里,我们想拟合一条抛物线:y=ax2+bx+c ;
3.第三步:定义拟合函数:
fun=@(x,xdata)x(1)*xdata.^2+x(2)*xdata+x(3);
4.第四步:调用最小二乘法函数:
[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcur vefit(fun,[1 1 1],x,y);
现在你已经可以看到拟合函数的参数了:
x的值为[1.7, 0.3, -1.5],
而拟合函数为: y=1.7x2+0.3x-1.5
因此,使用MATLAB调用最小二乘法可以很方便地拟合出任意复
杂的函数,并且可以得到准确的参数值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档