工数上机编程解题.docx
- 文档编号:8956703
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:14
- 大小:138.62KB
工数上机编程解题.docx
《工数上机编程解题.docx》由会员分享,可在线阅读,更多相关《工数上机编程解题.docx(14页珍藏版)》请在冰豆网上搜索。
工数上机编程解题
工科数学分析基础
上机实验报告
班级:
学号:
姓名:
一、微分方程
1.1题目:
在一条宽为20米的道路两旁,分别安装了一只2kw和一只3kw的路灯,它们里地面的高度肺部为5m和6m。
在漆黑的夜晚,当两只路灯同时开启的时候,
求:
(1)两只路灯连线的路面上最暗的点和最亮的点分别在哪里?
(2)如果3kw的路灯高度可以在3m到9m之间变化,如何使路面上最暗点的亮度最大?
1.2算法:
利用迭代法来解微分方程
1.2.1第一小问N—S流程图:
1.2.2第二小问N—S流程图:
1.3程序:
1.3.1第一问:
#include
intmain()
{
doublef(doublex);
doubleb1,b2,a1=0,a2=0,i;
b1=f(0);
b2=f(0);
for(i=0;i<=20;i=i+0.0001)
{
if(b1>f(i))
{
b1=f(i);
a1=i;
}
}
for(i=0;i<=20;i=i+0.0001)
{
if(b2 { b2=f(i); a2=i; } } printf("两只路灯连线的路面上最暗点是%lf最亮点是%lf\n",a1,a2); return0; } doublef(doublex) { doublez; z=2/(25+x*x)+3/((20-x)*(20-x)+36); return(z); } 1.3.2第二问: #include intmain() { doubleg(doublex,doubley); doublemin1,min2,i,j,h1=3,q; min1=g(0,3); min2=g(0,3); for(i=3.0;i<=9;i=i+0.01) { for(j=0.0;j<=20;j=j+0.01)/*求出给定H的最暗点的亮度*/ { q=g(j,i); if(min2>q) min2=q; } if(min1 { min1=min2; h1=i; } } printf("当3w的路灯高为%lf时可以使路灯之间最暗的点亮度最大\n",h1); return0; } doubleg(doublex,doubley) { doublez; z=2.0/(25.0+x*x)+3.0/((20.0-x)*(20.0-x)+y*y); return(z); } 1.4运行结果: 1.4.1第一问: 两只路灯连线的路面上 最暗点距离第一个路灯9.430100米最亮点距离第一个路灯19.903000米 1.4.2第二问: 第二个路灯最佳高度为3.000米 1.5分析: 1.5.1第一问: 路灯是点光源s,空间内任何一点m的亮度与s、m两点之间的距离的平方成反比。 设: x为路面上的点与5m路灯之间的水平距离 单位: m 路灯S2 把Q(i)的值作为亮度指标,比较两个点Q(i)的大小。 当x从0到20过程中,通过不断的比较,程序自动筛选出Q(i)最小的点 与Q(i)最大的点 。 图1—1 是亮度最小的点, 是亮度最大的点。 1.5.2第二问: 路灯S2 单位: m 路灯S2的h在变,对于每个 ,在路面上 都对应一个最暗的点 ,以及该点的亮度 指标 。 在从3变到9的过程中,把最大的 找出来, 图1—2 此时对应的 就是所求的高度。 二、牛顿法求方程近似根 2.1题目: 利用切线法求方程的近似解 2.2算法: 运用牛顿算法 用N—S流程图 2.3程序: #include #include #include intmain() { doubleaver(doublex); doublevalue(doubley); doublea,b=0; scanf("%lf",&a); do { a=a-b/value(a); b=aver(a); } while(fabs(b)>1e-6); printf("该方程的解是%lf\n",a); return0; } doubleaver(doublex) { doublesum=0; sum=x*x*x-2*x-5; return(sum); } doublevalue(doubley) { doubleval=0; val=3*y*y-2; return(val); } 2.4运行结果: x=2.094551 2.5分析: 1.设置函数 使得 2.任取一个数x,代入函数 ,比较 与0的大小,若 与0偏差较大,取点 曲线上(x, )点的切线与x轴交点横坐标x’ 3.把x’代入 重复步骤2直到 无限趋近于0为止 三、最小二乘法 3.1题目: 通过实验,测得x,y的一组数据 X Y 0.5 0.0001 1.5 1.9998 2.5 4.0010 3.5 5.9980 4.5 8.0001 5.5 10.00010 由经验可知x与y是线性关系,试用最小二乘法求y的表达式。 3.2算法: 运用最小二乘法 N—S流程图表示算法 3.3程序: #include intmain() { doublequadsum(doublea[6]); doublealgesum(doublea[6]); doublepsum(doublea[6],doubleb[6]); doubleempfor1(doublea[6],doubleb[6]); doubleempfor2(doublea[6],doubleb[6]); doublem,n; doublea[6]={0.5,1.5,2.5,3.5,4.5,5.5}; doubleb[6]={0.0001,1.9998,4.0010,5.9980,8.001,10.00010}; m=empfor1(a,b); n=empfor2(a,b); printf("y=%lf*x+(%lf)\n",m,n); return0; } doublequadsum(doublea[6])/*平方和函数*/ { doublesum=0; inti; for(i=0;i<6;i++) sum=sum+a[i]*a[i]; return(sum); } doublealgesum(doublea[6])/*代数和函数*/ { doublesum=0; inti; for(i=0;i<6;i++) sum=sum+a[i]; return(sum); } doublepsum(doublea[6],doubleb[6])/*乘积和函数*/ { doubleQ=0; inti; for(i=0;i<6;i++) Q=Q+a[i]*b[i]; return(Q); } doubleempfor1(doublea[6],doubleb[6])/*经验公式1*/ { doublem,x,y1,y2,z; x=quadsum(a);/*a的平方和*/ y1=algesum(a);/*a的代数和*/ y2=algesum(b);/*b的代数和*/ z=psum(a,b);/*a与b的乘积和*/ m=(6*z-y1*y2)/(6*x-y1*y1); return(m); } doubleempfor2(doublea[6],doubleb[6])/*经验公式2*/ { doublen,x,y1,y2,z; x=quadsum(a);/*a的平方和*/ y1=algesum(a);/*a的代数和*/ y2=algesum(b);/*b的代数和*/ z=psum(a,b);/*a与b的乘积和*/ n=(z*y1-x*y2)/(y1*y1-6*x); return(n); } 3.4运行结果: 3.5分析: 题目已经给出x与y是线性关系,于是可以直接求与测量值的偏差平方之和 设x与y之间的函数关系是y=ax+b,其中常数a,b待定。 由最小二乘法知道,问题变为求二元函数 的最小值。 利用多元函数极值的必要条件,得 整理化简,得 最终解得方程的 的唯一驻点a=2.000057,b=-1.000051 所求y的方程为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 编程 解题