2021-04-25

数据拟合两道题

1.拟合多项式。载入文件randomData.mat,这个文件中包括x和y两个变量。编写脚本对其做第一、第二、第三、第四和第五次多项式拟合。仿照下图,用蓝色的点绘制x和y的散点图,然后在同一坐标系下,用不同颜色绘制多项式拟合曲线,并在合适的位置加入标注(xlabel,ylabel,legend)。要想达到比较好的拟合效果,你可能会用到polyfit的中心和缩放版本(能够返回3个变量,详见help),以及与之相匹配的polyval(能够接收中心和缩放的变量)。最终图像应如下图所示:

figure(1);
hold on;
plot(x,y,'.k');
%第一次
[p1,s1,mu1]=polyfit(x,y,1);
y1=polyval(p1,x,[],mu1);
plot(x,y1);
%第二次
[p2,s2,mu2]=polyfit(x,y,2);
y2=polyval(p2,x,[],mu2);
plot(x,y2,'c');
%第三次
[p3,s3,mu3]=polyfit(x,y,3);
y3=polyval(p3,x,[],mu3);
plot(x,y3,'g');
%第四次
[p4,s4,mu4]=polyfit(x,y,4);
y4=polyval(p4,x,[],mu4);
plot(x,y4,'y');
%第五次
[p5,s5,mu5]=polyfit(x,y,5);
y5=polyval(p5,x,[],mu5);
plot(x,y5,'r');
%设置标签与标题
xlabel('X');
ylabel('Y');
legend('Data','Oder1','Oder2','Oder3','Oder4','Oder5','Location','southeast');
title('Polynomial fits to noisy data');

 

1.经济增长模型

增加生产、发展经济所依靠的主要因素有增加投资、增加劳动力以及技术革新等,在研究国民经济产值与这些因素的数量关系时,由于技术水平不像资金、劳动力那样容易定量化,作为初步的模型,可认为技术水平不变,只讨论产值和资金、劳动力之间的关系。在科学技术发展不快时,如资本主义经济发展的前期,这种模型是有意义的。

Q,K,L分别表示产值、资金、劳动力,要寻求的数量关系Q(K,L)。经过简化假设与分析,在经济学中,推导出一个著名的Cobb-Douglas生产函数:

Q(K,L) = aKαLβ,0<α,β<1(*)

式中α,βa要由经济统计数据确定。现有美国马萨诸塞州1900—1926年上述三个经济指数的统计数据,如下表,试用数据拟合的方法,求出式(*)中的参数α,βa

表1

t       Q         K         L

t       Q         K         L

1900    1.05       1.04      1.05

1901    1.18       1.06      1.08

1902    1.29       1.16      1.18

1903    1.30       1.22      1.22

1904    1.30       1.27      1.17

1905    1.42       1.37      1.30

1906    1.50       1.44      1.39

1907    1.52       1.53      1.47

1908    1.46       1.57      1.31

1909    1.60       2.05      1.43

1910    1.69       2.51      1.58

1911    1.81       2.63      1.59

1912    1.93       2.74      1.66

1913    1.95       2.82      1.68

1914    2.01      3.24      1.65

1915    2.00      3.24      1.62

1916    2.09      3.61      1.86

1917    1.96      4.10      1.93

1918    2.20      4.36      1.96

1919    2.12      4.77      1.95

1920    2.16      4.75      1.90

1921    2.08      4.54      1.58

1922    2.24      4.54      1.67

1923    2.56      4.58      1.82

1924    2.34      4.58      1.60

1925    2.45      4.58      1.61

19262.58      4.54      1.64

提示:由于(*)式关于参数α,β,a是非线性的,因此,可以有两种方式进行拟合,一是直接使用MATLAB软件中的曲线或曲面拟合命令。另一个是将非线性函数转化成线性函数的形式,使用线性拟合。

Q=[1.05 ,1.18, 1.29, 1.30, 1.30, 1.42, 1.50, 1.52, 1.46, 1.60, 1.69, 1.81, 1.93, 1.95, 2.01, 2.00, 2.09, 1.96, 2.20, 2.12, 2.16, 2.08, 2.24, 2.56, 2.34 ,2.45, 2.58];
K=[1.04 ,1.06,1.16, 1.22, 1.27, 1.37, 1.44, 1.53, 1.57, 2.05, 2.51, 2.63, 2.74, 2.82, 3.24, 3.24, 3.61, 4.10, 4.36, 4.77, 4.75, 4.54, 4.54, 4.58, 4.58, 4.58 ,4.54];
L=[1.05 ,1.08, 1.18, 1.22, 1.17, 1.30, 1.39 ,1.47, 1.31, 1.43, 1.58, 1.59, 1.66, 1.68, 1.65, 1.62, 1.86, 1.93, 1.96, 1.95, 1.90, 1.58, 1.67, 1.82 ,1.60 ,1.61 ,1.64];
K1=log(K);
L1=log(L);
Q1=log(Q);
x=[K;L];
x1=[K1;L1];
%fun=inline('a(1).*(x(1,:).^a(2)).*(x(2,:).^a(3))','a','x');
fun1=inline('log(a(1))+(x1(1,:).*a(2))+(x1(2,:).*a(3))','a','x1');

%a=lsqcurvefit(fun,[1.22,0.5,0.1],x,Q);
a1=lsqcurvefit(fun1,[1.22,0.5,0.1],x1,Q1);

运行结果:

α=1.1766 ;β=0.4153;a=0.0619

为了使得拟合更加直观,我们绘制了拟合后的函数图形,以下是代码外加运行结果:

Q=[1.05 ,1.18, 1.29, 1.30, 1.30, 1.42, 1.50, 1.52, 1.46, 1.60, 1.69, 1.81, 1.93, 1.95, 2.01, 2.00, 2.09, 1.96, 2.20, 2.12, 2.16, 2.08, 2.24, 2.56, 2.34 ,2.45, 2.58];
K=[1.04 ,1.06,1.16, 1.22, 1.27, 1.37, 1.44, 1.53, 1.57, 2.05, 2.51, 2.63, 2.74, 2.82, 3.24, 3.24, 3.61, 4.10, 4.36, 4.77, 4.75, 4.54, 4.54, 4.58, 4.58, 4.58 ,4.54];
L=[1.05 ,1.08, 1.18, 1.22, 1.17, 1.30, 1.39 ,1.47, 1.31, 1.43, 1.58, 1.59, 1.66, 1.68, 1.65, 1.62, 1.86, 1.93, 1.96, 1.95, 1.90, 1.58, 1.67, 1.82 ,1.60 ,1.61 ,1.64];
k=0:0.1:3;
l=k;
[m,n]=meshgrid(k,l);
q=a1(1)*(m.^a1(2)).*(n.^a1(3));
mesh(m,n,q);

运行图像:

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
最新发布
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值