【暖手练习】MATLAB习题

练习1:插值&拟合

题目:

有如下数据点:

x-2-1.7-1.4-1.1-0.8-0.5-0.20.1
y0.10290.11740.13160.14480.15660.16620.17330.1775
x0.40.711.31.61.92.22.5
y0.17850.17640.17110.16300.15260.14020.12660.1122
x2.83.13.43.744.34.64.9
y0.09770.08350.07020.05880.04790.03730.02910.0224

1. 根据数据点试用不同的插值方法绘制曲线;

2. 试用最小二乘多项式拟合方法拟合表中数据,选择一个能较好拟合数据点的多项式阶次,给出相应的多项式系数;

3. 若表中的数据满足正态分布密度函数y=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}},试用最小二乘非线性拟合方法求出分布参数\mu\sigma的值,并绘制拟合曲线,观察拟合效果;

问题1:

%yi=interp1(x,y,new_x,'method')
%'method'可为'linear'、'nearest'、'next'、'previous'、'pchip'、'cubic'、'v5cubic'、'makima' 或 'spline'。默认方法为 'linear'。
clear;clc;
x=[-2 -1.7 -1.4	-1.1 -0.8 -0.5 -0.2	0.1 0.4	0.7	1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3	4.6	4.9];
y=[0.1029	0.1174	0.1316	0.1448	0.1566	0.1662	0.1733	0.1775 0.1785	0.1764	0.1711	0.1630	0.1526	0.1402	0.1266	0.1122 0.0977	0.0835	0.0702	0.0588	0.0479	0.0373	0.0291	0.0224];
new_x=-2:0.01:4.9;
subplot(2,2,1);
plot(x,y,'r.','Markersize',20);
hold on;
y1=interp1(x,y,new_x,'linear');
plot(new_x,y1,'b');
title('线性插值');

subplot(2,2,2);
plot(x,y,'r.','Markersize',20);
hold on;
y2=interp1(x,y,new_x,'nearest');
plot(new_x,y2,'g');
title('最邻近插值');

subplot(2,2,3);
plot(x,y,'r.','Markersize',20);
hold on;
y3=interp1(x,y,new_x,'pchip');
plot(new_x,y3,'c');
title('三次埃尔米特插值');

subplot(2,2,4);
plot(x,y,'r.','Markersize',20);
hold on;
y4=interp1(x,y,new_x,'spline');
plot(new_x,y4,'k');
title('三次样条插值');

%legend('样本点','线性插值','最邻近插值','埃尔米特插值','三次样条插值')

图示为:

问题2:

% polyfit(x,y,n)多项式拟合
% x,y为向量,n为拟合阶数
clear;clc;
x=[-2 -1.7 -1.4	-1.1 -0.8 -0.5 -0.2	0.1 0.4	0.7	1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3	4.6	4.9];
y=[0.1029	0.1174	0.1316	0.1448	0.1566	0.1662	0.1733	0.1775 0.1785	0.1764	0.1711	0.1630	0.1526	0.1402	0.1266	0.1122 0.0977	0.0835	0.0702	0.0588	0.0479	0.0373	0.0291	0.0224];
plot(x,y,'r.','Markersize',20);
hold on;

p2=polyfit(x,y,2);
y2=p2(1)*x.^2+p2(2)*x+p2(3);
plot(x,y2);
hold on;

p3=polyfit(x,y,3);
y3=p3(1)*x.^3+p3(2)*x.^2+p3(3)*x+p3(4);
plot(x,y3)
hold on;

p4=polyfit(x,y,4);
y4=p4(1)*x.^4+p4(2)*x.^3+p4(3)*x.^2+p4(4)*x+p4(5);
plot(x,y4)
hold on;

p5=polyfit(x,y,5);
y5=p5(1)*x.^5+p5(2)*x.^4+p5(3)*x.^3+p5(4)*x.^2+p5(5)*x+p5(6);
plot(x,y5)
hold on;

legend('样本点','二阶多项式插值','三阶多项式插值','四阶多项式插值','五阶多项式插值');

图示如下:

 如图,经过观察,随着多项式阶数的提高,拟合效果也在不断提高。五阶多项式插值的效果已经非常好,并且可以通过计算R^2进行验证:

SSE=0;
SST=0;
for i=1:24
    SSE=SSE+(y5(i)-y(i))^2;
    SST=SST+(y(i)-mean(y))^2;
end
R_squre=1-SSE/SST;
disp(['五阶多项式拟合R^2为',num2str(R_squre)])

输出结果为:

 接下来输出五阶多项式的系数:

for j=1:6
    k=6-j;
    disp([num2str(k),'次项系数为:',num2str(p5(j))]);
end

输出结果为:

 问题3:

syms t;
f=fittype('1/(sqrt(2*pi)*sigma)*exp(-(t-mu)^2/(2*sigma^2))','independent','t','coefficients',{'mu','sigma'});

%%
% f=fittype('拟合的方程','independent','自变量','coefficients',{'未知参数1','未知参数2'});
%% 这里的用符号t代替了x的位置

% [cfun,rsquare]=fit(x',y',f);  保存拟合结果和拟合效果

p=fit(x',y',f); 
% p保存拟合结果
% x,y为行向量,需要转置
clear;clc;
syms t;
x=[-2 -1.7 -1.4	-1.1 -0.8 -0.5 -0.2	0.1 0.4	0.7	1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3	4.6	4.9];
y=[0.1029	0.1174	0.1316	0.1448	0.1566	0.1662	0.1733	0.1775 0.1785	0.1764	0.1711	0.1630	0.1526	0.1402	0.1266	0.1122 0.0977	0.0835	0.0702	0.0588	0.0479	0.0373	0.0291	0.0224];

f=fittype('1/(sqrt(2*pi)*sigma)*exp(-(t-mu)^2/(2*sigma^2))','independent','t','coefficients',{'mu','sigma'});
%[cfun,rsquare]=fit(x',y',f); 
p=fit(x',y',f); 
plot(p,x,y);

输出结果为:

因此参数值分别为:

\mu=0.3483

\sigma=2.235

练习2:整数规划

题目:

分配甲、乙、丙、丁四人去完成五项任务,每人完成各项任务的时间如下表所示。由于任务数多于人数,故规定其中有一个人可完成两项任务,其余三人每人只完成一项任务。试确定总花费时间最少的分配任务方案。

ABCDE
924159
651242
11713417
19111589

求解与代码实现:

根据题目要求,可以得到目标函数和约束条件如下:

minW=\sum_{i=1}^{4}\sum_{j=1}^{5}a_{ij}x_{ij}

s.t.\left\{\begin{matrix}a_{ij}=0,1(i=1,2,3,4,j=1,2,3,4,5) & & & & & \\ \sum_{i=1}^{4}a_{ij}=1(j=1,2,3,4,5) & & & & & \\ \sum_{j=1}^{5}a_{ij}\leq 2(i=1,2,3,4) & & & & & \\ \sum_{j=1}^{5}a_{ij}\geq 1(i=1,2,3,4) & & & & & \\ \sum_{i=1}^{4}\sum_{j=1}^{5}a_{ij}=5 & & & & & \end{matrix}\right.

其中x_{ij}为各人不同任务的花费时间:

代码实现如下:

% [x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
% 求解整数规划,调整约束条件,可转为0-1规划
%      f :目标函数的系数矩阵
% intcon :整数所在位置
%      A :不等式约束的变量系数矩阵
%      b :不等式约束的资源数
%    Aeq :等式约束的变量系数矩阵
%    beq :等式约束的资源数
%     lb :变量约束下限
%     ub :变量约束上限
clear;clc;
f = [9 2 4 15 9 6 5 12 4 2 11 7 13 4 17 19 11 15 8 9];
ic = 1 : length(f);
A1 = zeros(4,length(f));

for i = 1:4
    for j = (5*i-4):(5*i)
       A1(i,j) = 1;
    end
end

A2 = -1*A1;
A = [A1; A2];
b = [2;2;2;2;-1;-1;-1;-1];

Aeq = zeros(4,length(f));
for i = 1:4
    for j = i:5:(5*i+1)
        Aeq(i,j) = 1;
    end
end

beq = [1;1;1;1];
lb = zeros(length(f),1);
ub = ones(length(f),1);
[x,fval] = intlinprog(f,ic,A,b,Aeq,beq,lb,ub);

disp('最终计划为:')
disp(find(x))
disp('最优目标函数值为:')
disp(fval)

输出结果为:

此时对应分配方案为:

任务B、任务C
任务A
任务D
任务E

最短时间为:W=25

练习3:评价类模型

题目:

某部队即将换装步枪,因个人作战目的不同,选择的强制会不同,那么如何选择步枪?

可供选择的步枪有:步枪A、步枪B、步枪C

影响选择枪支的因素有:作战目的、杀伤力、作战距离、后坐力、换弹速度等

(1). 试建立层次分析模型

(2). 给出步枪A、步枪B、步枪C对作战距离的成对比较矩阵,求出最大特征根,相应的归一化特征向量,并进行一致性检验(暂略)

问题1:

评价目标:选择最合适的步枪

备选方案:步枪A、步枪B、步枪C

属性集合:作战目的(假设有三种:a,b,c)、杀伤力X1、作战距离X2、后坐力X3、换弹速度X4

针对不同作战目的,各属性有不同的权重:

权重杀伤力X1作战距离X2后坐力X3换弹速度X4
作战目的a0.20.10.30.4
作战目的b0.250.350.20.2
作战目的c0.40.20.30.1

三种步枪的针对不同属性的判断矩阵为:

杀伤力X1步枪A步枪B步枪C
步枪A11/23
步枪B216
步枪C1/31/61
作战距离X2步枪A步枪B步枪C
步枪A11/31/4
步枪B313/4
步枪C44/31
后坐力X3步枪A步枪B步枪C
步枪A152
步枪B1/512/5
步枪C1/25/21
换弹速度X4步枪A步枪B步枪C
步枪A131/4
步枪B1/311/12
步枪C4121

根据上述矩阵,采用最简单的算数平均法求得权重:

X1X2X3X4
步枪A0.30.1250.58820.1875
步枪B0.60.3750.11760.0625
步枪C0.10.50.29410.75

根据权重矩阵,并结合不同目的对应的属性权重计算三种步枪在三种目的下的得分:

权重杀伤力X1作战距离X2后坐力X3换弹速度X4
作战目的a0.20.10.30.4
作战目的b0.250.350.20.2
作战目的c0.40.20.30.1
得分步枪A步枪B步枪C最终选择
作战目的a0.323960.217780.45823C
作战目的b0.273890.317270.40882C
作战目的c0.340210.356530.30323B

问题2(略):

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四口鲸鱼爱吃盐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值