数值分析实验报告.docx

上传人:b****2 文档编号:3247192 上传时间:2023-05-05 格式:DOCX 页数:22 大小:484.72KB
下载 相关 举报
数值分析实验报告.docx_第1页
第1页 / 共22页
数值分析实验报告.docx_第2页
第2页 / 共22页
数值分析实验报告.docx_第3页
第3页 / 共22页
数值分析实验报告.docx_第4页
第4页 / 共22页
数值分析实验报告.docx_第5页
第5页 / 共22页
数值分析实验报告.docx_第6页
第6页 / 共22页
数值分析实验报告.docx_第7页
第7页 / 共22页
数值分析实验报告.docx_第8页
第8页 / 共22页
数值分析实验报告.docx_第9页
第9页 / 共22页
数值分析实验报告.docx_第10页
第10页 / 共22页
数值分析实验报告.docx_第11页
第11页 / 共22页
数值分析实验报告.docx_第12页
第12页 / 共22页
数值分析实验报告.docx_第13页
第13页 / 共22页
数值分析实验报告.docx_第14页
第14页 / 共22页
数值分析实验报告.docx_第15页
第15页 / 共22页
数值分析实验报告.docx_第16页
第16页 / 共22页
数值分析实验报告.docx_第17页
第17页 / 共22页
数值分析实验报告.docx_第18页
第18页 / 共22页
数值分析实验报告.docx_第19页
第19页 / 共22页
数值分析实验报告.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数值分析实验报告.docx

《数值分析实验报告.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告.docx(22页珍藏版)》请在冰点文库上搜索。

数值分析实验报告.docx

数值分析实验报告

 

 

实验报告

实验课程:

数值分析

学生姓名:

学号:

专业班级:

 

2011年6月11日

南昌大学实验报告

---

(1)利用贝塞尔插值绘制字母“T”

学生姓名学号专业班级:

实验类型:

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

实验成绩:

1、实验目的

掌握贝塞尔插值方法,并能够利用该方法实现曲线的制作。

2、实验内容

利用贝塞尔曲线的插值方法,并根据相关数据,设计程序制作字母“T”和”5”。

3、实验要求

1根据实验中所给的坐标绘制出该字母“T”和”5”。

四、主要实验步骤及处理结果

(1)通过VC++6.0建立一个“helloworld”程序,在其中的源文件中加入“T”和“5”的实验数据和代码,调用API函数中的贝塞尔函数,绘出“T”和“5”的字形。

(2)在函数LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)后添加实验数据和代码如下:

HP[15][3]={{{237,42},{237,542},{237,542}},

{{237,627},{226,638},{143,643}},

{{143,643},{143,662},{143,662}},

{{143,662},{435,662},{435,662}},

{{435,662},{435,643},{435,643}},

{{353,639},{339,626},{339,553}},

{{339,554},{339,42},{339,42}},

{{507,42},{529,60},{552,170}},

{{552,170},{576,170},{576,170}},

{{576,170},{570,0},{570,0}},

{{570,0},{6,0},{6,0}},

{{6,0},{0,170},{0,170}},

{{0,170},{24,170},{24,170}},

{{48,60},{71,42},{183,42}},

{{183,42},{237,42},{237,42}}};

实验添加代码如下:

MoveToEx(hdc,237,42,NULL);

PolyBezierTo(hdc,HP[0],3);

PolyBezierTo(hdc,HP[1],3);

PolyBezierTo(hdc,HP[2],3);

PolyBezierTo(hdc,HP[3],3);

PolyBezierTo(hdc,HP[4],3);

PolyBezierTo(hdc,HP[5],3);

PolyBezierTo(hdc,HP[6],3);

PolyBezierTo(hdc,HP[7],3);

PolyBezierTo(hdc,HP[8],3);

PolyBezierTo(hdc,HP[9],3);

PolyBezierTo(hdc,HP[10],3);

PolyBezierTo(hdc,HP[11],3);

PolyBezierTo(hdc,HP[12],3);

PolyBezierTo(hdc,HP[13],3);

PolyBezierTo(hdc,HP[14],3)

绘制”T”字形实验实验代码如下:

#include"stdafx.h"

#include"T.h"

#defineMAX_LOADSTRING100

//GlobalVariables:

HINSTANCEhInst;//currentinstance

TCHARszTitle[MAX_LOADSTRING];//Thetitlebartext

TCHARszWindowClass[MAX_LOADSTRING];//Thetitlebartext

//Fowarddeclarationsoffunctionsincludedinthiscodemodule:

ATOMMyRegisterClass(HINSTANCEhInstance);

BOOLInitInstance(HINSTANCE,int);

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);

 

LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

intwmId,wmEvent;

PAINTSTRUCTps;

HDChdc;

POINTHP[15][3]={{{237,42},{237,542},{237,542}},{{237,627},{226,638},{143,643}},{{143,643},{143,662},{143,662}},

{{143,662},{435,662},{435,662}},{{435,662},{435,643},{435,643}},{{353,639},{339,626},{339,553}},

{{339,554},{339,42},{339,42}},{{507,42},{529,60},{552,170}},{{552,170},{576,170},{576,170}},

{{576,170},{570,0},{570,0}},{{570,0},{6,0},{6,0}},{{6,0},{0,170},{0,170}},

{{0,170},{24,170},{24,170}},{{48,60},{71,42},{183,42}},{{183,42},{237,42},{237,42}}};

POINTT_SHAPE;

TCHARszHello[MAX_LOADSTRING];

LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);

switch(message)

{

caseWM_COMMAND:

wmId=LOWORD(wParam);

wmEvent=HIWORD(wParam);

//Parsethemenuselections:

switch(wmId)

{

caseIDM_ABOUT:

DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);

break;

caseIDM_EXIT:

DestroyWindow(hWnd);

break;

default:

returnDefWindowProc(hWnd,message,wParam,lParam);

}

break;

caseWM_PAINT:

hdc=BeginPaint(hWnd,&ps);

//TODO:

Addanydrawingcodehere...

/*POINTHP[21][4]={{6,0},{570,0},{576,170},{552,170},{529,60},{507,42},{339,42},{339,626},{353,639},

{435,643},{435,662},{143,662},{143,643},{226,638},{237,627},{237,42},{71,42},{48,60},{24,170},

{0,170},{6,0}};*/

RECTrt;

MoveToEx(hdc,237,42,NULL);

PolyBezierTo(hdc,HP[0],3);

PolyBezierTo(hdc,HP[1],3);

PolyBezierTo(hdc,HP[2],3);

PolyBezierTo(hdc,HP[3],3);

PolyBezierTo(hdc,HP[4],3);

PolyBezierTo(hdc,HP[5],3);

PolyBezierTo(hdc,HP[6],3);

PolyBezierTo(hdc,HP[7],3);

PolyBezierTo(hdc,HP[8],3);

PolyBezierTo(hdc,HP[9],3);

PolyBezierTo(hdc,HP[10],3);

PolyBezierTo(hdc,HP[11],3);

PolyBezierTo(hdc,HP[12],3);

PolyBezierTo(hdc,HP[13],3);

PolyBezierTo(hdc,HP[14],3);

实验结果如下:

#include"stdafx.h"

#include"T.h"

#defineMAX_LOADSTRING100

//GlobalVariables:

HINSTANCEhInst;//currentinstance

TCHARszTitle[MAX_LOADSTRING];//Thetitlebartext

TCHARszWindowClass[MAX_LOADSTRING];//Thetitlebartext

//Fowarddeclarationsoffunctionsincludedinthiscodemodule:

ATOMMyRegisterClass(HINSTANCEhInstance);

BOOLInitInstance(HINSTANCE,int);

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);

LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

intwmId,wmEvent;

PAINTSTRUCTps;

HDChdc;

POINTFI[21][3]={{{149,105},{149,105},{345,105}},{{761,105},{365,103},{368,96}},{{406,7},{368,96},{406,7}},

{{397,0},{406,7},{397,0}},{{382,21},{372,26},{351,26}},{{351,26},{351,26},{142,26}},

{{33,263},{142,26},{33,263}},{{32,264},{32,266},{32,268}},{{32,274},{35,276},{44,276}},

{{74,276},{109,282},{149,294}},{{269,330},{324,392},{324,494}},{{324,590},{264,665},{185,665}},

{{165,665},{149,658},{119,636}},{{86,612},{65,603},{42,603}},{{14,603},{0,615},{0,640}},

{{0,678},{46,702},{121,702}},{{205,702},{282,675},{333,624}},{{378,579},{399,522},{399,446}},

{{399,375},{381,330},{333,280}},{{288,234},{232,211},{112,190}},{{112,190},{149,105},{149,105}}};

TCHARszHello[MAX_LOADSTRING];

LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);

switch(message)

{

caseWM_COMMAND:

wmId=LOWORD(wParam);

wmEvent=HIWORD(wParam);

//Parsethemenuselections:

switch(wmId)

{

caseIDM_ABOUT:

DialogBox(hInst,(LPCTSTR)IDD_ABOUTBOX,hWnd,(DLGPROC)About);

break;

caseIDM_EXIT:

DestroyWindow(hWnd);

break;

default:

returnDefWindowProc(hWnd,message,wParam,lParam);

}

break;

caseWM_PAINT:

hdc=BeginPaint(hWnd,&ps);

//TODO:

Addanydrawingcodehere...

MoveToEx(hdc,149,105,NULL);

PolyBezierTo(hdc,FI[0],3);

PolyBezierTo(hdc,FI[1],3);

PolyBezierTo(hdc,FI[2],3);

PolyBezierTo(hdc,FI[3],3);

PolyBezierTo(hdc,FI[4],3);

PolyBezierTo(hdc,FI[5],3);

PolyBezierTo(hdc,FI[6],3);

PolyBezierTo(hdc,FI[7],3);

PolyBezierTo(hdc,FI[8],3);

PolyBezierTo(hdc,FI[9],3);

PolyBezierTo(hdc,FI[10],3);

PolyBezierTo(hdc,FI[11],3);

PolyBezierTo(hdc,FI[12],3);

PolyBezierTo(hdc,FI[13],3);

PolyBezierTo(hdc,FI[14],3);

PolyBezierTo(hdc,FI[15],3);

PolyBezierTo(hdc,FI[16],3);

PolyBezierTo(hdc,FI[17],3);

PolyBezierTo(hdc,FI[18],3);

PolyBezierTo(hdc,FI[19],3);

PolyBezierTo(hdc,FI[20],3);

RECTrt;

GetClientRect(hWnd,&rt);

DrawText(hdc,szHello,strlen(szHello),&rt,DT_CENTER);

EndPaint(hWnd,&ps);

break;

caseWM_DESTROY:

PostQuitMessage(0);

break;

default:

returnDefWindowProc(hWnd,message,wParam,lParam);

}

return0;

}

(3)在代码LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

下添加实验数据如下:

HP[15][3]={{{237,42},{237,542},{237,542}},{{237,627},{226,638},{143,643}},{{143,643},{143,662},{143,662}},

{{143,662},{435,662},{435,662}},{{435,662},{435,643},{435,643}},{{353,639},{339,626},{339,553}},

{{339,554},{339,42},{339,42}},{{507,42},{529,60},{552,170}},{{552,170},{576,170},{576,170}},

{{576,170},{570,0},{570,0}},{{570,0},{6,0},{6,0}},{{6,0},{0,170},{0,170}},

{{0,170},{24,170},{24,170}},{{48,60},{71,42},{183,42}},{{183,42},{237,42},{237,42}}};

添加实验代码如下:

MoveToEx(hdc,237,42,NULL);

PolyBezierTo(hdc,HP[0],3);

PolyBezierTo(hdc,HP[1],3);

PolyBezierTo(hdc,HP[2],3);

PolyBezierTo(hdc,HP[3],3);

PolyBezierTo(hdc,HP[4],3);

PolyBezierTo(hdc,HP[5],3);

PolyBezierTo(hdc,HP[6],3);

PolyBezierTo(hdc,HP[7],3);

PolyBezierTo(hdc,HP[8],3);

PolyBezierTo(hdc,HP[9],3);

PolyBezierTo(hdc,HP[10],3);

PolyBezierTo(hdc,HP[11],3);

PolyBezierTo(hdc,HP[12],3);

PolyBezierTo(hdc,HP[13],3);

PolyBezierTo(hdc,HP[14],3);

 

南昌大学实验报告

---

(2)迭代法求方程组的解

学生姓名:

学号:

专业班级:

实验类型:

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

11.6.11实验成绩:

1、实验目的

1.掌握雅克比迭代方法求线性方程组的解

2.掌握高斯-赛德尔迭代求解线性方程组。

二、实验内容

编写程序实现雅克比迭代和高斯-赛德尔迭代求线性方程组

3、实验要求

1.了解迭代法求解线性方程的要求

2.了解迭代法求解线性方程组的优点和缺点

3.通过改进的迭代法理解各种算法的迭代速度

四、主要实验步骤及处理结果

雅克比算法设计思想:

首先需要对方程组进行变换使其变成X(k+1)=BX(k)+f的形式,使用一个二维数组A[N][N]存放系数矩阵,使用一个一维数组b[N]存放解向量(矩阵),再分别用K,K1两个一维矩阵存放迭代的解向量。

最后按照雅克比迭代思想不断进行迭代直到满足所需精度.

雅克比迭代主要代码:

#definecontrol13e-9//迭代所要达到的精度

#defineN100

voidmuti_matrix(doublea[][N],doubleb[],introw);//该函数为矩阵相乘是迭代的主调函数之一

voidadd_matrix(doublea[],doubleb[],introw);//该函数实现矩阵相加,也是主调函数

doubleSelectmax_row(doublea[],doubleb[],intn);//求矩阵的行范数,当范数达到所需精度时迭代终止。

boolis_ok(doublea[][N],intn);//判断迭代是否收敛

intmain()

{

doubleA[N][N]={0};//存放初始时的系数矩阵(为进行转换)

doubleb[N]={0};//存放各方程式的解向量

doubleK[N]={0};//存放X初始向量

doubleK1[N];//存放每次计算的前一个解向量,主要为计算行范数.

inti,j;

intn;

doublevalue=0;

doublecondition=10000;

printf("请输入矩阵的阶数:

");

scanf("%d",&n);

printf("请输入你要输入的各方程组的系数(按矩阵方式输入):

\n");

for(i=0;i

printf("\t");

for(j=0;j

scanf("%lf",&A[i][j]);

}

printf("请输入各方程式的解向量:

\n\t");

for(i=0;i

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

for(i=0;i

b[i]=b[i]/A[i][i];

value=A[i][i];

for(j=0;j

A[i][j]=-A[i][j]/value;

A[i][i]=0;

}

printf("输出计算后的初始矩阵:

\n");

for(i=0;i

printf("\n");

for(j=0;j

printf("%.3lf",A[i][j]);

}

printf("\n");

if(!

is_ok(A,n)){//判断迭代是否满足迭代的条件

printf("迭代不收敛\n");

exit(0);

}

printf("请输出计算后的b向量(也就是f)\n");

for(i=0;i

printf("%.3lf",b[i]);

printf("\n");

printf("请输入迭代的初始矩阵K2:

\n");

for(i=0;i

scanf("%lf",&K[i]);

while(condition>control){//condition为精度要求的控制条件

for(i=0;i

K1[i]=K[i];

muti_matrix(A,K,n);

add_matrix(K,b,n);

condition=Selectmax_row(K,K1,n);

printf("请输出计算后的初始矩阵:

\n");

for(i=0;i

printf("%.8lf",K[i]);

}

printf("矩阵的范数:

%.8lf",Selectmax_row(K,K1,n)

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2