卡尔曼滤波实现多项式拟合Matlab


%%%%%%%%%%%%%Q3:多项式系数估计%%%%%%%%%%%%%%%%
%%%%%%%%%%2016/07/21%%%%%%%%%%%%%%%%%%%

clc;clear;
N=10;%样本个数输入
Order=1;%函数阶次输入
M=5;%绘制每M分之1个过程的观测结果曲线
X=linspace(1,N,N);%时间向量

for i=1:(Order+1)
    %构造以N/2为对称轴的Order阶函数,计算各阶次系数
    X_0(i)=nchoosek(Order,i-1)*(-N/2)^(i-1);
end

C=cell(N,1);
X_noise=(N/10)^Order*randn(1,N);%白噪声

%%%%%%%%%%%构造离散点%%%%%%%%%%%%%%%%%%%%
for i=1:N
    temp=0;
    for j=1:(Order+1)
        temp(j)=X(i)^(Order-j+1);
    end
    C{i}=temp;
    Y(i)=C{i}*X_0‘+X_noise(i);
end
%%%%%%%%%%%状态估计初始值%%%%%%%%%%%%%%%%
X_estimate=cell(N,1);
X_estimate1=0;
for i=1:(Order+1)
    X_estimate{1}(i)=0;
end
X_estimate{1}=X_estimate{1}‘;
P_estimate=cell(N,1);
P_estimate1=0;
P_estimate{1}=eye(Order+1);

temp=P_estimate{1};
for i=1:(Order+1)
    std{i}(1)=temp(i,i);%std为多项式Order+1个系数方差数组,由协方差矩阵对角线元素(自相关系数)取得
end

%%%%%%%%%%%%过程误差及测量误差方差%%%%%%%%%%%%%%%%
R=1;
Q=0;

%%%%%%%%%%%%%%迭代过程%%%%%%%%%%%%%%%%%
for k=2:N

    X_estimate1=X_estimate{k-1};
    P_estimate1=P_estimate{k-1}+Q;
    Kk=P_estimate1*C{k}‘*[C{k}*P_estimate1*C{k}‘+R].^-1;
    X_estimate{k}=X_estimate1+Kk*(Y(k)-C{k}*X_estimate1);
    P_estimate{k}=(eye(Order+1)-Kk*C{k})*P_estimate1;

    %%%计算各系数方差%%%
    temp=P_estimate{k};
    for i=1:(Order+1)
        std{i}(k)=temp(i,i);
    end
end

%%%cell结构的转化,得各阶系数计算结果%%%
legend_str1=cell(1,Order+1);
legend_str1{1}=[‘Measured Value‘];
figure(1);hold on
estimate=cell(M,1);
plot(X,Y,‘v‘,‘linewidth‘,1);
for  z=1:M
    result=X_estimate{N-N/10*(M-z)}

    %%%以各阶系数最终计算结果计算多项式估计值%%%
    for i=1:N
        temp=0;
        for j=1:(Order+1)
            temp(j)=X(i)^(Order-j+1);
        end
        C{i}=temp;
        estimate{z}(i)=C{i}*result;
    end
    %%%绘制测量值与估计值%%%
    legend_str1{z+1}=[‘Estimate(‘,num2str(N-N/10*(M-z)),‘)‘];

    if  z==M
        plot(X,estimate{z},‘linewidth‘,2);
    else
        plot(X,estimate{z},‘-.‘,‘linewidth‘,1.5);
    end
end

legend(legend_str1);
title(‘Kalman Filter for Polynomial Coefficient‘,‘fontsize‘,16);
str=[‘Order=‘,num2str(Order),‘;N=‘,num2str(N)];
text(N/10,Y(N/10)*1.5,str,‘fontsize‘,16);
hold off

%%%各阶系数方差变化曲线%%%
figure(2);
hold on
legend_str2=cell(1,Order+1);
for i=1:(Order+1)
    legend_str2{i}=[‘Std of a(‘,num2str(i),‘)‘];
    plot(X,std{i},‘-.‘,‘linewidth‘,2);
end
title(‘Std of Polynomial Coefficient with Estimating‘,‘fontsize‘,16);
legend(legend_str2);
hold off
时间: 2024-10-18 04:34:45

卡尔曼滤波实现多项式拟合Matlab的相关文章

Matlab多项式拟合测试

x=0:0.2:4; %生成等差数列 rnd=rand(1,size(x,2))*5; %生成一组随机数 y=x.*x.*x+x.*x+6+rnd; %生成y=x^3+x^2+6函数在垂直方向5个尺度内的随机采样序列 b=polyfit(x,y,3); %计算多项式拟合参数 yy=polyval(b,x); %生成拟合后y函数的新值 hold on,plot(x,y,'o'),plot(x,yy); %hold开关打开用于画在同一张图上,前者画散点,后者话拟合曲线. [效果图]:

Matlab多项式拟合測试

x=0:0.2:4; %生成等差数列 rnd=rand(1,size(x,2))*5; %生成一组随机数 y=x.*x.*x+x.*x+6+rnd; %生成y=x^3+x^2+6函数在垂直方向5个尺度内的随机採样序列 b=polyfit(x,y,3); %计算多项式拟合參数 yy=polyval(b,x); %生成拟合后y函数的新值 hold on,plot(x,y,'o'),plot(x,yy); %hold开关打开用于画在同一张图上,前者画散点,后者话拟合曲线. [效果图]:

matlab多项式拟合以及指定函数拟合

clc;clear all;close all;%% 多项式拟合指令:% X = [1 2 3 4 5 6 7 8 9 ];% Y = [9 7 6 3 -1 2 5 7 20]; % P= polyfit (X,Y,3);% % x = 0:2:10;% y = polyval(P,x);% plot(x,y,X,Y,'r*');%% 指定函数拟合 x=[ 0;0.4;1.2; 2;2.8;3.6;4.4;5.2; 6;7.2; 8;9.2;10.4;11.6;12.4;13.6;14.4;1

机器学习-统计学习方法中多项式拟合偏导函数推导

最近在学机器学习,看了Andrew Ng 的公开课,同时学习李航博士的 <统计学习方法>在此记录. 在第十二页有一个关于多项式拟合的问题.此处,作者直接给出了所求的的偏导.这里做一下详细推导. , 此处函数模型的求偏导问题,首先看一下偏导的定义 因为此处是,所以除了Wj 外的Xi,Yi 都可以视作常数.对此求解. 推导后我们会发现所得出的公式与作者给出的答案不同 ,不过作者也给出了更正的勘误 但是我们发现还是和我推导出的答案不同.作者分母下的x上标为j+1,而我推导出的上标为2j,参考作者的勘

多项式拟合

来源:同登科 <计算方法> 中国石油大学出版社 P106 *何为拟合? 从给定的函数表出发,寻找一个简单合理的函数近似表达式来拟合给定的一组数据. 这里所说的“拟合”,即不要所作的曲线完全通过所有的Σ数据点,只要求所得的近似曲线能反映数据的基本趋势.数据拟合在实际中有广泛的应用. 它的实质是离散情况下的最小平方趋近,基本思想和处理方法也具有相似性.其几何解释是:求一条曲线,使数据点均在离此曲线的上方或下方不远处. *多项式拟合 设由实验测得函数y=f(x)在n个点x1 ,x2,...,xn的值

用最小二乘法进行多项式拟合

利用最小二乘法进行多项式拟合时,最终归结为求解一个关于a1, a2, a3, ..., an的线性方程组,其矩阵表示如下: 求解该方程组的方法有两种. 其一,用高斯消元法,解方程组. 其二,用矩阵运算,X*A=Y,则A=X^-1*Y.

polyfit 多项式曲线拟合matlab

polyfit 多项式曲线拟合 全页折叠 语法 p = polyfit(x,y,n) [p,S] = polyfit(x,y,n) [p,S,mu] = polyfit(x,y,n) 说明 示例 p = polyfit(x,y,n) 返回阶数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中).p 中的系数按降幂排列,p 的长度为 n+1 p(x)=p1xn+p2xn−1+...+pnx+pn+1. [p,S] = polyfit(x,y,n) 还返回一个结构体

用python的numpy作线性拟合、多项式拟合、对数拟合

转自:http://blog.itpub.net/12199764/viewspace-1743145/ 项目中有涉及趋势预测的工作,整理一下这3种拟合方法:1.线性拟合-使用mathimport mathdef linefit(x , y):    N = float(len(x))    sx,sy,sxx,syy,sxy=0,0,0,0,0    for i in range(0,int(N)):        sx  += x[i]        sy  += y[i]        s

Python 普通最小二乘法(OLS)进行多项式拟合

多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法: import numpy as np import pandas as pd #import statsmodels.api as sm #方法一 import statsmodels.formula.api as smf #方法二 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D df = pd.read_c