数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx

上传人:b****9 文档编号:23326722 上传时间:2023-05-16 格式:DOCX 页数:16 大小:259.18KB
下载 相关 举报
数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx_第1页
第1页 / 共16页
数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx_第2页
第2页 / 共16页
数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx_第3页
第3页 / 共16页
数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx_第4页
第4页 / 共16页
数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx

《数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx(16页珍藏版)》请在冰豆网上搜索。

数值分析实验报告 用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现.docx

数值分析实验报告用样条插值法插值的方法生成字体T的轮廓高斯消去法的实现

实验报告

 

实验课程:

数值分析

学生代号:

信念

学号:

5215201314

专业班级:

网络间谍088班

 

2010年12月20日

 

目录

 

一、用样条插值法插值的方法生成字体T的轮廓………………………3

二、高斯消去法的实现………………………………………………8

 

南昌大学实验报告一

学生代号:

信念学号:

5215201314专业班级:

网络间谍088班

实验类型:

□验证□综合■设计□创新实验日期:

2010.11.4实验成绩:

一、实验目的

1:

用样条插值的方法生成字体T的轮廓

2:

C或C++语言用Bezier曲线生成并编写程序

二、实验基本原理和内容

Times-Roman字体:

T

P0x 

P0y 

P1x 

P1y

P2x

P2y

P3x

P3y

237

620

237

620

237

120

237

120

237

120

237

35

226

24

143

19

143

19

143

19

143

0

143

0

143

0

143

0

435

0

435

0

435

0

435

0

435

19

435

19

435

19

353

23

339

36

339

109

339

109

339

108

339

620

339

620

339

620

507

620

529

602

552

492

552

492

552

492

576

492

576

492

576

492

576

492

570

662

570

662

570

662

570

662

6

662

6

662

6

662

6

662

0

492

0

492

0

492

0

492

24

492

24

492

24

492

48

662

71

620

183

620

183

620

183

620

237

620

237

620

Bezier曲线生成:

1、确定曲线的阶次;2计算Bernstein基函数的表达式:

生成字体T

共分成15段,每段用了三次的代数方程,用Bezier曲线生成

 

当n=3时

其中

3把Bezier曲线中的Pk写成分量坐标的形式

4确定一合适的步长;控制t从0到1变化,求出一系列(x,y)坐标点;将其用小线段顺序连接起来。

算法描述:

对于二维平面的情况,只有x,y坐标分量,可以给出四点三次Bezier曲线如下的算法描述:

输入:

阶次,3;控制顶点:

4个,(x0,y0),…,(x3,y3)

begin

x=x0

y=y0

moveto(x,y)

fort﹦0to1stept

x﹦B0,3(t)x0﹢B1,3(t)x1﹢B2,3(t)x2﹢B3,3(t)x3

y﹦B0,3(t)y0﹢B1,3(t)y1﹢B2,3(t)y2﹢B3,3(t)y3

lineto(x,y)

endfor

end

三次Bezier曲线例子:

对于平面上给定的7个控制点坐标分别为:

A(100,300),B(120,200),C(220,200),D(270,100),E(370,100),F(420,200),G(420,300)。

画出其三次Bezier曲线:

三、主要仪器设备及耗材

PC微机

Windows操作系统

MicrosoftVisualStudio6.0集成开发环境

MicrosoftVisualStudio6.0集成开发环境的MSDN

四、实验程序及运行结果

实验程序代码如下

voidCCharTView:

:

OnDraw(CDC*pDC)

{

CCharTDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(!

pDoc)

return;

pDC->SetMapMode(MM_LOENGLISH);

pDC->SetViewportOrg(350,500);

floati=0.00;

for(i=0;i<1;i+=0.001)

{

pDC->SetPixel(CalPoint(CPoint(237,620),CPoint(237,620),CPoint(237,120),CPoint(237,120),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(237,120),CPoint(237,35),CPoint(226,24),CPoint(143,19),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(143,19),CPoint(143,19),CPoint(143,0),CPoint(143,0),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(143,0),CPoint(143,0),CPoint(435,0),CPoint(435,0),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(435,0),CPoint(435,0),CPoint(435,19),CPoint(435,19),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(435,19),CPoint(353,23),CPoint(339,36),CPoint(339,109),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(339,109),CPoint(339,108),CPoint(339,620),CPoint(339,620),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(339,620),CPoint(507,620),CPoint(519,662),CPoint(552,492),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(552,492),CPoint(552,492),CPoint(576,492),CPoint(576,492),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(576,492),CPoint(576,492),CPoint(570,662),CPoint(570,662),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(570,662),CPoint(570,662),CPoint(6,662),CPoint(6,662),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(6,662),CPoint(6,662),CPoint(0,492),CPoint(0,492),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(0,492),CPoint(0,492),CPoint(24,492),CPoint(24,492),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(24,492),CPoint(48,662),CPoint(71,620),CPoint(183,620),i),RGB(255,0,0));

pDC->SetPixel(CalPoint(CPoint(183,620),CPoint(183,620),CPoint(237,620),CPoint(237,620),i),RGB(255,0,0));

}

CPointCCharTView:

:

CalPoint(CPointpoint0,CPointpoint1,CPointpoint2,CPointpoint3,floatt)

{

CPointpt;

pt.x=point0.x*(1-t)*(1-t)*(1-t)+point1.x*3*t*(1-t)*(1-t)+point2.x*3*(t*t)*(1-t)+point3.x*(t*t*t);

pt.y=point0.y*(1-t)*(1-t)*(1-t)+point1.y*3*t*(1-t)*(1-t)+point2.y*3*(t*t)*(1-t)+point3.y*(t*t*t);

returnpt;

}

}

运行结果显示为:

 

南昌大学实验报告二

学生代号:

信念学号:

5215201314专业班级:

网络间谍088班

实验类型:

□验证□综合■设计□创新实验日期:

2010-12-5实验成绩:

一、实验目的

用C语言或C++语言编程实现高斯消去法。

二、实验基本原理和内容

基本思想:

用高斯消去法求解线性方程组的基本思想是设法消去方程组的系数矩阵A的主对角线下的元素,而将Ax=b化为等价的上三角形方程组,然后再通过回代过程便可以获得方程组的解。

这种解线性方程组的方法,常称为高斯消去法。

高斯消去法算法的构造:

记方程组AX=b为A

(1)X=b

(1),其中,A

(1)和b

(1)的元素分别记为

Step1:

第一次消元

,将增广矩阵的第i行减去

倍,(i=2,…,n),目的是将增广矩阵的第一列内除每一个元素不变外,其余全部消为零,得到A

(2)X=b

(2),即

其中

Step2:

第k次消元(

设第k-1次消元已完成,且

,得到A(k)X=b(k),即

计算因子

如此反复,经过n-1次消元之后得到一个与原方程组等价的上三角形方程组.

Step3:

回代

只要

就可以回代求解

高斯消去法的算法

Step1消元:

对k=1,2,…,n-1

则停止计算

对i=k+1,k+2,…,n

计算因子

;

对j=k+1,k+2,…,n

计算

;

Step2回代:

对i=n,n-1,…,1

(高斯消去法的条件)

若A的所有顺序主子式均不为0,则高斯消元无需换行即可进行到底,且得到唯一解.

若消元过程中允许对增广矩阵进行行交换,则方程组Ax=b可用消去法求解的充要条件是A可逆.

三、主要仪器设备及耗材

PC机一台PC微机

Windows操作系统

MicrosoftVisualStudio6.0集成开发环境

四、实验程序及运行结果

高斯消元法实验程序代码如下:

#include

#include

#defineN10//矩阵大小范围

/*

*使用已经求出的x,向前计算x(供getx()调用)

*floata[][]系数矩阵

*floatx[]方程组解

*inti解的序号

*intn矩阵大小

*return公式中需要的和

*/

floatgetm(floata[N][N],floatx[N],inti,intn)

{

floatm=0;

intr;

for(r=i+1;r

{

m+=a[i][r]*x[r];

}

returnm;

}

/*

*解方程组,计算x

*floata[][]系数矩阵

*floatb[]右端项

*floatx[]方程组解

*inti解的序号

*intn矩阵大小

*return方程组的第i个解

*/

floatgetx(floata[N][N],floatb[N],floatx[N],inti,intn)

{

floatresult;

if(i==n-1)//计算最后一个x的值

result=float(b[n-1]/a[n-1][n-1]);

else//计算其他x值(对于公式中的求和部分,需要调用getm()函数)

result=float((b[i]-getm(a,x,i,n))/a[i][i]);

returnresult;

}

voidmain()

{

//floata[N][N]={{2,1,1},{1,3,2},{1,2,2}};

//floatb[N]={4,6,5};

floata[N][N];//系数矩阵

floatb[N];//右端项

floatx[N];//方程组解

inti,j,k;

intn=N;//矩阵大小

/*用户手工输入矩阵*/

printf("请输入系数矩阵的大小:

");

scanf("%d",&n);

printf("请连续输入矩阵值:

");

for(i=0;i

{

for(j=0;j

scanf("%f",&a[i][j]);

}

printf("请输入右端项:

");

for(i=0;i

{

scanf("%f",&b[i]);

}

/*显示原始矩阵*/

printf("\n原始矩阵\n");

for(i=0;i

{

for(j=0;j

printf("%f",a[i][j]);

printf("\t|\t%f\n",b[i]);

}

printf("\n\n");

/*进行高斯消去*/

for(j=0;j

{

for(i=j+1;i

{

floatm=(float)(a[i][j]/a[j][j]);

for(k=j;k

{

a[i][k]=a[i][k]-m*a[j][k];

}

b[i]=b[i]-m*b[j];

}

}

/*显示处理后矩阵*/

printf("高斯消去后矩阵\n");

for(i=0;i

{

for(j=0;j

printf("%f",a[i][j]);

printf("\t|\t%f\n",b[i]);

}

/*回代方式解方程组*/

for(i=n-1;i>=0;i--)

{

x[i]=getx(a,b,x,i,n);

}

/*显示方程组解*/

printf("\n\n方程组解\n");

for(i=0;i

{

printf("x%d=%f\n",i+1,x[i]);

}

}

运行结果为:

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

当前位置:首页 > 教学研究 > 教学计划

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

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