数值分析 最小二乘 matlab
1. 已知函数在下列各点的值为
|
-1 |
-0.75 |
-0.5 |
0 |
0.25 |
0.5 |
0.75 |
|
|
1.00 |
0.8125 |
0.75 |
1.00 |
1.3125 |
1.75 |
2.3125 |
分别用一次、二次、三次最小二乘拟合多项式拟合上述数据,画出所给数据和所求最小二乘拟合多项式的图像。
程序:
function f=multifit(x,y,wfunc,n)
syms t
%x,y为给定数据数组,wfunc为权函数,n为要求拟合多项式的次数
N=length(x);
M=length(y);
if(N ~= M)
disp('x与y维数不匹配');
return;
end
var = findsym(sym(wfunc));
w = subs(wfunc,'var',x);
g(1:(2*n+1))=0;
b(1:(n+1))=0;
for j=1:(2*n+1)
for k=1:N
g(j)=g(j)+w(j)*x(k)^(j-1);
if(j<(n+2))
b(j)=b(j)+w(j)*y(k)*x(k)^(j-1);
end
end
end
G(1,:)=g(1:(n+1));
for i=2:(n+1)
G(i,:)=g(i:(n+i));
end
coff=b'\G;
f = coff(1);
l = 1;
for i=1:n
l = l*t;
f = f+coff(i+1)*l;
end
一维:
x=[-1 -0.75 -0.5 0 0.25 0.5 0.75];
y=[1.00 0.8125 0.75 1.00 1.3125 1.75 2.3125];
plot(x,y)
hold on
w=ones(1,7);
syms t
f=multifit(x,y,w,1)
t=-1:0.02:1;
tf=subs(f,'t',t);
plot(t,tf)
f =
1723890370956185/2251799813685248 - (923516587282913*t)/18014398509481984
二维:
f =
(2832971806309577*t^2)/9007199254740992 - (5864710038001133*t)/72057594037927936 + 6907316203181555/9007199254740992
三维:
f =
- (8450352688460543*t^3)/72057594037927936 + (89154935708507*t^2)/281474976710656 - (6164715222057551*t)/72057594037927936 + 6924830714825963/9007199254740992
2. 已知一组实验数据如下,
|
2 |
3 |
6 |
9 |
10 |
|
|
-0.5 |
1.2 |
3.1 |
4.5 |
7.3 |
|
|
0.125 |
0.125 |
0.25 |
0.125 |
0.375 |
求拟合上述数据的二次最小二乘拟合多项式。
主程序:
x=[2 3 6 9 10];
y=[-0.5 1.2 3.1 4.5 7.3];
w=[0.125 0.125 0.25 0.125 0.375];
plot(x,y)
hold on
syms t
f=multifit(x,y,w,2)
t=2:0.1:10;
tf=subs(f,'t',t);
plot(t,tf)
legend('已知点','拟合')
图像:
f =
(8318828653518565*t^2)/562949953421312 + (7344269211390441*t)/4503599627370496 + 6836208550152757/36028797018963968
3. 设,分别求次数为2,3,6,8的多项式,使得
达到最小,并画出和的曲线进行比较。
程序:
function f = Legendre(func,n)
%求函数在[-1,1]的关于权函数为1的n次最佳平方逼近多项式f,并计算插值多项式f在数据点x0的函数值f0
syms t;
P(1:n+1) = t;
P(1) = 1;
P(2) = t;
c(1:n+1) = 0.0;
c(1)=int(subs(func,findsym(sym(func)),sym('t'))*P(1),t,0,1)/2;
c(2)=3*int(subs(func,findsym(sym(func)),sym('t'))*P(2),t,0,1)/2;
f = c(1)+c(2)*t;
for i=3:n+1
P(i) = ((2*i-3)*P(i-1)*t-(i-2)*P(i-2))/(i-1);
c(i) = (2*i-1)*int(subs(func,findsym(sym(func)),t)*P(i),t,0,1)/2;
f = f + c(i)*P(i);
if(i==n+1)
f = vpa(f,6);
end
end
n=2:
syms x
fun=sin(pi*x);
t=0:0.1:1;
tf=subs(fun,'x',t);
plot(t,tf)
hold on
f = Legendre(fun,2)
f2=subs(f,'t',t);
plot(t,f2)
f =
- 0.128828*t^2 + 0.477465*t + 0.361253
N=3:
f =
0.863545*t - 0.19304*t*(7.5*t^2 - 2.5) - 0.128828*t^2 + 0.361253
N=6:
f =
0.922023*t - 0.222279*t*(7.5*t^2 - 2.5) - 0.021929*t*(2.25*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 10.125*t^2 - 3.375) - 0.0383952*t*(2.93333*t*(7.5*t^2 - 2.5) - 5.86667*t + 2.2*t*(2.25*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 10.125*t^2 - 3.375)) + 0.144211*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 0.52012*t^2 + 0.144936
N=8:
f =
0.925827*t - 0.224181*t*(7.5*t^2 - 2.5) - 0.0233554*t*(2.25*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 10.125*t^2 - 3.375) - 0.0568912*t*(2.93333*t*(7.5*t^2 - 2.5) - 5.86667*t + 2.2*t*(2.25*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 10.125*t^2 - 3.375)) + 0.0158537*t*(6.85714*t - 3.42857*t*(7.5*t^2 - 2.5) - 2.57143*t*(2.25*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 10.125*t^2 - 3.375) + 2.14286*t*(2.16667*t*(2.93333*t*(7.5*t^2 - 2.5) - 5.86667*t + 2.2*t*(2.25*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 10.125*t^2 - 3.375)) - 2.70833*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) - 12.1875*t^2 + 4.0625)) + 0.167331*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 0.62416*t^2 + 0.00118873*t*(2.16667*t*(2.93333*t*(7.5*t^2 - 2.5) - 5.86667*t + 2.2*t*(2.25*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) + 10.125*t^2 - 3.375)) - 2.70833*t*(4.66667*t - 2.33333*t*(7.5*t^2 - 2.5)) - 12.1875*t^2 + 4.0625) + 0.110256
数值分析 最小二乘 matlab的更多相关文章
- 8、数值分析与matlab
1.今天要拷matlab代码了,而且是很恶心的算法,估计也没几个人能看得懂,就连我自己都看不懂. 我也不知道这样做的意义何在,可能只是证明我在这世上曾经学过那么那么难的东西吧 首先是一个matlab版 ...
- 最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)
1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...
- 最小二乘法拟合非线性函数及其Matlab/Excel 实现
1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*r ...
- matlab练习程序(最小二乘多项式拟合)
最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错. 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料. 这个文档介绍的还不错,我估计任何一本 ...
- 【数值分析】误差的分析与减少及Matlab解线性方程的四种方法
1.误差的来源 模型误差:数学模型与实际问题之间的误差 观测误差:测量数据与实际数据的误差 方法误差:数学模型的精确解与数值方法得到的数值解之间的误差:例如 舍入误差:对数据进行四舍五入后产生的误差 ...
- matlab练习程序(加权最小二乘)
起本篇题目还是比较纠结的,原因是我本意打算寻找这样一个算法:在测量数据有比较大离群点时如何估计原始模型. 上一篇曲面拟合是假设测量数据基本符合均匀分布,没有特别大的离群点的情况下,我们使用最小二乘得到 ...
- [matlab] 21.灰色预测、线性回归分析模型与最小二乘回归 (转载)
灰色预测的主要特点是只需要4个数据,就能解决历史数据少,序列的完整性以及可靠性低的问题,能将无规律的原始数据进行生成得到规律性较强的生成序列,易于检验 但缺点是只适合中短期的预测,且只适合指数级增长的 ...
- 数值分析实验之曲线最小二乘拟合含有噪声扰动(python实现)
一.实验目的 掌握最小二乘法拟合离散数据,多项式函数形式拟合曲线以及可以其他可以通过变量变换转化为多项式的拟合曲线目前待实现功能: 1. 最小二乘法的基本实现. 2. 用不同数据量,不同参数,不同的多 ...
- 数值分析:最小二乘与岭回归(Pytorch实现)
Chapter 4 1. 最小二乘和正规方程 1.1 最小二乘的两种视角 从数值计算视角看最小二乘法 我们在学习数值线性代数时,学习了当方程的解存在时,如何找到\(\textbf{A}\bm{x}=\ ...
随机推荐
- docker-部署elk-6.1.3
1.更新daocker版本 2.pull官方的镜像 https://www.elastic.co/guide/en/elasticsearch/reference/6.1/docker.html ht ...
- POJ 1679 The Unique MST(判断最小生成树是否唯一)
题目链接: http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its min ...
- oc for in遍历
在oc中用for in遍历可变数组时,不能修改删除新增元素,因为for in遍历是枚举遍历,在遍历的过程中不能修改容器里的值. NSMutableArray *arr=[NSMutableArray ...
- Random类的常用方法
1.nextBoolean(): 随机返回true或false 2.nextInt(int bound): 随机返回0到bound之间的整数(不包括bound) 如:nextInt(10)返回0-9之 ...
- Three.js开发指南---使用three.js的材质(第四章)
材质就像物体的皮肤,决定了几何体的外表,例如是否像草地/金属,是否透明,是否显示线框等 一 材质 THREE.js的材质分为多种,Three.js提供了一个材质基类THREE.Material, 该基 ...
- Python标准库--UUID
UUID(Universally Unique Identifier)是128位通用唯一识别码,通常由32字节的字符串表示.它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Uni ...
- python的变量以及常量介绍
变量概念: 把程序运行过程中产生的中间值保存在内存. 方便后面使用. 命名规范: 1. 数字, 字母, 下划线组成 2. 不能数字开头, 更不能是纯数字 3. 不能用关键字 4. 不要用中文 5. 要 ...
- Javascript经典算法学习1:产生随机数组的辅助类
辅助类 在几个经典排序算法学习部分,为方便统一测试不同算法,新建了一个辅助类,主要功能为:产生指定长度的随机数组,提供打印输出数组,交换两个元素等功能,代码如下: function ArraySort ...
- OSGI企业应用开发(十一)Bundle资源获取途径
使用OSGI模块化标准构建Java EE项目,其中比较繁琐的一个方面就是Bundle资源的获取,因为很多开源框架官方都没有发布Bundle版本的Jar文件,这也是使用OSGI开发企业应用首先要解决的问 ...
- EditText的焦点问题
问题说明: activity中有个三级菜单,三个ListView嵌套,最后一层ListView的item中有EditText控件.要求EditText不仅能手动输入,还能点击加减进行改变.EditTe ...