多项式函数的参数辨识系统

题目

1.基本要求:
[1]编写多项式函数的参数辨识系统,多项式函数的形式为:y = a0 + a1·x + a2·x2 + …+ an·xn式中,x为自变量 (xmin≤x≤xmax),y为因变量,a0, a1, a2, …, an为多项式的系 数,n为多项式的次数。
[2]每个多项式包括以下信息:多项式名称(根据n的值命名, 如2次多项式、3次多项式,… )、自变量的上限 xmax和下 限xmin,多项式的次数(C++)即n的值)、多项式系 数的 真实值a0, a1, a2, …, an,多项式系数的辨识结果:a’0, a’1, a’2, …, a’n、辨识结果的评价指标。
2.基本管理功能:
[1]多项式基本信息的输入:从键盘输入多项式的次数、自变
量的上限和下限,以及多项式系数的真实值。
[2]样本数据的产生、保存与读取:根据输入的多项式信息,在 [xmin, xmax]范围内均匀产生50个x值,利用公式(C++)3)得到 对 应的50个y值,并 给每个y值产生一点随机的扰动 (即 利用C++中的 随机函数产生一点扰动 ,叠加到 原来 的y值上)。将其保存在硬盘(C++)以数据库文件或普通文 本文件的形式),需要时可以从硬盘将数据读取出来。
[3]参数辨识:根据多项式所产生的数据(50组), 利用最小 二乘法辨识多项式系数a’0, a’1, a’2, …, a’n。(这一部分内容 需要自己查阅参数辨识、最小二乘法等知识的相关资料,并 进行编程)。
[4]多项式值的估计值:在[xmin, xmax]范围内随机产生50个x 值,根据a0, a1, a2, …, an和a’0, a’1, a’2, …, a’n,计算多项式的 真实值y和估计值y’(各有50个值),即:y = a0 + a1·x + a2·x2 + …+ an·xny’ = a’0 + a’1·x + a’2·x2 + … + a’n·xn
[5]参数辨识结果评价:根据计算得到的50个y和y’,计算它们 的均方差,作为对参数辨识结果的评价指标。(均方差的计 算自己查阅文献)
[6]查询与输出功能:可以按多项式名称该多项式的信息,并按 一定的格式将其输出。

核心代码

最小二乘法原理和实现

https://blog.csdn.net/shuzfan/article/details/52367329

需要使用Eigen库,类似opencv部属。

https://blog.csdn.net/weixin_44438749/article/details/104967836

核心代码

主函数是简单的显示

#include <iostream>
#include <vector>
#include "data.h"
#include "least_square_method.h"
#include "contrast.h"
void menu()
{
    system("cls");
    cout << "**********************************************" << endl;
    cout << "**           欢迎使用最小二乘系统           **" << endl;
    cout << "**                  菜 单                   **" << endl;
    cout << "**            (a)全部过程体验               **" << endl;
    cout << "**            (b)输入真实数据               **" << endl;
    cout << "**            (c)保存随机数据               **" << endl;
    cout << "**            (d)导入上次数据               **" << endl;
    cout << "**            (e)显示当前数据               **" << endl;
    cout << "**            (f)最小二乘拟合               **" << endl;
    cout << "**            (g)参数拟合结果评价           **" << endl;
    cout << "**            (g)退出系统                   **" << endl;
    cout << "**********************************************" << endl;
    cout << "请选择相应的操作 a~h" << endl;
}
//退出页面 
void exit()
{
    system("cls");
    cout << "**********************************************" << endl;
    cout << "**              感谢使用本系统              **" << endl;
    cout << "**                 谢谢老师                 **" << endl;
    cout << "**                   再见                   **" << endl;
    cout << "**********************************************" << endl;
    cout << "按任意键关闭本页面..." << endl;
    cout << "";
    getchar();
    getchar();
}

int main()
{
    class data m_data;
    lsm m_lsm;
    while (1) {
        menu();
        char c = getchar();
        if (c == 'a') {
            m_data.in_x_n_a();
            m_data.d();
            m_lsm=lsm(m_data);
            contrast m_contrast(m_data, m_lsm);
            cout << m_contrast;
        }
        if (c == 'b') {
            m_data.in_x_n_a();
            m_data.d();
            cout << "数据已经输入" << endl;
        }
        if (c == 'c') {
            m_data.save("out.txt");
            cout << "数据已经保存" << endl;
        }
        if (c == 'd') {
            m_data.read("out.txt");
            cout << "数据已经写入" << endl;
        }
        if (c == 'e') {
            m_data.show();
        }
        if (c == 'f') {
            m_lsm = lsm(m_data);
        }
        if (c == 'g') {
            contrast m_contrast(m_data, m_lsm);
            cout << m_contrast;
        }
        if (c == 'h') {
            exit();
            return 0;
        }
        cout << "按任意键继续..." << endl;
        getchar();
        getchar();
    }
    return 0;
}

接下来三个类实现基本数据输入、最小二乘拟合、以及结果对比。

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

传送门

https://download.csdn.net/download/renzemingcsdn/85424209

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清欢_小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值