您的位置:首页 > 编程语言 > MATLAB

数学建模中的Matlab模板程序

2016-10-05 15:06 330 查看
一、数据拟合:多项式拟合、指定函数拟合、曲线拟合工具箱

% One:多项式拟合模板
x = [1 2 3 4 5 6 7 8 9];
y = [9 7 6 3 -1 2 5 7 20];
p = polyfit(x, y, 3);
xi = 0: 0.2 : 10;
yi = polyval(p, xi);
plot(xi, yi, x, y, 'r*');

% Two:指定函数拟合模板
% x和y对应离散点,f为自定义的拟合函数
% cfun是根据自定义的拟合函数f来拟合数据x和y
syms t;
x = [0; 0.4; 1.2;2;2.8;3.6; 4.4; 5.2; 6; 7.2; ...
8; 9.2; 10.4; 11.6; 12.4; 13.6; 14.4; 15];
y = [1; 0.85; 0.29; -0.27; -0.53; -0.4; -0.12; ...
0.17; 0.28; 0.15; -0.03; -0.15; -0.071; ...
0.059; 0.08; 0.032; -0.015; -0.02];
f = fittype('a*cos(k*t) * exp(w * t)', 'independent', ...
't', 'coefficients', {'a', 'k', 'w'});
cfun = fit(x, y, f)
xi = 0 : 0.1 : 20;
yi = cfun(xi);
plot(x, y, 'r*', xi, yi, 'b-');


二、线性规划

% 线性规划模板
% 注意1:约束条件---所有不等式组要转化为<=
% 注意2:目标函数---最大值的情况要转化为最小值:c变-c,结果取反
c = [170.8582; -17.7254; 41.2582; 2.2182; 131.8182; -500000];
a = [1 -0.17037 -0.5324 1 0 0; ...
0 0.17037 0.5324 0 0 0; ...
1 0.32 1 0 0 0; ...
0 1 0 0 0 0; ...
0 0 1 1 0 0; ...
0 0 0 -1 -1 0];
b = [0; 888115; 166805; 521265.625; ...
683400; -660000];
aeq = [0 0 0 0 0 1];
beq = [1];
lb = [0;0;0;0;0;0];   % x的最小值
[x,fval] = linprog(-c, a, b,aeq, beq, lb, [])

% 附:参数的含义
% c为列向量,对应目标函数的系数
% a为约束条件的不等式系数的矩阵(即使x6是等式中才出现的,也要补上0)
% b为约束条件的结果的列向量
% aeq为等式左边系数的矩阵
% beq为等式右边的列向量
% 求出的列向量x即为x1~xn的所有解,fval即为最值

% 附:linprog函数自己去查Matlab帮助文档……
% doc 函数名:查看函数的使用文档
% help 函数名:命令行中查看函数用法
% type 函数名:查看函数源码


三、灰色预测

% 灰色预测模板
% 只需修改A矩阵、t1和t2向量,换成自己的数据
clear;
syms a  b;
c= [a b]';
A = [174 179 183 189 207 234 220.5 ...
256 270 285];
B = cumsum(A);
n = length(A);
for i = 1:(n-1)
C(i) = (B(i) + B(i + 1)) / 2;
end

%计算待定参数的值
D = A;
D(1) = [];
D = D';
E = [-C; ones(1,n-1)];
c = inv(E * E') * E * D;
c = c';
a = c(1);
b = c(2);

%预测后续数据
F(1) = A(1);
for i = 2:(n+10)
F(i) = (A(1) - b/a) / exp(a*(i - 1)) + b /a;
end
G(1) = A(1);
for i = 2:(n+10)
G(i) = F(i) - F(i - 1);
end

t1 = 1995:2004;
t2 = 1995:2014;
G        %输出预测出来的数据
a, b     %输出发展系数和灰色作用量
plot(t1, A, 'rx', t2, G);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息