数值分析 最小二乘 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}=\ ...
随机推荐
- RSA实现前端数据加密
一.前言 一般在登录注册的时候,不能以明文的方式传递数据到后台,如果是http下,很容易被劫持.所以对数据进行加密是常规做法. 二.RSA算法 ”RSA加密算法是一种非对称加密算法.对极大整数做因数分 ...
- vue-router 知识点记录
vue-router参数传递 1.在vue-router中,有两大对象被挂载到了实例this2.$route(只读.具备信息的对象).$router(具备函数功能).例:获取query用 this ...
- [转]使用C#调用cmd来执行sql脚本
本文转自:https://blog.csdn.net/tvmerp/article/details/1822669 下面是使用C#调用cmd来执行osql实现脚本的执行. using System; ...
- ASP.NET开发,从二层至三层,至面向对象 (3)
继续上一篇<ASP.NET开发,从二层至三层,至面向对象 (2)>http://www.cnblogs.com/insus/p/3825805.html .我们学会了怎样创建对象,把Biz ...
- windows下给redis添加密码
在redis的安装目录下找到 redis.windows-service.conf 文件.用文本编辑器打开, 找到requirepass所在行,回车另起一行,输入requirepass 你的密码, # ...
- mysql建表以及列属性
一.整型( int, tinyint, smallint 等 ) ------------------------------------------------------------------- ...
- layui table 行号
{type: 'numbers', title: '序号', width: '80'}
- element-ui Steps步骤条组件源码分析整理笔记(九)
Steps步骤条组件源码: steps.vue <template> <!--设置 simple 可应用简洁风格,该条件下 align-center / description / ...
- gis cad导出弧段在arcmap下 不准问题
我发现cad 的图形导出到arcmap下会出现各种各样的丢失问题,特别是cad的弧段在arcmap下会弯曲(弧度指向另外一边). 那么应该怎么解决这个问题呢?后来想到FME可以高效的还原cad的图形, ...
- IIS8发布Asp.net MVC程序后出现404错误,处理程序staticFile
新部署的虚拟机,运行Asp.net MVC程序,出现如下图错误: 解决方法: 添加功能和角色->添加角色->Web服务器IIS->应用程序开发->Asp.net3.5 /Asp ...