数学建模课的习题,自己实在搞不出来,不得已上网提问,请各位解答
一共三道题,求老哥们解答,急用,感谢!
该回答引用ChatGPT GPT-4
运行结果
代码如下
%1、使用nlinfit函数进行非线性拟合
% 数据
years = 1899:1922;
Q = [100, 101, 112, 122, 124, 122, 143, 152, 151, 126, 155, 159, 153, 177, 184, 169, 189, 255, 227, 223, 218, 231, 179, 240];
K = [100, 107, 114, 122, 131, 138, 149, 163, 176, 185, 198, 208, 216, 226, 236, 244, 266, 298, 335, 366, 387, 407, 417, 431];
L = [100, 105, 110, 117, 122, 121, 125, 134, 140, 123, 143, 147, 148, 155, 156, 152, 156, 183, 198, 201, 196, 194, 146, 161];
% Cobb-Douglas函数
cobb_douglas = @(b, x) b(1) * x(:,1).^b(2) .* x(:,2).^(1-b(2));
% 初始参数
beta0 = [0.5, 0.5];
% 拟合模型
[beta,R,J,CovB,MSE] = nlinfit([K', L'], Q', cobb_douglas, beta0);
% 拟合参数和误差平方和
disp(beta);
disp(sum(R.^2));
% 展示拟合效果图
Q_fit = cobb_douglas(beta, [K', L']);
figure;
plot(years, Q, 'o', years, Q_fit, '-');
legend('Observed', 'Fit');
%2、通过变量替换,将非线性模型转化为线性模型
% 数据取对数
logQ = log(Q);
logK = log(K);
logL = log(L);
% 构造矩阵
X = [ones(length(years),1), logK', logL'];
% 拟合模型
B = X\logQ';
% 拟合参数和误差平方和
disp(B);
disp(sum((logQ' - X*B).^2));
% 展示拟合效果图
logQ_fit = X*B;
figure;
plot(years, logQ, 'o', years, logQ_fit, '-');
legend('Observed', 'Fit');