MATLAB——多元非线性函数拟合

一、regress函数

X=[1 13 1.5; 1.4 19 3; 1.8 25 1; 2.2 10 2.5;2.6 16 0.5; 3 22 2; 3.4 28 3.5; 3.5 30 3.7];
Y=[0.330; 0.336; 0.294; 0.476; 0.209; 0.451; 0.482; 0.5];
% X自变量,数据(N, D);Y因变量,数据(N, 1)
X1=[ones(length(X(:, 1)), 1), X];
[beta, bint, r, rint, states]=regress(Y, X1)
% 多元线性回归
% y=beta(1)+beta(2)*x1+beta(3)*x2+beta(4)*x3+...
% beta—系数估计
% bint—系数估计的上下置信界
% r—残差
% rint—诊断异常值的区间
% states—模型统计信息
rcoplot(r, rint)
saveas(gcf,sprintf('线性曲线拟合_残差图.jpg'),'bmp');

二、nlinfit函数

X=[1 13 1.5; 1.4 19 3; 1.8 25 1; 2.2 10 2.5;2.6 16 0.5; 3 22 2; 3.4 28 3.5; 3.5 30 3.7];
Y=[0.330; 0.336; 0.294; 0.476; 0.209; 0.451; 0.482; 0.5];
% X自变量,数据(N, D);Y因变量,数据(N, 1)
beta0=ones(8, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta, r, J]=nlinfit(X, Y, @modelfun, beta0)
% 非线性回归
% beta—系数估计
% r—残差
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@modelfun, X, beta, r, 'Jacobian', J)
% 非线性回归预测置信区间
% Ypred—预测响应
% delta—置信区间半角
plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
saveas(gcf,sprintf('非线性曲线拟合_1.jpg'),'bmp');

function yy=modelfun(b,x)
    %自定义拟合函数
    yy=b(1) + b(2).*x(:,2) + b(3).*x(:,3) + b(4).*x(:,2).^2 + b(5).*x(:,3).^2 + b(6).*x(:,1).^0.5 + b(7).*x(:,2).^0.5 + b(8).*x(:,3).^0.5;
end

三、lsqcurvefit函数

X=[1 13 1.5; 1.4 19 3; 1.8 25 1; 2.2 10 2.5;2.6 16 0.5; 3 22 2; 3.4 28 3.5; 3.5 30 3.7];
Y=[0.330; 0.336; 0.294; 0.476; 0.209; 0.451; 0.482; 0.5];
% X自变量,数据(N, D);Y因变量,数据(N, 1)
beta0=ones(8, 1);
% 初始值的选取可能会导致结果具有较大的误差。
[beta,resnorm,r, ~, ~, ~, J]=lsqcurvefit(@modelfun,beta0,X,Y)
% 在最小二乘意义上解决非线性曲线拟合(数据拟合)问题
% beta—系数估计
% resnorm—残差的平方范数 sum((fun(x,xdata)-ydata).^2)
% r—残差 r=fun(x,xdata)-ydata
% J—雅可比矩阵
[Ypred,delta]=nlpredci(@modelfun, X, beta, r, 'Jacobian', J)
plot(X(:, 1), Y, 'k.', X(:, 1), Ypred, 'r');
saveas(gcf,sprintf('非线性曲线拟合_2.jpg'),'bmp');

function yy=modelfun(b,x)
    %自定义拟合函数
    yy=b(1) + b(2).*x(:,2) + b(3).*x(:,3) + b(4).*x(:,2).^2 + b(5).*x(:,3).^2 + b(6).*x(:,1).^0.5 + b(7).*x(:,2).^0.5 + b(8).*x(:,3).^0.5;
end

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非线性回归拟合是在使用Matlab进行数据分析和建模时常见的任务之一。Matlab提供了许多函数和工具箱来支持非线性回归分析。 首先,您需要准备您的数据。假设您已经有了一个包含自变量和因变量的数据集。接下来,您可以使用Matlab的曲线拟合工具箱(Curve Fitting Toolbox)来进行非线性回归拟合。 以下是一个简单的示例代码,展示了如何使用Matlab进行非线性回归拟合: ```matlab % 假设您的数据存储在两个向量 x 和 y 中 % 定义自定义的非线性模型函数 model = @(coeffs, x) coeffs(1)*exp(coeffs(2)*x); % 初始化初始参数估计值 initialCoeffs = [1, 1]; % 使用 nlinfit 函数进行非线性回归拟合 estimatedCoeffs = nlinfit(x, y, model, initialCoeffs); % 使用估计得到的参数进行预测 predictedValues = model(estimatedCoeffs, x); % 绘制原始数据和拟合曲线 plot(x, y, 'o'); hold on; plot(x, predictedValues); legend('原始数据', '拟合曲线'); ``` 在上述代码中,我们首先定义了一个自定义的非线性模型函数 `model`,这里使用了指数模型。然后,我们初始化了参数的初始估计值 `initialCoeffs`。接下来,我们使用 `nlinfit` 函数进行非线性回归拟合,得到了参数的估计值 `estimatedCoeffs`。最后,我们使用估计得到的参数进行预测,并绘制了原始数据和拟合曲线。 请注意,这只是一个简单的示例,实际应用中可能需要根据具体情况进行适当的调整和修改。Matlab提供了更多的函数和工具箱来支持不同类型的非线性回归分析,您可以根据具体需求选择合适的方法和工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值