1341901124武易计算方法.docx

上传人:b****5 文档编号:29985775 上传时间:2023-08-04 格式:DOCX 页数:97 大小:266.48KB
下载 相关 举报
1341901124武易计算方法.docx_第1页
第1页 / 共97页
1341901124武易计算方法.docx_第2页
第2页 / 共97页
1341901124武易计算方法.docx_第3页
第3页 / 共97页
1341901124武易计算方法.docx_第4页
第4页 / 共97页
1341901124武易计算方法.docx_第5页
第5页 / 共97页
点击查看更多>>
下载资源
资源描述

1341901124武易计算方法.docx

《1341901124武易计算方法.docx》由会员分享,可在线阅读,更多相关《1341901124武易计算方法.docx(97页珍藏版)》请在冰豆网上搜索。

1341901124武易计算方法.docx

1341901124武易计算方法

计算方法实验报告

1341901124武易计算机科学与技术

实验一——插值方法

一实验目的

通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/TurboC)编程实现数值方法的求解。

并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。

二实验内容

通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。

取点越密集,所得折线就越逼近理论上的插值曲线。

本实验中将所取的点的横坐标存放于动态数组

中,通过插值方法计算得到的对应纵坐标存放于动态数组

中。

三源程序清单

Cahzhi.cpp

//cahzhi.cpp:

定义应用程序的入口点。

//

#include"stdafx.h"

#include"cahzhi.h"

#include"resource.h"

#include"defSelf.h"

#include

#include

usingnamespacestd;

#defineMAX_LOADSTRING100

//全局变量:

HINSTANCEhInst;//当前实例

WCHARszTitle[MAX_LOADSTRING];//标题栏文本

WCHARszWindowClass[MAX_LOADSTRING];//主窗口类名

WCHARerrorMsg[MAX_LOADSTRING];

vectorvp;//取点

vectorwvp;//相应窗体点

POINToriWin;//原点

//此代码模块中包含的函数的前向声明:

ATOMMyRegisterClass(HINSTANCEhInstance);

BOOLInitInstance(HINSTANCE,int);

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

INT_PTRCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);

intAPIENTRYwWinMain(_In_HINSTANCEhInstance,

_In_opt_HINSTANCEhPrevInstance,

_In_LPWSTRlpCmdLine,

_In_intnCmdShow)

{

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

//TODO:

在此放置代码。

//初始化全局字符串

LoadStringW(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);

LoadStringW(hInstance,IDC_CAHZHI,szWindowClass,MAX_LOADSTRING);

LoadStringW(hInstance,IDS_ERROR,errorMsg,MAX_LOADSTRING);

MyRegisterClass(hInstance);

//执行应用程序初始化:

if(!

InitInstance(hInstance,nCmdShow))

{

returnFALSE;

}

HACCELhAccelTable=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_CAHZHI));

MSGmsg;

//主消息循环:

while(GetMessage(&msg,nullptr,0,0))

{

if(!

TranslateAccelerator(msg.hwnd,hAccelTable,&msg))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

return(int)msg.wParam;

}

 

//

//函数:

MyRegisterClass()

//

//目的:

注册窗口类。

//

ATOMMyRegisterClass(HINSTANCEhInstance)

{

WNDCLASSEXWwcex;

wcex.cbSize=sizeof(WNDCLASSEX);

wcex.style=CS_HREDRAW|CS_VREDRAW;

wcex.lpfnWndProc=WndProc;

wcex.cbClsExtra=0;

wcex.cbWndExtra=0;

wcex.hInstance=hInstance;

wcex.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_CAHZHI));

wcex.hCursor=LoadCursor(nullptr,IDC_ARROW);

wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName=MAKEINTRESOURCEW(IDC_CAHZHI);

wcex.lpszClassName=szWindowClass;

wcex.hIconSm=LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_SMALL));

returnRegisterClassExW(&wcex);

}

//

//函数:

InitInstance(HINSTANCE,int)

//

//目的:

保存实例句柄并创建主窗口

//

//注释:

//

//在此函数中,我们在全局变量中保存实例句柄并

//创建和显示主程序窗口。

//

BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)

{

hInst=hInstance;//将实例句柄存储在全局变量中

HWNDhWnd=CreateWindowW(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,0,CW_USEDEFAULT,0,nullptr,nullptr,hInstance,nullptr);

if(!

hWnd)

{

returnFALSE;

}

ShowWindow(hWnd,nCmdShow);

UpdateWindow(hWnd);

returnTRUE;

}

//

//函数:

WndProc(HWND,UINT,WPARAM,LPARAM)

//

//目的:

处理主窗口的消息。

//

//WM_COMMAND-处理应用程序菜单

//WM_PAINT-绘制主窗口

//WM_DESTROY-发送退出消息并返回

//

//

LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

staticintcxClient,cyClient;

staticPOINTcurPoint;

staticuint16_tchoiceL=0,choiceN=0,choiceS=0;

staticTCHARcurCoor[10];

staticintcoorLen;

staticRECTtxtRect;

SetRect(&txtRect,0,0,100,20);

vLConverToW(vp,oriWin,wvp);

staticvectorvpDeal;

vpDeal.clear();

vpDeal=pointDeal(vp);

switch(message)

{

caseWM_COMMAND:

{

intwmId=LOWORD(wParam);

//分析菜单选择:

switch(wmId)

{

caseID_RDPT:

rnPointCt(vp,-cxClient/2,cxClient/2,-cyClient/2,cyClient/2,5);

InvalidateRect(hWnd,NULL,true);

break;

caseID_LARGERANGE:

if(vp.size()){

choiceL=true;

InvalidateRect(hWnd,NULL,false);

}

break;

caseID_NEWTON:

if(vp.size()){

choiceN=true;

InvalidateRect(hWnd,NULL,false);

}

break;

caseID_SPLINE:

if(vp.size()){

choiceS=true;

InvalidateRect(hWnd,NULL,false);

}

break;

caseID_CLEAR:

vp.clear();

choiceL=choiceN=choiceS=false;

InvalidateRect(hWnd,NULL,true);

break;

caseIDM_ABOUT:

DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About);

break;

caseIDM_EXIT:

DestroyWindow(hWnd);

break;

default:

returnDefWindowProc(hWnd,message,wParam,lParam);

}

}

break;

caseWM_SIZE:

{

cxClient=LOWORD(lParam);

cyClient=HIWORD(lParam);

oriWin.x=cxClient/2;

oriWin.y=cyClient/2;

}

break;

caseWM_LBUTTONDOWN:

{

curPoint.x=LOWORD(lParam)-oriWin.x;

curPoint.y=oriWin.y-HIWORD(lParam);

vp.push_back(curPoint);

InvalidateRect(hWnd,NULL,true);

}

break;

caseWM_MOUSEMOVE:

{

curPoint.x=LOWORD(lParam)-oriWin.x;

curPoint.y=oriWin.y-HIWORD(lParam);

InvalidateRect(hWnd,&txtRect,true);

}

break;

caseWM_PAINT:

{

PAINTSTRUCTps;

HDChdc=BeginPaint(hWnd,&ps);

//TODO:

在此处添加使用hdc的任何绘图代码...

//创建并选中画笔和画刷

HPENhPen,hOldPen;

LOGBRUSHlogBrush;

HBRUSHhBrush,hOldBrush;

hPen=CreatePen(PS_SOLID,1,RGB(0,0,0));

hOldPen=(HPEN)SelectObject(hdc,hPen);

logBrush.lbColor=RGB(10,220,10);

logBrush.lbHatch=HS_CROSS;

logBrush.lbStyle=BS_SOLID;

hBrush=CreateBrushIndirect(&logBrush);

hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);

//cursor

coorLen=wsprintf(curCoor,TEXT("(%d,%d)"),curPoint.x,curPoint.y);

DrawText(hdc,curCoor,coorLen,&txtRect,DT_CENTER);

//绘坐标

//x轴

MoveToEx(hdc,0,cyClient/2,NULL);

LineTo(hdc,cxClient,cyClient/2);

LineTo(hdc,cxClient-5,cyClient/2-5);

MoveToEx(hdc,cxClient,cyClient/2,NULL);

LineTo(hdc,cxClient-5,cyClient/2+5);

TextOut(hdc,cxClient-10,cyClient/2+5,TEXT("x"),1);

//y轴

MoveToEx(hdc,cxClient/2,cyClient,NULL);

LineTo(hdc,cxClient/2,0);

LineTo(hdc,cxClient/2-5,5);

MoveToEx(hdc,cxClient/2,0,NULL);

LineTo(hdc,cxClient/2+5,5);

TextOut(hdc,cxClient/2+5,5,TEXT("y"),1);

TextOut(hdc,cxClient/2-10,cyClient/2+5,TEXT("O"),1);

//绘说明

hPen=(HPEN)SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(255,25,25)));

MoveToEx(hdc,8*cxClient/10,cyClient/10,NULL);

LineTo(hdc,9*cxClient/10,cyClient/10);

TextOut(hdc,9*cxClient/10+5,cyClient/10-6,TEXT("Largrange"),9);

DeleteObject(SelectObject(hdc,hPen));

hPen=(HPEN)SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(25,255,25)));

MoveToEx(hdc,8*cxClient/10,cyClient/10+20,NULL);

LineTo(hdc,9*cxClient/10,cyClient/10+20);

TextOut(hdc,9*cxClient/10+5,cyClient/10+20-6,TEXT("Newton"),6);

DeleteObject(SelectObject(hdc,hPen));

hPen=(HPEN)SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(25,25,255)));

MoveToEx(hdc,8*cxClient/10,cyClient/10+40,NULL);

LineTo(hdc,9*cxClient/10,cyClient/10+40);

TextOut(hdc,9*cxClient/10+5,cyClient/10+40-6,TEXT("Spline"),6);

DeleteObject(SelectObject(hdc,hPen));

//绘随机点

for(size_ti=0;i

{

Ellipse(hdc,wvp[i].x-3,wvp[i].y-3,wvp[i].x+3,wvp[i].y+3);

}

//绘插值曲线

if(choiceL)

{

POINTtPoint;

hPen=(HPEN)SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(255,25,25)));

MoveToEx(hdc,-5,0,NULL);

for(intx=-cxClient/2;x

{

tPoint.x=x;

tPoint.y=Largrange(vpDeal,tPoint.x);

LineTo(hdc,LConvertToW(oriWin,tPoint).x,LConvertToW(oriWin,tPoint).y);

}

DeleteObject(SelectObject(hdc,hPen));

}

if(choiceN){

POINTtPoint;

hPen=(HPEN)SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(25,255,25)));

MoveToEx(hdc,-5,0,NULL);

for(intx=-cxClient/2;x

{

tPoint.x=x;

tPoint.y=Newton(vpDeal,tPoint.x);

LineTo(hdc,LConvertToW(oriWin,tPoint).x,LConvertToW(oriWin,tPoint).y);

}

DeleteObject(SelectObject(hdc,hPen));

}

if(choiceS){

POINTtPoint;

hPen=(HPEN)SelectObject(hdc,CreatePen(PS_SOLID,1,RGB(25,25,255)));

for(intx=vpDeal[0].x,i=0;x<=vpDeal[vp.size()-1].x;x++,i++)

{

tPoint.x=x;

tPoint.y=spline(10,vpDeal,-10,tPoint.x);

if(i==0)

MoveToEx(hdc,LConvertToW(oriWin,tPoint).x,LConvertToW(oriWin,tPoint).y,NULL);

LineTo(hdc,LConvertToW(oriWin,tPoint).x,LConvertToW(oriWin,tPoint).y);

}

DeleteObject(SelectObject(hdc,hPen));

}

DeleteObject(hPen);

SelectObject(hdc,hOldPen);

DeleteObject(hBrush);

SelectObject(hdc,hOldBrush);

EndPaint(hWnd,&ps);

}

break;

caseWM_DESTROY:

PostQuitMessage(0);

break;

default:

returnDefWindowProc(hWnd,message,wParam,lParam);

}

return0;

}

//“关于”框的消息处理程序。

INT_PTRCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam)

{

UNREFERENCED_PARAMETER(lParam);

switch(message)

{

caseWM_INITDIALOG:

return(INT_PTR)TRUE;

caseWM_COMMAND:

if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)

{

EndDialog(hDlg,LOWORD(wParam));

return(INT_PTR)TRUE;

}

break;

}

return(INT_PTR)FALSE;

}

defSelf.h

#pragmaonce

#include

#include

#defineFIA(X)(X-1)*(X-1)*(2*X+1)

#defineFIB(X)X*X*((-2)*X+3)

#defineXIA(X)X*(X-1)*(X-1)

#defineXIB(X)X*X*(X-1)

usingstd:

:

vector;

 

/*

随机生成num个点,放入vp;

*/

voidrnPointCt(vector&vp,intpxMin,intpxMax,intpyMin,intpyMax,intnum);

/*

坐标转换函数,将逻辑坐标转换为窗体坐标

*/

POINTLConvertToW(POINToriWin,POINTlp);

/*

vector中的所有值转换为window坐标

*/

voidvLConverToW(vector&vp,POINToriWin,vector&wvp);

staticboolcomp(constPOINT&p1,constPOINT&p2);

staticboolbinaryPred(constPOIN

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

当前位置:首页 > 法律文书 > 辩护词

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

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