士郎小天使 2021-09-29 15:56 采纳率: 78.9%
浏览 114
已结题

matlab中进行函数拟合,约束条件为定积分要如何编写

我有一组数(x,y),然后对其进行多项式拟合,式子就为这种普通的多项式

img


但是我想加一项约束条件,就是算出来的多项式在0到40的积分为1,我看matlab中的约束条件全是大于小于这种,如何写积分形式的约束条件

  • 写回答

2条回答 默认 最新

  • joel_1993 2021-09-29 19:12
    关注

    给定积分区间之后,就可以这么做

    x = [0:5:40]; % x自己设置
    y = pi/80*sin(1/40*pi*x)+(rand(size(x))-0.5)*pi/80*1/2;% y自己设置,我这里是在正弦函数上加了个随机浮动
    n = 3; % n自己设置
    x = x(:);
    y = y(:);
    S = zeros(length(x), n+1);
    q = ones(length(x),1);
    S(:,n+1)=q;
    for i = n:-1:1
        q = q.*x;
        S(:,i) = q;
    end
    A = S'*S;
    b = S'*y;
    a = A\b;%最小二乘
    G = 1./(n+1:-1:1).*40.^(n+1:-1:1); % 
    aa = [A, G'; G, 0]\[b;1];%拉格朗日乘子法
    plot(x,y,'r--o')
    hold on 
    plot(x,polyval(a,x),'bs-')
    plot(x,polyval(aa(1:end-1),x),'g*-')
    legend('拟合前','拟合后(不考虑积分为1)','拟合后(考虑积分为1)')
    

    img


    多项式拟合效果图

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月9日
  • 已采纳回答 10月1日
  • 赞助了问题酬金 9月30日
  • 修改了问题 9月29日
  • 展开全部

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵