- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算方法
实
验
指
导
书
彭彬
计算机技术实验中心
2012年3月
· 实验环境: VC++ 6.0
· 实验要求:在机房做实验只是对准备好的实验方案进行验证,因此上机前要检查实验准备情况,通过
检查后方可上机。没有认真准备的学生不能上机,本次实验没有分数。实验中要注意考察
和体会数值计算中出现的一些问题和现象:误差的估计 , 算法的稳定性、收敛性、收敛速度
以及迭代初值对收敛的影响等。
· 关于计算精度:如果没有特别说明,在计算的过程中,小数点后保留 5 位数字,最后四舍五入到小数
点后四位数字。迭代运算的结束条件统一为 1 10 5 。在 VC++ 6.0 中,可使用
2
setprecision 在流的输出中控制浮点数的显示(缺省显示 6 位)。演示如下:
# includeiostream.h
# includemath.h
# includeiomanip.h
// 输出 6 位精度,输出左对齐
coutsetprecision(6)setiosflags(ios::left);
// 设置输出宽度为 12(不够将补充 0)
coutsetw(12)coeff[i];
· 关于图形绘制
本课程个别实验要求画出函数的曲线,所有画图题目均要求用 MFC 完成。
利用 VC++6.0 的 MFC 画图,先要建立一个工程,然后在 ***View 中加入自定义变量、自定义函数等,最
后在 OnDraw ()方法中调用自定义函数。也可以把代码直接写入 OnDraw ()方法中。
画曲线有两种方法,(一)一句坐标逐个打点(用 SetPixel() 函数 ),(二)先把当前光标移动
MoveTo ()函数)到曲线的始点,再用 LineTo () 函数画线。线的样式由画笔决定。对封闭区域可以填充,填充的样式由画刷决定 。
在 VC++6.0 中 , 先新建一个 MFC AppWizard(exe) 类型的工程 ( 建立工程时,“ 应用程序类型 ”选择
“单文档”;“ 是否包含数据库 ”选择“不包含数据库”;其它选择缺省 ), 然后在“ ClassView ”中选择
XXView 类文件加以操作。图 1 是一个名为 test 的工程,在 CtestView 节点,点击右键,用户可以增加自定义变量,自定义函数。
第 1 页
图1 MFC工程
图 2 是一个自定义函数的例子,代码如下:
void CTestView::drawOldLine(int N, CDC *pDC) //N —画线所用点的数目
{
pDC-TextOut(250,10, 龙格现象 );// 文本输出
设置画笔,将影响画线的样式
CPen *pnewPen,*poldPen;
pnewPen=new CPen();
pnewPen-CreatePen(PS_SOLID,10,RGB(0,0,0));
poldPen=pDC-SelectObject(pnewPen);
画坐标系
pDC-MoveTo(0,380); pDC-LineTo(640,380);
pDC-MoveTo(320,0); pDC-LineTo(320,480);
画曲线 , 先移动到本曲线的第一个点
pDC-MoveTo(20,380);
for(int i=0;i=N;i++){
// 原始坐标
float x0=-1+2.0/N*i;float y0=1.0/(1+4*x0*x0);
坐标放大
x0=x0*300;y0=-y0*300;
坐标转化为整型
int x1=(int)(320+x0);int y1=(int)(440+y0);
pDC-LineTo(x1,y1);
}
重置画笔
pDC-SelectObject(poldPen);
}
第 2 页
图 2 自定义函数画函数
f (x )
1
的图形
1
4 x2
图 3 是一个根据 Lagrange 插值多项式求函数值的自定义函数
Lagrange(float x, int n, float
x1[], float y1[])
,其中 n 是插值节点的个数,数组
X1,y1 存放插值节点的坐标,
x 是待求点的 x 坐
标,函数根据插值多项式返回对应的
y 坐标。
float CTestView::Lagrange(float x, int n, float x1[], float y1[])
{
float y=0;//
存放函数值
int k=0;//
控制变量 , 求 lagrange
基函数的值
for( k=0;kn;k++)
{
float t=1;
for (int j=0;jn;j++)
{
if (j!=k)
t=t*(x-x1[j])/(x1[k]-x1[j]);
}
y=y+t*y1
文档评论(0)