matlab三个自变量一个因变量二次拟合代码实例
时间: 2023-09-24 09:06:20 浏览: 300
以下是一个用MATLAB实现三个自变量和一个因变量的二次拟合的代码实例。
假设有三个自变量x1、x2和x3,一个因变量y,我们要用二次函数拟合它们之间的关系,即y=a0+a1*x1+a2*x2+a3*x3+a4*x1^2+a5*x2^2+a6*x3^2+a7*x1*x2+a8*x1*x3+a9*x2*x3。
首先,我们需要准备训练数据,这里我们生成一个随机的数据集:
``` matlab
% 生成随机数据
x1 = rand(100,1);
x2 = rand(100,1);
x3 = rand(100,1);
y = 2 + 3*x1 + 4*x2 + 5*x3 + 6*x1.^2 + 7*x2.^2 + 8*x3.^2 + 9*x1.*x2 + 10*x1.*x3 + 11*x2.*x3;
```
然后,我们定义二次函数的形式,并使用“lsqcurvefit”函数进行拟合:
``` matlab
% 定义二次函数形式
f = @(x,xdata)x(1) + x(2)*xdata(:,1) + x(3)*xdata(:,2) + x(4)*xdata(:,3) + ...
x(5)*xdata(:,1).^2 + x(6)*xdata(:,2).^2 + x(7)*xdata(:,3).^2 + ...
x(8)*xdata(:,1).*xdata(:,2) + x(9)*xdata(:,1).*xdata(:,3) + x(10)*xdata(:,2).*xdata(:,3);
% 初始参数猜测
x0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
% 用lsqcurvefit函数拟合数据
x = lsqcurvefit(f, x0, [x1, x2, x3], y);
```
最后,我们可以用拟合后的参数计算预测值,并和真实值进行比较:
``` matlab
% 计算预测值
y_pred = f(x, [x1, x2, x3]);
% 绘制拟合结果
figure;
scatter3(x1, x2, x3, 50, y, 'filled');
hold on;
scatter3(x1, x2, x3, 50, y_pred, 'filled');
xlabel('x1');
ylabel('x2');
zlabel('x3');
legend('真实值', '预测值');
```
完整代码如下:
``` matlab
% 生成随机数据
x1 = rand(100,1);
x2 = rand(100,1);
x3 = rand(100,1);
y = 2 + 3*x1 + 4*x2 + 5*x3 + 6*x1.^2 + 7*x2.^2 + 8*x3.^2 + 9*x1.*x2 + 10*x1.*x3 + 11*x2.*x3;
% 定义二次函数形式
f = @(x,xdata)x(1) + x(2)*xdata(:,1) + x(3)*xdata(:,2) + x(4)*xdata(:,3) + ...
x(5)*xdata(:,1).^2 + x(6)*xdata(:,2).^2 + x(7)*xdata(:,3).^2 + ...
x(8)*xdata(:,1).*xdata(:,2) + x(9)*xdata(:,1).*xdata(:,3) + x(10)*xdata(:,2).*xdata(:,3);
% 初始参数猜测
x0 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
% 用lsqcurvefit函数拟合数据
x = lsqcurvefit(f, x0, [x1, x2, x3], y);
% 计算预测值
y_pred = f(x, [x1, x2, x3]);
% 绘制拟合结果
figure;
scatter3(x1, x2, x3, 50, y, 'filled');
hold on;
scatter3(x1, x2, x3, 50, y_pred, 'filled');
xlabel('x1');
ylabel('x2');
zlabel('x3');
legend('真实值', '预测值');
```
运行代码后,会得到一个三维散点图,其中蓝色表示真实值,红色表示预测值。可以看到,预测值和真实值非常接近,说明二次函数可以很好地拟合这些数据。
阅读全文
相关推荐


















