工数上机编程解题.docx

上传人:b****6 文档编号:8956703 上传时间:2023-02-02 格式:DOCX 页数:14 大小:138.62KB
下载 相关 举报
工数上机编程解题.docx_第1页
第1页 / 共14页
工数上机编程解题.docx_第2页
第2页 / 共14页
工数上机编程解题.docx_第3页
第3页 / 共14页
工数上机编程解题.docx_第4页
第4页 / 共14页
工数上机编程解题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

工数上机编程解题.docx

《工数上机编程解题.docx》由会员分享,可在线阅读,更多相关《工数上机编程解题.docx(14页珍藏版)》请在冰豆网上搜索。

工数上机编程解题.docx

工数上机编程解题

工科数学分析基础

上机实验报告

班级:

学号:

姓名:

 

一、微分方程

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的方程为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1