曲线拟合的线性最小二乘法及其MATLAB程序
matlab function编程最小二乘法
matlab function编程最小二乘法在MATLAB中,使用最小二乘法拟合数据通常涉及到使用函数进行编程。
以下是一个简单的MATLAB函数,用于实现最小二乘法拟合直线的例子:function [coefficients, fittedData] = leastSquaresFit(x, y, degree)% x: 输入数据的 x 值% y: 输入数据的 y 值% degree: 拟合多项式的次数% 创建 Vandermonde 矩阵A = zeros(length(x), degree + 1);for i = 1:degree + 1A(:, i) = x.^(degree + 1 - i);end% 使用最小二乘法计算系数coefficients = (A' * A)\(A' * y);% 生成拟合曲线的数据fittedData = polyval(coefficients, x);% 绘制原始数据和拟合曲线figure;plot(x, y, 'o', x, fittedData, '-');legend('原始数据', '拟合曲线');xlabel('X轴');ylabel('Y轴');title('最小二乘法拟合');end你可以通过调用这个函数并提供你的数据和拟合多项式的次数来进行最小二乘法拟合。
例如:x = [1, 2, 3, 4, 5];y = [2.1, 2.8, 3.4, 3.7, 4.2];degree = 1;[coefficients, fittedData] = leastSquaresFit(x, y, degree);disp('拟合系数:');disp(coefficients);这是一个简单的线性拟合的例子。
你可以根据需要修改该函数,以适应高次多项式的情况。
曲线拟合的matlab程序
曲线拟合的matlab程序
曲线拟合是一种通过拟合曲线来获取数据规律的方法。
在matlab中,我们可以通过一些函数来实现曲线拟合。
本文将介绍使用matlab进行曲线拟合的方法以及对应程序。
1. 多项式拟合
多项式拟合是一种简单的曲线拟合方法。
在matlab中,我们可以使用polyfit函数进行多项式拟合。
例如,我们要对以下数据进行二次拟合:
x=[-2,-1,0,1,2];
y=[4,1,0,1,4];
p=polyfit(x,y,2);
x_new=-2:0.1:2;
y_new=polyval(p,x_new);
其中,polyfit函数用于拟合多项式曲线,x为自变量,y为因变量,2为多项式的次数。
polyval函数用于计算拟合后的数据点,x_new为计算的自变量范围,0.1为自变量的步长。
2. 最小二乘法拟合
我们可以使用以下程序进行对数曲线拟合:
fun=@(c,x)log(c(1)*x);
c0=[1];
c=lsqcurvefit(fun,c0,x,y);
x_new=1:0.1:5;
y_new=c(1)*x_new;
其中,fun为回归函数,c为回归系数,c0为回归系数的初值,lsqcurvefit函数使用最小二乘法进行拟合。
x_new和y_new同上。
3. 样条拟合
其中,spline函数用于进行样条拟合,x_new为计算的自变量范围,0.1为自变量的步长。
在一些实际应用中,数据可能受到一些约束条件的限制,例如非负性、线性等限制。
在matlab中,我们可以使用lsqnonlin函数进行最小二乘法带约束的拟合。
matlab最小二乘法曲线拟合
matlab最小二乘法曲线拟合最小二乘法是一种常用的曲线拟合方法,它通过最小化实际观测值与拟合曲线之间的平方误差来确定最佳拟合曲线的参数。
给定一组实际观测数据点(xi, yi),我们希望找到一个拟合曲线y=f(x;θ),其中θ表示曲线的参数。
最小二乘法的目标是使误差的平方和最小化,即使得下述损失函数最小化:L(θ) = ∑(yi - f(xi;θ))^2其中,∑表示求和运算,L(θ)是损失函数,yi是第i个观测数据点的输出值,f(xi;θ)是根据参数θ计算得到的拟合曲线在第i个观测点的预测值。
为了找到最佳的参数θ,我们通过最小化损失函数来求解优化问题:minimize L(θ)这个问题可以通过求解等式∂L/∂θ = 0 来得到最优参数θ的闭式解。
具体的求解方法,可以通过矩阵和向量的运算来实现。
在Matlab中,可以使用“polyfit”函数进行最小二乘法的曲线拟合。
该函数可以拟合出一条多项式曲线,通过指定最佳拟合的次数,即多项式的阶数。
拟合结果包括最佳参数和拟合误差等信息。
使用方法如下:```% 输入观测数据x = [x1, x2, x3, ...]';y = [y1, y2, y3, ...]';% 拟合曲线order = 1; % 最佳拟合的次数(如一次线性拟合)p = polyfit(x, y, order);% 最佳参数coefficients = p;% 拟合曲线curve = polyval(p, x);% 绘制拟合曲线和观测数据plot(x, y, 'o', x, curve)```这样,就可以使用Matlab的最小二乘法曲线拟合方法来得到最佳的拟合曲线。
最小二乘法曲线拟合-原理及matlab实现
曲线拟合(curve-fitting ):工程实践中,用测量到的一些离散的数据},...2,1,0),,{(m i y x i i =求一个近似的函数)(x ϕ来拟合这组数据,要求所得的拟合曲线能最好的反映数据的基本趋势(即使)(x ϕ最好地逼近()x f ,而不必满足插值原则。
因此没必要取)(i x ϕ=i y ,只要使i i i y x -=)(ϕδ尽可能地小)。
原理:给定数据点},...2,1,0),,{(m i y x i i =。
求近似曲线)(x ϕ。
并且使得近似曲线与()x f 的偏差最小。
近似曲线在该点处的偏差i i i y x -=)(ϕδ,i=1,2,...,m 。
常见的曲线拟合方法:1.使偏差绝对值之和最小2.使偏差绝对值最大的最小3.使偏差平方和最小最小二乘法:按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。
推导过程:1. 设拟合多项式为:kk x a x a a x +++=...)(10ϕ2. 各点到这条曲线的距离之和,即偏差平方和如下:3. 问题转化为求待定系数0a ...k a 对等式右边求i a 偏导数,因而我们得到了:.......4、 把这些等式化简并表示成矩阵的形式,就可以得到下面的矩阵:5. 将这个范德蒙得矩阵化简后可得到:6. 也就是说X*A=Y ,那么A = (X'*X)-1*X'*Y ,便得到了系数矩阵A ,同时,我们也就得到了拟合曲线。
MATLAB实现:MATLAB提供了polyfit()函数命令进行最小二乘曲线拟合。
调用格式:p=polyfit(x,y,n)[p,s]= polyfit(x,y,n)[p,s,mu]=polyfit(x,y,n)x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。
x 必须是单调的。
矩阵s包括R(对x进行QR分解的三角元素)、df(自由度)、normr(残差)用于生成预测值的误差估计。
最小二乘法曲线拟合的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程序进行比较,找出其优缺点。
首先,要使用最小二乘法拟合曲线,需要准备一组输入数据,一般可以将其表示为两个向量,分别是自变量x和因变量y。
这些数据可以是由测量和实验得到的,也可以是由人工输入的,但无论如何都要确保它们的准确性。
接下来,就可以使用Matlab输入数据进行处理,用最小二乘法计算出最拟合的曲线及其参数。
具体步骤主要分为三步:第一步是计算输入数据的均值和方差,包括自变量x和因变量y的均值和方差;第二步是计算自变量x和因变量y的关系,即最小二乘拟合曲线的系数;第三步是验证拟合的曲线的准确性,如果不满意,可以重新调整参数,以获得较好的拟合效果。
此外,Matlab除了提供自带的最小二乘法函数外,还支持第三方开发者开发现成的matlab程序,用于解决最小二乘法的问题。
这些程序中有一些是开源的,另一些则是出售的。
其中开源的有LEAST,CURVEFIT,CURVEFITTOOL等,而出售的有MATLAB Curve Fitting Toolbox,Optimization Toolbox和Statistics Toolbox等。
它们的突出特点是速度快,代码简洁,容易上手,适用于多种拟合类型。
然而,各种matlab程序也有自身的缺点,最明显的就是当输入数据非常庞大时,它们的计算能力就无法跟上,速度就会变慢。
此外,使用出售的matlab程序可能相对昂贵,而且有时需要安装某些复杂的库文件,这也是一种麻烦。
因此,使用最小二乘法拟合曲线时,可以参考现有的matlab程序,也可以自己编写matlab代码,同时要考虑到程序的可靠性、效率和可行性。
本文介绍的matlab程序的最大优势是它不需要依赖第三方的软件,而且能够满足大多数用户的需求,使得最小二乘法可以在短时间内被成功运用。
matlab 最小二乘拟合直线并输出直线方程
在Matlab中,最小二乘法是一种常见的数学拟合技术,可以用来拟合直线,曲线甚至更复杂的函数。
通过最小二乘法,可以找到最适合数据点的直线方程,从而能够更好地分析和预测数据之间的关系。
在本文中,我将详细介绍如何在Matlab中使用最小二乘法来拟合直线,并输出直线方程。
我们需要准备一组数据点。
假设我们有一组横坐标和纵坐标的数据点,分别用变量x和y表示。
接下来,我们可以使用Matlab中的polyfit函数来进行最小二乘拟合。
该函数的语法如下:```matlabp = polyfit(x, y, 1);```其中,x和y分别代表数据点的横坐标和纵坐标,而1代表要拟合的直线的次数,即一次函数。
执行该语句后,变量p将会存储拟合出的直线的系数,即直线方程y = ax + b中的a和b。
在接下来的内容中,我将详细讨论如何通过最小二乘法拟合直线,并输出直线方程。
具体而言,我们将从如何准备数据、使用polyfit函数进行拟合、得到直线方程以及如何应用和解释直线拟合结果等方面进行全面分析。
一、数据准备在使用最小二乘法拟合直线之前,首先要准备一组数据点。
这些数据点应该是具有一定规律性的,从而能够通过直线拟合来揭示数据之间的关系。
在这一部分,我将详细介绍如何准备数据,并重点关注数据的合理性和可靠性。
1.1 数据收集要拟合直线,首先需要收集一组数据点。
这些数据点可以来源于实验观测、实际测量或者模拟计算等方式。
在收集数据时,需要保证数据的准确性和完整性。
还需要考虑数据的分布范围和密度,以便更好地反映数据之间的关系。
1.2 数据预处理在拟合直线之前,通常需要对数据进行一定的预处理。
这可能包括去除异常值、处理缺失数据,甚至进行数据变换等操作。
在这一步中,我将介绍如何进行数据预处理,并强调预处理对最终拟合结果的影响。
二、最小二乘拟合当数据准备工作完成后,就可以使用polyfit函数进行最小二乘拟合了。
在这一部分,我将详细介绍polyfit函数的使用方法,并解释其背后的数学原理。
最小二乘法曲线拟合的Matlab程序
最小二乘法曲线拟合的Matlab程序最小二乘法是一种常用的数学优化技术,它通过最小化误差的平方和来找到最佳函数匹配。
在曲线拟合中,最小二乘法被广泛使用来找到最佳拟合曲线。
下面的Matlab程序演示了如何使用最小二乘法进行曲线拟合。
% 输入数据x = [1, 2, 3, 4, 5];y = [2.2, 2.8, 3.6, 4.5, 5.1];% 构建矩阵A = [x(:), ones(size(x))]; % 使用x向量和单位矩阵构建矩阵A% 使用最小二乘法求解theta = (A' * A) \ (A' * y); % 利用最小二乘法的公式求解% 显示拟合曲线plot(x, theta(1) * x + theta(2), '-', 'LineWidth', 2); % 画出拟合曲线hold on; % 保持当前图像plot(x, y, 'o', 'MarkerSize', 10, 'MarkerFaceColor','b'); % 在图像上画出原始数据点xlabel('x'); % 设置x轴标签ylabel('y'); % 设置y轴标签legend('拟合曲线', '原始数据点'); % 设置图例这个程序首先定义了一组输入数据x和y。
然后,它构建了一个矩阵A,这个矩阵由输入数据x和单位矩阵构成。
然后,程序使用最小二乘法的公式来求解最佳拟合曲线的参数。
最后,程序画出拟合曲线和原始数据点。
这个程序使用的是线性最小二乘法,适用于一次曲线拟合。
如果你的数据更适合非线性模型,例如二次曲线或指数曲线,那么你需要使用非线性最小二乘法。
Matlab提供了lsqcurvefit函数,可以用于非线性曲线拟合。
例如:% 非线性模型 y = a * x^2 + b * x + cfun = @(theta, x) theta(1) * x.^2 + theta(2) * x +theta(3);guess = [1, 1, 1]; % 初始猜测值% 使用lsqcurvefit函数求解theta = lsqcurvefit(fun, guess, x, y);% 显示拟合曲线plot(x, fun(theta, x), '-', 'LineWidth', 2); % 画出拟合曲线hold on; % 保持当前图像plot(x, y, 'o', 'MarkerSize', 10, 'MarkerFaceColor','b'); % 在图像上画出原始数据点xlabel('x'); % 设置x轴标签ylabel('y'); % 设置y轴标签legend('拟合曲线', '原始数据点'); % 设置图例这个程序定义了一个非线性函数fun,然后使用lsqcurvefit函数来求解最佳拟合曲线的参数。
曲线拟合的线性最小二乘法及其MATLAB程序
曲线拟合的线性最⼩⼆乘法及其MATLAB程序3.1 曲线拟合的线性最⼩⼆乘法及其MATLAB 程序例3.1.1 给出⼀组数据点),(i i y x 列⼊表3-1中,试⽤线性最⼩⼆乘法求拟合曲线,并估计其误差,作出拟合曲线.表3-1 例3.1.1的⼀组数据),(y x解(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('例3.1.1的数据点(xi,yi)的散点图')运⾏后屏幕显⽰数据的散点图(略).(3)编写下列MATLAB 程序计算)(x f 在),(i i y x 处的函数值,即输⼊程序>> 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.^3+ a2.*x.^2+ a3.*x+ a4运⾏后屏幕显⽰关于a 1,a 2, a 3和a 4的线性⽅程组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.50 68.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.^2; J=sum(fy.^2)运⾏后屏幕显⽰误差平⽅和如下J=(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)^2+(-4913/1000*a1+289/100*a2-17/10*a3+a4+171/2)^2+(-1331/1000*a1+121/100*a2-11/10*a3+a4+723/20)^2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)^2+(a4+91/10)^2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)^2+(27/8*a1+9/4*a2+3/2*a3+a4+328/25)^2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/2)^2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)^2为求4321,,,a a a a 使J 达到最⼩,只需利⽤极值的必要条件0=??ka J )4,3,2,1(=k ,得到关于4321,,,a a a a 的线性⽅程组,这可以由下⾯的MA TLAB 程序完成,即输⼊程序>> syms a1 a2 a3 a4J=(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)^2+(-4913/1000*a1+289/100*a2-17/10*a3+a4...+171/2)^2+(-1331/1000*a1+121/100*a2-11/10*a3+a4+723/20)^2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)^2+(a 4+91/10)^2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)^2+(27/8*a1+9/4*a2+3/2*a3+a4+328/25)^2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/2)^2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)^2;Ja1=diff(J,a1); Ja2=diff(J,a2); Ja3=diff(J,a3); Ja4=diff(J,a4);Ja11=simple(Ja1), Ja21=simple(Ja2), Ja31=simple(Ja3), Ja41=simple(Ja4),运⾏后屏幕显⽰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/625Ja31 =1377283/2500*a1+23667/250*a2+67*a3+18/5*a4-232638/125Ja41 =23667/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, 1377283/2500, 23667/250; 32097579/25000, 1377283/2500, 23667/250, 67; 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*x^3-7988544102557579/562949953421312*x^2+1804307491277693/281474976710656*x-4648521160813215/562949953421312故所求的拟合曲线为8.25746.410214.19055.0911)(23-+-=x x x x f .(4)编写下⾯的MATLAB 程序估计其误差,并作出拟合曲线和数据的图形.输⼊程序>> xi=[-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];n=length(xi);f=5.0911.*xi.^3-14.1905.*xi.^2+6.4102.*xi -8.2574;x=-2.5:0.01: 3.6;F=5.0911.*x.^3-14.1905.*x.^2+6.4102.*x -8.2574;fy=abs(f-y); fy2=fy.^2; Ew=max(fy),E1=sum(fy)/n, E2=sqrt((sum(fy2))/n)plot(xi,y,'r*'), hold on, plot(x,F,'b-'), hold offlegend('数据点(xi,yi)','拟合曲线y=f(x)'),xlabel('x'), ylabel('y'),title('例3.1.1的数据点(xi,yi)和拟合曲线y=f(x)的图形')运⾏后屏幕显⽰数据),(i i y x 与拟合函数f 的最⼤误差E w ,平均误差E 1和均⽅根误差E 2及其数据点),(i i y x 和拟合曲线y =f (x )的图形(略).Ew = E1 = E2 =3.105 4 0.903 4 1.240 93.2 函数)(x r k 的选取及其MATLAB 程序例3.2.1 给出⼀组实验数据点),(i i y x 的横坐标向量为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),试⽤线性最⼩⼆乘法求拟合曲线,并估计其误差,作出拟合曲线.解(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('例3.2.1的数据点(xi,yi)的散点图')运⾏后屏幕显⽰数据的散点图(略).(3)编写下列MATLAB 程序计算)(x f 在),(i i y x 处的函数值,即输⼊程序>> syms a bx=[-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(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)];fy=fi-y;fy2=fy.^2;J=sum(fy.^2)运⾏后屏幕显⽰误差平⽅和如下J =(a*exp(17/2*b)-22963/50)^2+(a*exp(87/10*b)-5281/100)^2+(a*exp(71/10*b)-19827/100)^2+(a*exp(34/5*b)-828/5)^2+(a*exp(51/10*b)-5917/100)^2+(a*exp(9/2*b)-2083/50)^2+(a*exp(18/5*b)-648/25)^2+(a*exp(17/5*b)-2237/100)^2+(a*exp(13/5*b)-1347/100)^2+(a*ex p(5/2*b)-1287/100)^2+(a*exp(21/10*b)-1187/100)^2+(a*exp(3/2*b)-669/100)^2+(a*exp(27/10*b)-1487/100)^2+(a*exp(18/5*b)-1211/50)^2为求b a ,使J 达到最⼩,只需利⽤极值的必要条件,得到关于b a ,的线性⽅程组,这可以由下⾯的MA TLAB 程序完成,即输⼊程序>> syms a bJ=(a*exp(17/2*b)-22963/50)^2+(a*exp(87/10*b)-5281/100)^2+(a*exp(71/10*b)-19827/100)^2+(a*exp(34/5*b)-828/5)^2+(a*exp(51/10*b)-5917/100)^2+(a*exp(9/2*b)-2083/50)^2+(a*exp(18/5*b)-648/25)^2+(a*exp(17/5*b)-2237/100)^2+(a*exp(13/5*b)-1347/100)^2+(a*exp(5/2*b)-1287/100)^2+(a*exp(21/10*b)-1187/100)^2+ (a*exp(3/2*b )-669/100)^2+(a*exp(27/10*b)-1487/100)^2+(a*exp(18/5*b)-1211/50)^2;Ja=diff(J,a); Jb=diff(J,b);Ja1=simple(Ja), Jb1=simple(Jb),运⾏后屏幕显⽰J 分别对b a ,的偏导数如下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(27/10*b)-2507/25*exp(18/5*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)^2+8500*a*exp(17/2*b)^2+6800*a*exp(34/5*b)^2-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*ex p(21/10*b)+7100*a*exp(71/10*b)^2+5100*a*exp(51/10*b)^2+4500*a*exp(9/2*b)^2+7200*a*exp(18/5*b)^2+3400*a*exp(17/5*b)^2+2600*a*exp(13/5*b)^2+2500*a*exp(5/2*b)^2+1500*a*exp(3/2*b)^2+2700*a*exp(27/10*b)^2+8700*a*exp(87/10*b)^2)⽤解⼆元⾮线性⽅程组的⽜顿法的MATLAB 程序求解线性⽅程组J a1 =0,J b1 =0,得a = b=2.811 0 0.581 6故所求的拟合曲线(7.13)为0811.2)(=x f e x 5816.0-.(4)编写下⾯的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=length(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.^2;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('例3.2.1的数据点(xi,yi)和拟合曲线y=f(x)的图形')运⾏后屏幕显⽰数据),(i i y x 与拟合函数f 的最⼤误差E w = 390.141 5,平均误差E 1=36.942 2和均⽅根误差E 2=106.031 7及其数据点),(i i y x 和拟合曲线y =f (x )的图形(略).3.3 多项式拟合及其MATLAB 程序例3.3.1 给出⼀组数据点),(i i y x 列⼊表3–3中,试⽤线性最⼩⼆乘法求拟合曲线,并估计其误差,作出拟合曲线.表3–3 例3.3.1的⼀组数据),(y x解(1)⾸先根据表3–3给出的数据点i i ,⽤下列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.1219.88];plot(x,y,'r*'), legend('数据点(xi,yi)')xlabel('x'), ylabel('y'),title('例3.3.1的数据点(xi,yi)的散点图')运⾏后屏幕显⽰数据的散点图(略).(3)⽤作线性最⼩⼆乘拟合的多项式拟合的MATLAB 程序求待定系数k a )3,2,1(=k .输⼊程序>> a=polyfit(x,y,2)运⾏后输出(7.16)式的系数a =2.8302 -7.3721 9.1382故拟合多项式为2138.91372.72830.2)(2+-=x x x f .(4)编写下⾯的MATLAB 程序估计其误差,并做出拟合曲线和数据的图形.输⼊程序>> 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.12 19.88];n=length(xi); f=2.8302.*xi.^2-7.3721.*xi+9.1382x=-2.9:0.001:3.6;F=2.8302.*x.^2-7.3721.*x+8.79;fy=abs(f-y); fy2=fy.^2; 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('例3.3.1 的数据点(xi,yi)和拟合曲线y=f(x)的图形')运⾏后屏幕显⽰数据),(i i y x 与拟合函数f 的最⼤误差E w ,平均误差E1和均⽅根误差E 2及其数据点(x i ,y i )和拟合曲线y =f (x )的图形(略).Ew = E1 = E2 =0.745 7, 0.389 2, 0.436 33.4 拟合曲线的线性变换及其MATLAB 程序例3.4.1 给出⼀组实验数据点),(i i y x 的横坐标向量为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),试⽤线性变换和线性最⼩⼆乘法求拟合曲线,并估计其误差,作出拟合曲线.解(1)⾸先根据给出的数据点),(i i y x ,⽤下列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.87 11.87 6.69 14.87 24.22];plot(x,y,'r*'), legend('数据点(xi,yi)')xlabel('x'), ylabel('y'),title('例3.4.1的数据点(xi,yi)的散点图')运⾏后屏幕显⽰数据的散点图(略).(2)根据数据散点图,取拟合曲线为a y =e bx )0,0(≠>b a ,其中b a ,是待定系数.令b B a A y Y ===,ln ,ln ,则(7.19)化为Bx A Y +=.在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('例3.4.1 的数据点(xi,yi)和拟合曲线y=f(x)的图形')fy=abs(f-y); fy2=fy.^2; Ew=max(fy), E1=sum(fy)/n,E2=sqrt((sum(fy2))/n)运⾏后屏幕显⽰a y =e bx 的系数b =0.624 1,a =2.703 9,数据),(i i y x 与拟合函数f的最⼤误差Ew =67.641 9,平均误差E 1=8.677 6和均⽅根误差E 2=20.711 3及其数据点),(i i y x 和拟合曲线9703.2)(=x f e x 1624.0的图形(略).3.5 函数逼近及其MATLAB 程序最佳均⽅逼近的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;例3.5.1 对数据X 和Y , ⽤函数2,,1x y x y y ===进⾏逼近,⽤所得到的逼近函数计算在 6.5=x 处的函数值,并估计误差.其中X =(1 3 4 5 6 7 8 9); Y =(-11 -13 -11 -7 -1 7 17 29).解在MATLAB ⼯作窗⼝输⼊程序>> X=[ 1 3 4 5 6 7 8 9]; Y=[-11 -13 -11 -7 -1 7 17 29];f=['fun0';'fun1';'fun2']; [yy,a,WE]=zjjfbj(f,X,Y,6.5)运⾏后屏幕显⽰如下yy =2.75000000000003a =-7.00000000000010 -4.99999999999995 1.00000000000000WE =7.172323350269439e-027例3.5.2 对数据X 和Y ,⽤函数2,,1x y x y y ===,x y cos =,=y e x,xy sin =进⾏逼近,其中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).解在MATLAB ⼯作窗⼝输⼊程序>> 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=['fun0';'fun1';'fun2';'fun3';'fun4';'fun5'];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.8348 0.9236Columns 8 through 140.9771 0.9926 0.9691 0.9069 0.8080 0.6766 0.5191Columns 15 through 160.3444 0.1642a = 0.3828 0.4070 -0.3901 0.0765 -0.4598 0.5653 WE = 1.5769e-004即,最佳逼近函数为y=0.3828+0.4070*x-0.3901*x^2+0.0765*exp(x) -0.4598*cos(x) +0.5653*sin(x).。
matlab最小二乘法拟合曲线并计算拟合曲线的总长度
matlab最小二乘法拟合曲线并计算拟合曲线的总长度在MATLAB中,你可以使用最小二乘法拟合曲线,然后使用积分的方法计算拟合曲线的总长度。
下面是一种可能的方法:1. 首先,使用MATLAB的`polyfit`函数进行最小二乘法拟合。
这个函数可以拟合多项式到一组数据。
```matlabx = [x1, x2, ... , xn]; % 输入数据y = [y1, y2, ... , yn]; % 输出数据p = polyfit(x, y, n); % n是多项式的阶数,比如2代表二次函数```这将返回一个向量p,代表多项式的系数,从最高阶到最低阶。
2. 然后,你可以使用`polyval`函数来评估拟合的曲线。
```matlabyfit = polyval(p, x); % 计算拟合的y值```3. 计算拟合曲线的总长度。
你可以使用数值积分的方法,例如`integral`函数。
你需要知道曲线在[a, b]之间的长度。
例如,如果你的数据在[-10, 10],你可以这样做:```matlaba = -10; % 积分下限b = 10; % 积分上限L = integral((x) abs(diff(polyval(p, x))), a, b); % 计算长度```这里我们使用`diff`函数来计算拟合曲线的导数(即曲线的斜率),然后乘以x的差分(即dx)。
最后,我们使用`integral`函数来计算这个函数的积分,也就是曲线的长度。
注意,我们使用`abs`函数来确保每一段都是正的,因为曲线可能向上或向下弯曲。
注意:这种方法只适用于连续且可微的函数。
如果你的数据包含噪声或者有突变,那么这种方法可能不准确。
matlab最小二乘法曲线拟合
matlab最小二乘法曲线拟合在数据处理和拟合曲线中,最小二乘法是一种常用的数学方法。
通过最小化数据点到拟合曲线的垂直距离的平方和,最小二乘法可以在给定数据集上拟合出一条曲线。
在MATLAB中,最小二乘法曲线拟合可以通过使用polyfit函数来实现。
最小二乘法原理最小二乘法的目标是找到一条曲线,使得曲线上的点到原始数据点的垂直距离的平方和最小。
具体而言,对于给定的数据集{(x1, y1), (x2, y2), ... , (xn, yn)},最小二乘法拟合的目标是找到一个多项式函数y =f(x) = a0 + a1*x + a2*x^2 + ... + an*x^n,其中a0, a1, a2, ... , an为待定系数,使得下述式子最小化:这里,ei表示第i个数据点的观测误差。
在MATLAB中使用最小二乘法进行曲线拟合MATLAB提供了polyfit函数来进行最小二乘法曲线拟合。
polyfit函数采用两个输入参数:x和y,分别表示数据点的横坐标和纵坐标。
此外,用户还需要指定多项式的阶数n。
polyfit将返回一个包含拟合多项式系数的向量p。
用户可以使用polyval函数来计算拟合曲线上的点的纵坐标,具体使用如下:p = polyfit(x, y, n);y_fit = polyval(p, x);下面我们通过一个例子来演示如何使用MATLAB进行最小二乘法曲线拟合。
假设我们有如下数据集,表示了一个函数y = f(x) = 2x^3 + 3x^2 - 5x + 2上的一些离散数据点:x = [0, 1, 2, 3, 4, 5];y = [2, 3, 4, 5, 6, 7];我们可以使用polyfit函数进行二次多项式曲线拟合,代码如下:p = polyfit(x, y, 2);y_fit = polyval(p, x);接下来,我们可以绘制原始数据点和拟合曲线,代码如下:plot(x, y, 'o');hold on;plot(x, y_fit, '-');xlabel('x');ylabel('y');legend('原始数据', '拟合曲线');在图中,原始数据点以圆圈表示,拟合曲线以实线表示。
曲线拟合的最小二乘法matlab举例
曲线拟合的最小二乘法学院:光电信息学院 姓名:赵海峰 学号:200820501001一、曲线拟合的最小二乘法原理:由已知的离散数据点选择与实验点误差最小的曲线)(...)()()(1100x a x a x a x S n n ϕϕϕ+++=称为曲线拟合的最小二乘法。
若记),()()(),(0i k i j mi i k j x x x ϕϕωϕϕ∑==k i k i mi i k d x x f x f ≡=∑=)()()(),(0ϕωϕ上式可改写为),...,1,0(;),(n k d a k j noj j k -=∑=ϕϕ这个方程成为法方程,可写成距阵形式d Ga =其中,),...,,(,),...,,(1010T n T n d d d d a a a a ==⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=),(),(),()(),(),(),(),(),(101110101000n n n n n n G ϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕϕ 。
它的平方误差为:.)]()([)(||||2022i i mi i x f x S x -=∑=ωδ二、数值实例:下面给定的是乌鲁木齐最近1个月早晨7:00左右(新疆时间)的天气预报所得到的温度数据表,按照数据找出任意次曲线拟合方程和它的图像。
下面应用Matlab编程对上述数据进行最小二乘拟合三、Matlab程序代码:x=[1:1:30];y=[9,10,11,12,13,14,13,12,11,9,10,11,12,13,14,12,11,10,9,8,7,8,9,11,9,7,6,5,3,1]; a1=polyfit(x,y,3) %三次多项式拟合%a2= polyfit(x,y,9) %九次多项式拟合%a3= polyfit(x,y,15) %十五次多项式拟合%b1=polyval(a1,x)b2=polyval(a2,x)b3=polyval(a3,x)r1= sum((y-b1).^2) %三次多项式误差平方和%r2= sum((y-b2).^2) %九次次多项式误差平方和%r3= sum((y-b3).^2) %十五次多项式误差平方和%plot(x,y,'*') %用*画出x,y图像%hold onplot(x,b1, 'r') %用红色线画出x,b1图像%hold onplot(x,b2, 'g') %用绿色线画出x,b2图像%hold onplot(x,b3, 'b:o') %用蓝色o线画出x,b3图像%四、数值结果:不同次数多项式拟和误差平方和为:r1 = 67.6659r2 = 20.1060r3 = 3.7952r1、r2、r3分别表示三次、九次、十五次多项式误差平方和。
最小二乘法曲线拟合_原理及matlab实现
曲线拟合(curve-fitting ):工程实践中,用测量到的一些离散的数据},...2,1,0),,{(m i y x i i =求一个近似的函数)(x ϕ来拟合这组数据,要求所得的拟合曲线能最好的反映数据的基本趋势(即使)(x ϕ最好地逼近()x f ,而不必满足插值原则。
因此没必要取)(i x ϕ=i y ,只要使i i i y x -=)(ϕδ尽可能地小)。
原理:给定数据点},...2,1,0),,{(m i y x i i =。
求近似曲线)(x ϕ。
并且使得近似曲线与()x f 的偏差最小。
近似曲线在该点处的偏差i i i y x -=)(ϕδ,i=1,2,...,m 。
常见的曲线拟合方法:1.使偏差绝对值之和最小2.使偏差绝对值最大的最小3.使偏差平方和最小最小二乘法:按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。
推导过程:1. 设拟合多项式为:k k x a x a a x +++=...)(10ϕ2. 各点到这条曲线的距离之和,即偏差平方和如下:3. 问题转化为求待定系数0a ...k a 对等式右边求i a 偏导数,因而我们得到了:.......4、把这些等式化简并表示成矩阵的形式,就可以得到下面的矩阵:5. 将这个德蒙得矩阵化简后可得到:6. 也就是说X*A=Y,那么A = (X'*X)-1*X'*Y,便得到了系数矩阵A,同时,我们也就得到了拟合曲线。
MATLAB实现:MATLAB提供了polyfit()函数命令进行最小二乘曲线拟合。
调用格式:p=polyfit(x,y,n)[p,s]= polyfit(x,y,n)[p,s,mu]=polyfit(x,y,n)x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。
x 必须是单调的。
矩阵s包括R(对x进行QR分解的三角元素)、df(自由度)、normr(残差)用于生成预测值的误差估计。
在Matlab中最小二乘法计算拟合曲线系数的程序
clear allload('F:\2——学习资料篇\1——专业课资料\测量数据处理程序设计\Matlab中最小法计算程序\datafile.mat') %%加载数据[r,c]=size(data); %%data数据第一列为点序号,第二列为x坐标,第三列为y坐标m=20; %%假设其运行次数,for n=1:m;for i=1:r/2 %%用数据的前半部分计算系数x1=data(i,2);y1=data(i,3);for j=1:n;B1(i,j)=x1^(j-1); %%B矩阵计算endl(i,1)=y1; %%l矩阵endX=inv(B1'*B1)*B1'*l; %%系数矩阵V=B1*X-l;[r1,c1]=size(B1);m0(n,1)=sqrt((V'*V)/(r1-c1)); %%单位权中误差if n>2&&m0(n,1)>=m0(n-1,1); %%判断单位权中误差disp(n)xsgs=n-1; %%单位权中误差最小时其系数的个数zgcs=n-2; %%单位权中误差最小时其x的最高次数break%%如果找到了最优值时跳出循环endendfor i=1:rx2=data(i,2);y2=data(i,3);for k=1:xsgs;B2(i,k)=x2^(k-1);endl2(i,1)=y2;X1=inv(B2'*B2)*B2'*l2; %%计算出最优的系数矩阵endx2=data(:,2);y2=data(:,3);plot(x2,y2,'bo'); %%作出测量点的图形hold ony3(i,1)=0;for i=1:r;for k=1:5;a=X1(k,1)*data(i,2)^(k-1);y3(i,1)=y3(i,1)+a;end%%该循环是将求出的系数代入拟合曲线,验证所有数据endy4=y3(:,1);plot(x2,y4,'r'); %%作出拟合曲线的图形title('最小二乘法拟合图');xlabel('数据');ylabel('拟合');legend('观测数据点','拟合曲线',1); msgbox '计算完毕!';。
用MatLab画图(最小二乘法做曲线拟合)
---------------------------------------------------------------最新资料推荐------------------------------------------------------ 用MatLab画图(最小二乘法做曲线拟合) 用 MatLab 画图(最小二乘法做曲线拟合) 帮朋友利用实验数据画图时,发现 MatLab 的确是画图的好工具,用它画的图比Excel光滑、精确。
利用一组数据要计算出这组数据对应的函数表达式从而得到相应图像,MatLab 的程序如下:x=[1 5 10 20 30 40 60 80] y=[15. 4 33. 9 42. 2 50. 556 62. 7 72 81. 1] plot(x, y, ‘ r*’ ) ; legend(‘ 实验数据(xi, yi) ‘ ) xlabel(‘ x’ ) , ylabel(‘ y’ ) , title(‘ 数据点(xi, yi) 的散点图’ ) syms a1 a2 a3 x=[15 10 20 30 40 60 80]; fi=a1. *x. +a2. *x+a3 y=[15. 4 33.9 42. 2 50. 5 56 62. 7 72 81. 1] fi =[a1+a2+a3,25*a1+5*a2+a2+(400*a1+20*a2+a3-101/2) +(900*a1+30*a2+a3-56) +(1600*a1+40*a2+a3-627/10) +(3600*a1+60*a2+a3-72)+(6400*a1+80*a2+a3-811/10) ; Ja1=diff(J, a1) ;Ja2=diff(J, a2) ; Ja3=diff(J, a3) ; Ja11=simple(Ja1) ,Ja21=simple(Ja2) , Ja31=simple(Ja3) A=[114921252, 1656252, 26052; 1656252, 26052, 492; 26052, 492, 16]; B=[9542429/5, 166129/5, 4138/5]; C=B/A, f=poly2sym(C) xi=[1 5 10 20 3040 60 80] ; y=[15. 4 33. 9 42. 2 50. 5 56 62. 7 72 81. 1]; n=length(xi) ; f=-0. 0086. *xi. +1. 3876. *xi+23. 1078;1 / 6x=1: 1/10: 80; F=-0. 0086. *x. +1. 3876. *x+23. 1078; fy=abs(f-y) ; fy2=fy. ; 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) ‘ , ‘ 拟合曲线f(x) = -0. 0086x +1. 3876x+23. 1078’ ) , xlabel(‘ x’ ) , ylabel(‘ y’ ) , title(‘ 实验数据点(xi, yi) 及拟合曲线f(x) ‘ ) 下图是程序运行后得到的:Su7Tw8VxaW ybXAcZB d#Cf!Eg%FhGj*Ik(Jl-Kn+M o0Np2Or3Ps4R t6Sv7Tw8VxaWzbXAcZBe#Cf! Eg%Fi Gj*Ik)Jl-Kn+Mo1Np2Or3Qs4Rt6Sv7 Uw8Vx aWzbYAc ZBe#Df!Eg%FiHj*Ik) Jm-Kn +Mo1Nq2Or3Qs 5Rt6Sv7Uw9VxaWzbYAdZBe#D f$Eg%F iHj(I k) Jm-Ln+Mo1Nq2Pr3Qs5Ru6S v7Uw9V yaWzbY AdZCe#Df$Eh%FiHj(Il) Jm-Ln0Mo1Nq2Pr4 Qs5Ru6Tv8Uw9VyaXzbYAdZCe !Df$Eh %GiHj (Il) Km-Ln0Mp1Nq2Pr4Qt5Ru 6Tv8U x9VyaXz cYAdZCe! Dg$Eh%Gi*Hj(Il) Km+Ln0M p1Oq2P r4Qt5Su6Tv8Ux9WyaXzcYBdZ Ce!Dg$Fh%Gi* Hk(Il) Km+Lo0Mp1Oq3Pr4Qt5 Su7Tv8Ux9Wyb XzcYBd#Ce!Dg$FhGi*Hk(Jl ) Km+L o0Np1Oq 3Ps4Rt 5Su7Tw8Ux9WybXAcY Bd#Cf!Dg$FhGj*Hk(Jl-Km+Lo0Np2Oq3Ps4 Rt6Su7Tw8Vx9 WybXAcZBd#Cf!Eg$FhGj*Ik (Jl-Kn +Lo0Np2Or3Ps4Rt6Sv7Tw8VxaWybXA cZBe#Cf!Eg%F hGj*Ik) Jl-K n+Mo0Np2Or3Q s4Rt6Sv 7Uw8V xaWzbXAcZBe# D f! Eg%FiGj* Ik) Jm- Kn+Mo1 Nq2Or3Qs5Rt6Sv7Uw9VxaWzb YAcZBe#Df$Eg %FiHj*Ik)---------------------------------------------------------------最新资料推荐------------------------------------------------------ Jm-Ln+Mo1Nq2Pr 3Qs5Ru 6Sv7Uw 9VyaWzbYAdZBe#Df$Eh%FiH j(Ik) J m-Ln0M o1Nq2Pr4Qs5Ru6Tv7Uw9VyaX zbYAdZC e#Df$ Eh%GiHj(Il) Jm-Ln0Mp1Nq2 Pr4Qt5Ru6Tv8 Uw9VyaXzcYAdZCe!Df$Eh%Gi *Hj(Il) Km+Ln 0Mp1Oq2Pr4Qt5Su6Tv8Ux9Vy aXzcYB dZCe!D g$Eh%Gi*Hk(Il) Km+Lo0Mp1O q3Pr4Qt5Su7Tv8Ux9WyaXzc Y Bd#Ce!Dg$Fh %Gi*Hk( Jl) Km +Lo0Np1Oq3Ps 4 Qt5Su7Tw8Ux 9WybXzcYBd#C f!Dg$FhGi*H k (Jl-Km+Lo0N p2Oq3Ps4Rt5S u7Tw8Vx9WybX AcYBd#Cf! Eg$ FhGj*Ik (Jl- Kn+Lo0Np2Or3 P s4Rt6Su7Tw8 VxaWybXA cZBd #Cf!Eg%FhGj * Ik) Jl-Kn+Mo 0Np2Or3Qs4Rt 6Sv7Tw8VxaWz bXAcZBe#Cf!E g%FiGj*Ik) J m-Kn+Mo1Np2O r 3Qs5Rt6Sv7U w8VxaWzbYAcZ Be#Df! Eg%Fi H j*Ik) Jm-Ln+ Mo1Nq2O r3Qs5 Ru6Sv7Uw9Vxa W zbYAdZBe#Df $Eh%Fi Hj(Ik ) Jm-Ln0Mo1Nq 2Pr3Qs5Ru6Tv 7Uw9Vya WzbYA dZCe#Df$Eh%G iHj(Il) Jm-L n0Mp1Nq2Pr4Q s5Ru6Tv8Uw9V ya XzbYAdZCe! Df$Eh%Gi*Hj( Il) Km-Ln0Mp1 Oq 2Pr4 Qt5Ru6Tv8Ux9Vy aXz cYAdZCe!Dg$E h%G i*Hk(Il) K m+Ln0Mp1O q3P r4Qt5Su6Tv8U x9WyaXzcYBd# Ce!Dg$Fh% Gi* Hk(Jl) Km+Lo0 Mp1Oq3Ps4Qt5 Su7Tv8Ux9Wyb XzcYBd#Cf! Dg $F hGi*Hk(Jl -Km+Lo0N p1Oq 3Ps4Rt5Su7Tw 8U x9WybXAcYB d#Cf!Eg$F hG j*Hk(Jl-Kn+Lo0Np2O q3Ps4Rt 6Su7Tw8Vx9WybXAcZBd#Cf!E g%FhGj*Ik(J l-Kn+Mo0Np2O r3Ps4Rt6Sv7T w8Vxa WzbXAcZ Be#Cf! Eg%Fi Gj*Ik) Jl-Kn+ Mo1Np2Or3Qs4 Rt6Sv7Uw8VxaWzbYAcZBe#Df !Eg%FiHj*Ik )3 / 6Jm-Kn+Mo1Nq2Or3Qs5Rt6Sv 7Uw9Vx aWzbYA dZBe#Df$Eg%FiHj(Ik) Jm-L n+Mo1Nq2Pr3Q s5Ru6Sv7Uw9VyaWzbYAdZCe# Df$Eh %FiHj( Il) Jm-Ln0Mo1Nq2Pr4Qs5Ru6 Tv8Uw9VyaXzb YAdZCe!Df$Eh%GiHj(Il) Km -Ln0Mp 1Nq2Pr 4Qt5Ru6Tv8Ux9VyaXzcYAdZC e!Dg$E h%Gi*H j(Il) Km+Ln0Mp1Oq2Pr4Qt5S u6Tv8U x9WyaX zcYBdZCe! Dg$Fh%Gi*Hk(Il) Km+Lo0Mp1Oq3 Pr4Qt5Su7Tv8Ux9WybXzcYBd #Ce!D g$FhGi *Hk(Jl ) Km+Lo0Np1Oq3Ps4R t5Su7Tw8Ux9T v7Uw9VyaXzbYAdZCe#Df$Eh% GiHj( Il) Jm- Ln0Mp1Nq2Pr4Qs5Ru6Tv8Uw9 VyaXzcY AdZCe !Df$Eh%Gi*Hj(Il) Km-Ln0Mp 1Oq2Pr 4Qt5Ru 6Tv8Ux9VyaXzcYBdZCe! Dg$E h%Gi*Hk(Il) K m+Ln0Mp1Oq3Pr4Qt5Su6Tv8U x9WyaX zcYBd# Ce!Dg$Fh%Gi*Hk(Jl) Km+Lo0 Mp1Oq3P s4Qt5 Su7Tw8Ux9Wyb X zcYBd#Cf!Dg $FhGi*Hk(Jl -Km+Lo0Np1Oq3Ps4Rt5Su7Tw 8Vx9Wy bXAcYB d#Cf! Eg$FhGj*Hk(Jl-Kn+L o0Np2O q3Ps4R t6Su7Tw8VxaWybXAcZBd#Cf! Eg%Fh Gj*Ik( Jl-Kn+Mo0Np2Or3Ps4Rt6Sv7 Tw8Vxa WzbXAc ZBe#Cf!Eg%FiGj*Ik) Jl-Kn +Mo1Np2Or3Qs 5Rt6Sv7Uw8Vx a WzbYAcZBe#D f! Eg%FiHj*Ik) Jm-Kn+Mo1 Nq 2Or3Qs5Ru6 Sv7Uw9Vx aWzb YAdZBe#Df$Eg %F iHj(Ik) Jm -Ln+Mo1N q2Pr 3Qs5Ru6Tv7Uw 9VyaWzbYAdZC e#Df$Eh%FiH j(Il) Jm-Ln0M o1Nq2Pr4Qs5R u6Tv8Uw9VyaX zbYAdZCe! Df$ E h%GiHj(Il) Km-Ln0Mp 1Oq2 Pr4Qt5Ru6Tv8 U x9VyaXzcYAd ZCe!Dg$E h%Gi *Hj(Il) Km+Ln 0Mp1Oq3Pr4Qt 5Su6Tv8Ux9Wy aXzcYBdZCe!D g $Fh%Gi*Hk(I l)---------------------------------------------------------------最新资料推荐------------------------------------------------------ Km+Lo0Mp1O q3Ps4Qt5Su7T v 8Ux9WybXzcY Bd#Ce! D g$Fh Gi*Hk(Jl) Km+ L o0Np1Oq3Ps4 Rt5Su7T w8Ux9 WybXAcYBd#Cf !Dg$FhGj*Hk (Jl-Km+ Lo0Np 2Oq3Ps4Rt6Su 7Tw8Vx9WybXA cZBd#Cf ! Eg$F hGj*Ik(Jl-K n+Mo0Np2Or3P s4Rt6Sv 7Tw8V xaWybXAcZBe# C f!Eg% FhGj*Ik) Jl-K n+Mo 1Np2Or3Qs4Rt 6Sv 7Uw8VxaWz bXAcZBe#D f!E g%FiGj*Ik) J m- Kn+Mo1Nq2O r3Qs5Rt6Sv7U w9VxaWzbYAcZ Be#Df$Eg%Fi Hj*Ik) Jm-Ln+ Mo1Nq2Pr3Qs5 Ru6Sv7Uw9Vya WzbYAdZBe#Df $Eh%FiHj(Il ) Jm -Ln0Mo1Nq 2Pr4Qs5Ru 6Tv 7Uw9VyaXzbYA dZCe#Df$Bd#C f! Eg%FhGj*I k(Jl-Kn+Mo0Np2O r3Qs4Rt 6Sv7Tw8VxaWzbXAcZBe#Cf!E g%FiGj*Ik) J l-Kn+Mo1Np2O r3Qs5Rt6Sv7U w8Vxa WzbYAcZ Be#Df! Eg%Fi Hj*Ik) Jm-Kn+ Mo1Nq2Or3Qs5 Ru6Sv7Uw9VxaWzbYAdZBe#Df $Eg%FiHj(Ik ) Jm-Ln0Mo1Nq2Pr3Qs5Ru6Tv 7Uw9Vy aWzbYA dZCe#Df$Eh%FiHj(Il) Jm-L n0Mp1Nq2Pr4Q s5Ru6Tv8Uw9VyaXzbYAdZCe! Df$Eh %GiHj( Il) Km-Ln0Mp1Oq2Pr4Qt5Ru6 Tv8Ux9VyaXzc YAdZCe!Dg$Eh%Gi*Hj(Il) Km +Ln0Mp 1Oq3Pr 4Qt5Su6Tv8Ux9WyaXzcYBdZC e!Dg$F h%Gi*H k(Jl) Km+Lo0Mp1Oq3Ps4Qt5S u7Ts5R u6Sv7U w9VyaWzbYAdZBe#Df$Eh%Fi Hj(Ik)Jm-Ln0 Mo1Nq2Pr4Qs5Ru6Tv7Uw9Vya XzbYA dZCe#Df $Eh%Gi Hj(Il) Jm-Ln0Mp1N q2Pr4Qt5Ru6T v8Uw9VyaXzcYAdZCe!Df$Eh% Gi*Hj( Il) Km- Ln0Mp1Oq2Pr4Qt5Su6Tv8Ux9 VyaXzcY BdZCe !Dg$Eh%Gi*Hk(Il) Km+Ln0Mp 1Oq3Pr4Qt5Su5 / 67Tv8Ux9WyaXzcYBd#Ce! Dg$F h%Gi*Hk (Jl) K m+Lo0Np1Oq3Ps4Qt5Su7Tw8U x9WybX zcYBd# Cf!Dg$FhGi*Hk(Jl-Km+Lo0 Np2Oq3Ps4Rt5 Su7Tw8Vx9WybXAcYBd#Cf!Eg $FhGj*Hk(Jl -Kn+Lo0Np2Or3Ps4Rt6Su7Tw 8VxaWy bXAcZB d#Cf! Eg%FhG j*Ik(Jl-Kn+M o0Np2O r3Qs4R t6Sr4Qt5Su6Tv8Ux9WyaXzcY BdZCe!Dg$Fh% Gi*Hk(Il) Km+Lo0Mp1Oq3Pr4 Qt5Su7Tv8Ux9 WybXzcYBd#Ce! Dg$FhGi*Hk (Jl) Km +Lo0Np 1Oq3Ps4Rt5Su7Tw8Ux9WybXA cYBd#Cf!Dg$FhGj*Hk(Jl- K m+Lo0Np2Oq3 Ps4Rt6Su7Tw8 Vx9WybXAcZBd # Cf!Eg$FhGj *Ik(Jl- Kn+Lo 0Np2Or3Ps4Rt 6Sv7Tw8VxaWy bXAcZBe#Cf!E g%FhGj*Ik) J l-Kn+Mo0Np2O r3Qs4Rt6Sv7U w8VxaWzbXAcZ B e#Df!Eg%Fi Gj*Ik) J m-Kn+ Mo1Nq2Or3Qs5 R t6Sv7Uw9Vxa WzbYAcZB e#Df $Eg%Ff! Dg$Fh Gi*Hk(Jl-Km +Lo0Np1Oq3Ps 4Rt5Su7Tw8Vx 9W ybXAcYBd#C f!Eg$Fh Gj*H k(Jl-Kn+Lo0N p2Oq3Ps4Rt6S u7Tw8Vxa WybX AcZBd#Cf!Eg% F hGj*Ik(Jl- Kn+Mo0N p2Or3 Ps4Rt6Sv7Tw8 V xaWzbXAcZBe #Cf!Eg% FiGj *Ik) Jl-Kn+Mo 1Np2Or3Qs5Rt 6Sv7Uw8V xaWz bYAcZBe#Df!E g%FiHj*Ik) J m-Kn+Mo1Nq2O r3Qs5Ru6Sv7U w9VxaW zbYAdZBe#Df$Eg %Fi Hj(Ik) Jm-Ln +M o1Nq2Pr3Qs 5Ru6Tv7U w9Vy aWzbYAdZCe#D f$Eh%FiHj(I l) Jm-Ln0Mo1N q2Pr4Qs5Or3P s4Rt6Su7Tw8V xaWybXAcZ Be# Cf! Eg%FhGj* I。
最小二乘法曲线拟合的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中,可以使用内置的polyfit函数来实现最小二乘法曲线拟合。
这个函数的基本语法是:```matlabp = polyfit(x, y, n)```其中,x和y分别是数据点的横纵坐标,n是要拟合的多项式次数。
这个函数将返回多项式系数向量p,使得拟合多项式最小化了实际数据点与拟合曲线之间的误差平方和。
举个例子,假设我们有一组数据点(x, y),我们可以使用polyfit函数来进行二次多项式拟合:```matlabx = [1, 2, 3, 4, 5];y = [2, 3, 4, 3, 5];p = polyfit(x, y, 2);```在这个例子中,p将会是一个包含三个元素的向量,分别代表二次多项式的系数a、b和c。
通过这些系数,我们就可以得到拟合的二次多项式方程。
除了使用polyfit函数,我们还可以使用polyval函数来计算拟合曲线上的点。
其基本语法形式是:```matlaby_fit = polyval(p, x)```在这个例子中,p是通过polyfit得到的多项式系数向量,x是我们要计算拟合曲线上的点的横坐标,y_fit将是这些点的纵坐标。
另外,Matlab还提供了许多其他的拟合函数和工具箱,用于不同类型的数据和曲线拟合需求。
通过调用这些函数和工具箱,我们可以实现更复杂的曲线拟合任务,满足不同数据类型和拟合目标的需求。
总结来说,Matlab提供了丰富的工具和函数,用于实现最小二乘法曲线拟合。
通过调用polyfit函数和其他拟合工具箱,我们可以轻松地对一组数据进行曲线拟合,从而得到最能代表数据趋势的曲线。
最小二乘法曲线拟合_原理及matlab实现
曲线拟合(curve-fitting ):工程实践中,用测量到的一些离散的数据},...2,1,0),,{(m i y x i i =求一个近似的函数)(x ϕ来拟合这组数据,要求所得的拟合曲线能最好的反映数据的基本趋势(即使)(x ϕ最好地逼近()x f ,而不必满足插值原则。
因此没必要取)(i x ϕ=i y ,只要使i i i y x -=)(ϕδ尽可能地小)。
原理:给定数据点},...2,1,0),,{(m i y x i i =。
求近似曲线)(x ϕ。
并且使得近似曲线与()x f 的偏差最小。
近似曲线在该点处的偏差i i i y x -=)(ϕδ,i=1,2,...,m 。
常见的曲线拟合方法:1.使偏差绝对值之和最小2.使偏差绝对值最大的最小3.使偏差平方和最小最小二乘法:按偏差平方和最小的原则选取拟合曲线,并且采取二项式方程为拟合曲线的方法,称为最小二乘法。
推导过程:1. 设拟合多项式为:2. 各点到这条曲线的距离之和,即偏差平方和如下:3. 问题转化为求待定系数0a ...k a 对等式右边求i a 偏导数,因而我们得到了: .......4、 把这些等式化简并表示成矩阵的形式,就可以得到下面的矩阵:5. 将这个范德蒙得矩阵化简后可得到:6. 也就是说X*A=Y ,那么A = (X'*X)-1*X'*Y ,便得到了系数矩阵A ,同时,我们也就得到了拟合曲线。
MATLAB 实现:MATLAB 提供了polyfit ()函数命令进行最小二乘曲线拟合。
调用格式:p=polyfit(x,y,n)[p,s]= polyfit(x,y,n)[p,s,mu]=polyfit(x,y,n)x,y 为数据点,n 为多项式阶数,返回p 为幂次从高到低的多项式系数向量p 。
x 必须是单调的。
矩阵s 包括R (对x 进行QR 分解的三角元素)、df(自由度)、normr(残差)用于生成预测值的误差估计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.1 曲线拟合的线性最小二乘法及其MATLAB 程序例3.1.1 给出一组数据点),(i i y x 列入表3-1中,试用线性最小二乘法求拟合曲线,并估计其误差,作出拟合曲线.表3-1 例3.1.1的一组数据),(y x解 (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('例3.1.1的数据点(xi,yi)的散点图')运行后屏幕显示数据的散点图(略).(3)编写下列MATLAB 程序计算)(x f 在),(i i y x 处的函数值,即输入程序>> 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.^3+ a2.*x.^2+ a3.*x+ a4运行后屏幕显示关于a 1,a 2, a 3和a 4的线性方程组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.50 68.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.^2; J=sum(fy.^2)运行后屏幕显示误差平方和如下J=(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)^2+(-4913/1000*a1+289/100*a2-17/10*a3+a4+171/2)^2+(-1331/1000*a1+121/100*a2-11/10*a3+a4+723/20)^2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)^2+(a4+91/10)^2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)^2+(27/8*a1+9/4*a 2+3/2*a3+a4+328/25)^2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/2)^2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)^2为求4321,,,a a a a 使J 达到最小,只需利用极值的必要条件0=∂∂ka J )4,3,2,1(=k ,得到关于4321,,,a a a a 的线性方程组,这可以由下面的MA TLAB 程序完成,即输入程序>> syms a1 a2 a3 a4J=(-125/8*a1+25/4*a2-5/2*a3+a4+1929/10)^2+(-4913/1000*a1+289/100*a2-17/10*a3+a4...+171/2)^2+(-1331/1000*a1+121/100*a2-11/10*a3+a4+723/20)^2+(-64/125*a1+16/25*a2-4/5*a3+a4+663/25)^2+(a 4+91/10)^2+(1/1000*a1+1/100*a2+1/10*a3+a4+843/100)^2+(27/8*a1+9/4*a2+3/2*a3+a4+328/25)^2+(19683/1000*a1+729/100*a2+27/10*a3+a4-13/2)^2+(5832/125*a1+324/25*a2+18/5*a3+a4-1701/25)^2;Ja1=diff(J,a1); Ja2=diff(J,a2); Ja3=diff(J,a3); Ja4=diff(J,a4);Ja11=simple(Ja1), Ja21=simple(Ja2), Ja31=simple(Ja3), Ja41=simple(Ja4),运行后屏幕显示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/625Ja31 =1377283/2500*a1+23667/250*a2+67*a3+18/5*a4-232638/125Ja41 =23667/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, 1377283/2500, 23667/250; 32097579/25000, 1377283/2500, 23667/250, 67; 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*x^3-7988544102557579/562949953421312*x^2+1804307491277693/281474976710656*x-4648521160813215/562949953421312故所求的拟合曲线为8.25746.410214.19055.0911)(23-+-=x x x x f .(4)编写下面的MATLAB 程序估计其误差,并作出拟合曲线和数据的图形.输入程序>> xi=[-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];n=length(xi);f=5.0911.*xi.^3-14.1905.*xi.^2+6.4102.*xi -8.2574;x=-2.5:0.01: 3.6;F=5.0911.*x.^3-14.1905.*x.^2+6.4102.*x -8.2574;fy=abs(f-y); fy2=fy.^2; Ew=max(fy),E1=sum(fy)/n, E2=sqrt((sum(fy2))/n)plot(xi,y,'r*'), hold on, plot(x,F,'b-'), hold offlegend('数据点(xi,yi)','拟合曲线y=f(x)'),xlabel('x'), ylabel('y'),title('例3.1.1的数据点(xi,yi)和拟合曲线y=f(x)的图形')运行后屏幕显示数据),(i i y x 与拟合函数f 的最大误差E w ,平均误差E 1和均方根误差E 2及其数据点),(i i y x 和拟合曲线y =f (x )的图形(略).Ew = E1 = E2 =3.105 4 0.903 4 1.240 93.2 函数)(x r k 的选取及其MATLAB 程序例3.2.1 给出一组实验数据点),(i i y x 的横坐标向量为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),试用线性最小二乘法求拟合曲线,并估计其误差,作出拟合曲线.解 (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('例3.2.1的数据点(xi,yi)的散点图')运行后屏幕显示数据的散点图(略).(3)编写下列MATLAB 程序计算)(x f 在),(i i y x 处的函数值,即输入程序>> syms a bx=[-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(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)];fy=fi-y;fy2=fy.^2;J=sum(fy.^2)运行后屏幕显示误差平方和如下J =(a*exp(17/2*b)-22963/50)^2+(a*exp(87/10*b)-5281/100)^2+(a*exp(71/10*b)-19827/100)^2+(a*exp(34/5*b)-828/5)^2+(a*exp(51/10*b)-5917/100)^2+(a*exp(9/2*b)-2083/50)^2+(a*exp(18/5*b)-648/25)^2+(a*exp(17/5*b)-2237/100)^2+(a*exp(13/5*b)-1347/100)^2+(a*ex p(5/2*b)-1287/100)^2+(a*exp(21/10*b)-1187/100)^2+(a*exp(3/2*b)-669/100)^2+(a*exp(27/10*b)-1487/100)^2+(a*exp(18/5*b)-1211/50)^2为求b a ,使J 达到最小,只需利用极值的必要条件,得到关于b a ,的线性方程组,这可以由下面的MA TLAB 程序完成,即输入程序>> syms a bJ=(a*exp(17/2*b)-22963/50)^2+(a*exp(87/10*b)-5281/100)^2+(a*exp(71/10*b)-19827/100)^2+(a*exp(34/5*b)-828/5)^2+(a*exp(51/10*b)-5917/100)^2+(a*exp(9/2*b)-2083/50)^2+(a*exp(18/5*b)-648/25)^2+(a*exp(17/5*b)-2237/100)^2+(a*exp(13/5*b)-1347/100)^2+(a*exp(5/2*b)-1287/100)^2+(a*exp(21/10*b)-1187/100)^2+(a*exp(3/2*b )-669/100)^2+(a*exp(27/10*b)-1487/100)^2+(a*exp(18/5*b)-1211/50)^2;Ja=diff(J,a); Jb=diff(J,b);Ja1=simple(Ja), Jb1=simple(Jb),运行后屏幕显示J 分别对b a ,的偏导数如下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(27/10*b)-2507/25*exp(18/5*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*e xp(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)^2+8500*a*exp(17/2*b)^2+6800*a*exp(34/5*b)^2-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*ex p(21/10*b)+7100*a*exp(71/10*b)^2+5100*a*exp(51/10*b)^2+4500*a*e xp(9/2*b)^2+7200*a*exp(18/5*b)^2+3400*a*exp(17/5*b)^2+2600*a*ex p(13/5*b)^2+2500*a*exp(5/2*b)^2+1500*a*exp(3/2*b)^2+2700*a*exp(27/10*b)^2+8700*a*exp(87/10*b)^2)用解二元非线性方程组的牛顿法的MATLAB 程序求解线性方程组J a1 =0,J b1 =0,得a = b=2.811 0 0.581 6故所求的拟合曲线(7.13)为0811.2)(=x f e x 5816.0-.(4)编写下面的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=length(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.^2;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('例3.2.1的数据点(xi,yi)和拟合曲线y=f(x)的图形')运行后屏幕显示数据),(i i y x 与拟合函数f 的最大误差E w = 390.141 5,平均误差E 1=36.942 2和均方根误差E 2=106.031 7及其数据点),(i i y x 和拟合曲线y =f (x )的图形(略).3.3 多项式拟合及其MATLAB 程序例3.3.1 给出一组数据点),(i i y x 列入表3–3中,试用线性最小二乘法求拟合曲线,并估计其误差,作出拟合曲线.表3–3 例3.3.1的一组数据),(y x解 (1)首先根据表3–3给出的数据点i i ,用下列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.1219.88];plot(x,y,'r*'), legend('数据点(xi,yi)')xlabel('x'), ylabel('y'),title('例3.3.1的数据点(xi,yi)的散点图')运行后屏幕显示数据的散点图(略).(3)用作线性最小二乘拟合的多项式拟合的MATLAB 程序求待定系数k a )3,2,1(=k .输入程序>> a=polyfit(x,y,2)运行后输出(7.16)式的系数a =2.8302 -7.3721 9.1382故拟合多项式为2138.91372.72830.2)(2+-=x x x f .(4)编写下面的MATLAB 程序估计其误差,并做出拟合曲线和数据的图形.输入程序>> 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.12 19.88];n=length(xi); f=2.8302.*xi.^2-7.3721.*xi+9.1382x=-2.9:0.001:3.6;F=2.8302.*x.^2-7.3721.*x+8.79;fy=abs(f-y); fy2=fy.^2; 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('例3.3.1 的数据点(xi,yi)和拟合曲线y=f(x)的图形')运行后屏幕显示数据),(i i y x 与拟合函数f 的最大误差E w ,平均误差E1和均方根误差E 2及其数据点(x i ,y i )和拟合曲线y =f (x )的图形(略).Ew = E1 = E2 =0.745 7, 0.389 2, 0.436 33.4 拟合曲线的线性变换及其MATLAB 程序例3.4.1 给出一组实验数据点),(i i y x 的横坐标向量为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),试用线性变换和线性最小二乘法求拟合曲线,并估计其误差,作出拟合曲线.解 (1)首先根据给出的数据点),(i i y x ,用下列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.87 11.87 6.69 14.87 24.22];plot(x,y,'r*'), legend('数据点(xi,yi)')xlabel('x'), ylabel('y'),title('例3.4.1的数据点(xi,yi)的散点图')运行后屏幕显示数据的散点图(略).(2)根据数据散点图,取拟合曲线为a y =e bx )0,0(≠>b a ,其中b a ,是待定系数.令b B a A y Y ===,ln ,ln ,则(7.19)化为Bx A Y +=.在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('例3.4.1 的数据点(xi,yi)和拟合曲线y=f(x)的图形')fy=abs(f-y); fy2=fy.^2; Ew=max(fy), E1=sum(fy)/n,E2=sqrt((sum(fy2))/n)运行后屏幕显示a y =e bx 的系数b =0.624 1,a =2.703 9,数据),(i i y x 与拟合函数f的最大误差Ew =67.641 9,平均误差E 1=8.677 6和均方根误差E 2=20.711 3及其数据点),(i i y x 和拟合曲线9703.2)(=x f e x 1624.0的图形(略).3.5 函数逼近及其MATLAB 程序最佳均方逼近的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;例3.5.1 对数据X 和Y , 用函数2,,1x y x y y ===进行逼近,用所得到的逼近函数计算在 6.5=x 处的函数值,并估计误差.其中X =(1 3 4 5 6 7 8 9); Y =(-11 -13 -11 -7 -1 7 17 29).解 在MATLAB 工作窗口输入程序>> X=[ 1 3 4 5 6 7 8 9]; Y=[-11 -13 -11 -7 -1 7 17 29];f=['fun0';'fun1';'fun2']; [yy,a,WE]=zjjfbj(f,X,Y,6.5)运行后屏幕显示如下yy =2.75000000000003a =-7.00000000000010 -4.99999999999995 1.00000000000000WE =7.172323350269439e-027例3.5.2 对数据X 和Y ,用函数2,,1x y x y y ===,x y cos =,=y e x,xy sin =进行逼近,其中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).解 在MATLAB 工作窗口输入程序>> 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=['fun0';'fun1';'fun2';'fun3';'fun4';'fun5'];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.8348 0.9236Columns 8 through 140.9771 0.9926 0.9691 0.9069 0.8080 0.6766 0.5191Columns 15 through 160.3444 0.1642a = 0.3828 0.4070 -0.3901 0.0765 -0.4598 0.5653 WE = 1.5769e-004即,最佳逼近函数为y=0.3828+0.4070*x-0.3901*x^2+0.0765*exp(x) -0.4598*cos(x) +0.5653*sin(x).。