y=(1-x.^2).^(0.5); z1=4*trapz(x,y)
z2=4*quad('(1-x.^2).^(0.5)',0,1) z3=4*quad8('(1-x.^2).^(0.5)',0,1)
n=10000000;x3=rand(1,n); yy=(1-x3.^2).^(0.5); z4=4*sum(yy)/n
以下是闾宇同学1组 (1)蒙特卡罗方法 创建M文件 function y=f(x) m=0; for n=1:x
if rand(1)^2+rand(1)^2<=1 m=m+1; end; end; 4*m/x 输入
Format long >> f(10000); ans =
3.132400000000000 >> f(50000); ans =
3.139920000000000 >> f(100000); ans =
3.147320000000000 (2)数值积分法
A?4?1dx?? 01?x21设y(x)?1k1 ,将区间[0,1]n等分,取 x?,y?kk21?x2n1?xk2梯形法:A?[2(y1?y2?????yn?1)?y0?yn]
n辛普森法:
1[(y0?y2m)?2(y2?y4?????y2m?2)?4(y1?y3?????y2m?1)] 6m创建M文件fun.m function y=fun(x) y=4./(1+x.^2); 创建M文件f(x) function y=f(x) for n=1:x-1
a(n)=2*fun(n/x); end;
vpa(1/(2*k)*(sum(a)+fun(0)+fun(1)))
输入:
digits(30) %保留小数点后30位 >> f(100) ans =
3.14157598692312900467982217378 >> f(500) ans =
3.14159198692313035294887413329 >> f(10000) ans =
3.141592651923140078196183822
3.p99-9题编程并最终回答问题。
题目:图7是一个国家的地图,为了算出它的国土面积,首先对地图作如下测量:以由西向东方向为x轴,由南到北方向为y轴,选择方便的原点,并将从最西边界点到最东边界点在X轴上的区间适当地划分为若干段,在每个分点的y轴方向测出南边界点和北边界点的y坐标y1和y2,这样就得到了表中的数据(单位mm)。
根据地图的比例我们知道18mm相当于40km,试由测量数据计算该国土的近似面积,与它的精确值41288km2比较。
(2012本-代雄,雷雨锦,李颖艺提供)
程序1:
>> x=[7.0 10.5 13.0 17.5 34.0 40.5 44.5 48.0 56.0 61.0 68.5 76.5 80.5 91.0 96.0 101.0 104.0
106.5 111.5 118.0 123.5 136.5 142.0 146.0 150.0 157.0 158.0];
y1=[44 45 47 50 50 38 30 30 34 36 34 41 45 46 43 37 33 28 32 65 55 54 52 50 66 66 68];
y2=[44 59 70 72 93 100 110 110 110 117 118 116 118 118 121 124 121 121 121 122 116 83 81 82 86 85 68]; figure(1) plot(x,y1,'o') hold on plot(x,y2,'rp') hold on
xi=10:10:100
yi=interp1(x,y1,xi,'spline') yi=interp1(x,y2,xi,'spline') xx=min(x):0.1:max(x);
yy1=interp1(x,y1,xx,'spline'); plot(xx,yy1) hold on
yy2=interp1(x,y2,xx,'spline'); plot(xx,yy2,'r') hold on xi =
10 20 30 40 50 60 70 80 90 100 yi =
44.6613 51.4824 53.2436 39.1722 30.9541 35.8817 34.5265 46.3324 38.2206 yi =
56.3424 72.5187 87.6339 98.9170 108.8743 115.7368 117.3082 117.8652 124.2328
14012010080604020020406080100120140160
44.6028 117.7779 另外:两种方法,可以参考。
结果: 方法一
本题利用蒙特卡罗方法计算国土面积,通过for循环产生随机点,if语句限定曲线所围区域内。 通过for循环多次实验,求的平均值。
>> x=[7.0 10.5 13.0 17.5 34.0 40.5 44.5 48.0 56.0 61.0 68.5 76.5 80.5 91.0 ... 96.0 101.0 104.0 106.5 111.5 118.0 123.5 136.5 142.0 146.0 150.0 ... 157.0 158.0];
y1=[44.0 45.0 47.0 50.0 50.0 38.0 30.0 30.0 34.0 36.0 34.0 41.0 45.0 46.0 ... 43.0 37.0 33.0 28.0 32.0 65.0 55.0 54.0 52.0 50.0 66.0 66.0 68.0]; y2=[44.0 59.0 70.0 72.0 93.0 100.0 110.0 110.0 110.0 117.0 118.0 116.0 ... 118.0 118.0 121.0 124.0 121.0 121.0 121.0 122.0 116.0 83.0 81.0 ... 82.0 86.0 85.0 68.0]; L=max(x)-min(x); H=max(y2)-min(y1); s=0;
for k=1:10 n=10000; m=0; for i=1:n
u(i)=unifrnd(min(x),max(x)); v(i)=unifrnd(min(y1),max(y2)); f1=interp1(x,y1,u(i),'cubic'); f2=interp1(x,y2,u(i),'cubic'); if(v(i)>=f1&&v(i)<=f2) m=m+1; end end
S(k)=1600*L*H*m/(n*18^2); s=s+S(k); end s=s/10 s =
4.2552e+004
方法二:
x=[7.0 10.5 13.0 17.5 34.0 40.5 44.5 48.0 56.0 61.0 68.5 76.5 80.5 91.0 ... 96.0 101.0 104.0 106.5 111.5 118.0 123.5 136.5 142.0 146.0 150.0 ... 157.0 158.0];
y1=[44.0 45.0 47.0 50.0 50.0 38.0 30.0 30.0 34.0 36.0 34.0 41.0 45.0 46.0 ... 43.0 37.0 33.0 28.0 32.0 65.0 55.0 54.0 52.0 50.0 66.0 66.0 68.0]; y2=[44.0 59.0 70.0 72.0 93.0 100.0 110.0 110.0 110.0 117.0 118.0 116.0 ...
118.0 118.0 121.0 124.0 121.0 121.0 121.0 122.0 116.0 83.0 81.0 ... 82.0 86.0 85.0 68.0]; newx=7:0.1:158;
newy1=interp1(x,y1,newx,'linear'); newy2=interp1(x,y2,newx,'linear');
area=sum((newy2-newy1)*0.1/18^2*1600)
area =
4.2414e+004
结果分析:对于方法一(插值更光滑),采用随机投点法结合分段三次插值模拟上下边界,求国土面积;方法二(简单,实用,不光滑),同样采取随机投点法,但结合分段线性插值模拟边界求解。可以看出方法二得出的结果要比方法一得出的结果相对精确值更接近些,说明国土边界是不规则,不光滑的。方法一、二都各有所长。
补充4.完成p96人口增长率
要求:1)编程计算p96表格显示的增长率 2)编程计算1980年人口
x=1900:10:2000
y=[76.0 92.0 106.5 123.2 131.7 150.7 179.3 204.0 226.5 251.4 281.4]
r(1)=(-3*y(1)+4*y(2)-y(3))/20/y(1) r(11)=(y(9)-4*y(10)+3*y(11))/20/y(11) for i=2:10
r(i)=(y(i+1)-y(i-1))/20/y(i) end r
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库专题3-4 插值与拟合+数值微分积分(4)在线全文阅读。
相关推荐: