You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现连续回归?Matlab下ln(x)回归问题排查求助

解决Matlab中ln(x)在子空间<1,x,x²>上连续与离散回归的问题

我帮你排查了代码里的几个关键问题,咱们一步步梳理并修正:

一、连续回归的核心问题

你直接用V\f做符号除法,这并不是连续最小二乘回归的正确实现方式。连续回归需要基于**内积(积分)**计算Gram矩阵和右端向量,再求解线性方程组得到拟合系数——毕竟连续空间的最小二乘是要最小化积分误差,不是直接做符号运算。

二、离散回归的几个错误点

  1. 基函数矩阵V构造错误:应该把三个基函数作为列向量拼接成n×3的矩阵(n是采样点数量),而不是行向量堆叠;
  2. 连续回归得到的coeffs是符号变量,直接用于数值计算前必须转成数值类型;
  3. 多余的重复linspace语句完全没用,得删掉;
  4. 前一段的ezplot没有执行hold off,会导致后续plot的坐标系冲突,引发报错。

修正后的完整代码

clear all
close all
clc
syms x

%% 1. 连续回归部分
f = log(x);
V = [1, x, x^2]; % 定义基函数
n = length(V);

% 计算Gram矩阵G:存储基函数两两的内积(积分)
G = sym(zeros(n,n));
for i = 1:n
    for j = 1:n
        G(i,j) = int(V(i)*V(j), x, 1, exp(1));
    end
end

% 计算右端向量b:存储基函数与f(x)的内积(积分)
b = sym(zeros(n,1));
for i = 1:n
    b(i) = int(V(i)*f, x, 1, exp(1));
end

% 求解拟合系数并转成数值类型
coeffs = double(G\b);
a0 = coeffs(1);
a1 = coeffs(2);
a2 = coeffs(3);
fitting_continuous = a0 + a1*x + a2*x^2;

% 绘制连续回归结果
figure('Name','连续回归')
ezplot(f,[1,exp(1)])
hold on
ezplot(fitting_continuous,[1,exp(1)])
legend('f(x)=ln(x)','连续拟合曲线')
grid on
hold off

%% 2. 离散回归部分
% 2.1 生成1000个均匀采样点
xs = linspace(1,exp(1),1000);
% 2.2 计算f(x)和基函数的数值
f_values = double(subs(f, x, xs)); % 符号转数值数组
basis_1 = ones(length(xs),1); % 转成列向量
basis_x = xs(:); % 转成列向量
basis_x2 = xs(:).^2; % 转成列向量

% 2.3 构造基函数矩阵,执行离散最小二乘回归
V_discrete = [basis_1, basis_x, basis_x2]; % n×3的矩阵格式
coeffs_discrete = V_discrete \ f_values; % 离散最小二乘求解

% 计算拟合结果
fitting_discrete_values = V_discrete * coeffs_discrete;

% 2.4 绘制离散回归结果
figure('Name','离散回归')
plot(xs, f_values, 'b-', 'LineWidth',1)
hold on
plot(xs, fitting_discrete_values, 'r--', 'LineWidth',1.5)
legend('f(x)=ln(x)','离散拟合曲线')
grid on
hold off

代码关键说明

  • 连续回归:通过积分计算Gram矩阵和右端向量,严格遵循连续空间最小二乘的数学定义;
  • 离散回归:统一用列向量构造基矩阵,完全适配Matlab的最小二乘求解逻辑;
  • 所有符号变量转数值后再绘图,彻底避免类型不匹配的报错;
  • 分开绘制两个独立窗口,避免坐标系冲突,同时添加网格让结果更直观。

内容的提问来源于stack exchange,提问作者Jorge Carriles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:30:43