CC20020419 2023-06-23 19:45 采纳率: 85%
浏览 40
已结题

数值计算方法拟合问题

img


像这种非线性拟合用正则法该如何实现呢,正则化方法确定拟合曲线

  • 写回答

3条回答 默认 最新

  • PhoenixRiser 2023-06-23 20:07
    关注

    TechWhizKid参考GPT回答:

    用正则化方法来缓解这个问题。

    • 先设置一个正则化参数λ,用MATLAB的优化工具箱来解决这个问题。用 fminunc 或 fmincon 函数来找到最小化代价函数的参数。将选择 fmincon ,因为它允许为参数设置约束条件,这在某些情况下可能是有用的。

    用MATLAB进行这个拟合的代码:

    % 数据初始化
    i = [0, 1, 2, 3, 4, 5];
    xi = [0.1, 0.3, 0.5, 0.6, 0.7, 0.9];
    yi = [0.61, 0.92, 1.12, 1.52, 1.47, 2.04];
    
    % 初始猜测值
    a0 = [1, 1, 1, 1];
    
    % 定义正则化参数
    lambda = 0.01;
    
    % 定义代价函数,加入lambda作为参数
    cost_function = @(a, lambda)sum((yi - (a(1) + a(2)*xi + a(3)*sin(xi) + a(4)*exp(xi))).^2) + lambda*sum(a.^2);
    
    % 使用fmincon进行拟合
    options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
    a = fmincon(@(a)cost_function(a, lambda), a0, [], [], [], [], [], [], [], options);
    
    % 输出结果
    disp(a);
    
    % 画出原始数据点
    figure;
    plot(xi, yi, 'o');
    
    % 持有当前图像,以便在同一图像上添加拟合曲线
    hold on;
    
    % 画出拟合曲线
    x = linspace(0, 1, 100); % 创建x值的向量,用于画拟合曲线
    y = a(1) + a(2)*x + a(3)*sin(x) + a(4)*exp(x); % 计算对应的y值
    plot(x, y, 'r-');
    
    % 添加图例和标题
    legend('原始数据', '拟合曲线');
    title('数据拟合结果');
    
    % 结束持有状态
    hold off;
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月1日
  • 已采纳回答 6月23日
  • 创建了问题 6月23日

悬赏问题

  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符