⽤c++语⾔编写的⼩程序,利⽤C++编写⼀些有趣的⼩程序
虽然说中学没有参加过信息学竞赛,但相对来说,我接触编程算是⽐较早的。和我同龄的⼈,若⼩学参加过计算机竞赛,⼤概还对PC-logo 有点印象,这算是我对编程的最初体验,这⾥就不叙述。到了初中,便按着规定学习了⼀点Pascal,在家⾥也⾃⼰写过⼀点极其简单的程序。⾼中会考也需要学习Visual
Basic,但学的⼗分浅显,并⽆什么收获。
C语⾔是⼤学的必修课,于是在军训期间,我就买来《C++
Primer》⾃学C++(⽐较任性,学校会教的我就不想学)。事实证明,提前学C++对C语⾔课程⾮常有帮助。如果⽐较有天赋,⼀个星期每天花2个⼩时学点C++基础,则⼤学的C语⾔课⼏乎不需要听。(说得好像⼤学有谁在听课似的!)
下⾯进⼊正题:
解⼀个偏微分⽅程
声明:我没有学过数值计算⽅法,⼀下所讲的⽅法纯属娱乐,不严谨和错误的地⽅,还请⼤神指出。
学过数学物理⽅程的⼈,肯定都遇到过⼀个最基本的⽅程:
⼀般来说,这种⽅程都是⽤本征函数法来解,需要求傅⾥叶级数。然⽽在某些特殊的情况下,这个⽅程的解却可以⽬测。
既然可以⽬测,那就更可以编⼀个程序求解它。⾸先把x轴等间距分割⼀下,⽤⼀个数组表⽰不同x对应的u,再⽤⼀个数组储存速度v。
我想你已经知道我的程序会怎么写了。
废话不说,贴代码:
#include "stdafx.h"
#include <
se-mark="1">iostream>
#include <
se-mark="1">fstream>
using namespace
std;
int
TimeProceed(double** XandV,int
intervalNumber,double para,double
timeInterval,int
iterTime,fstream&writeTxt)
{
///Vertex
is fixed!!
for(int
i=1;i<
se-mark="1">iterTime;i++)
{
for(int
j=1;j
{
XandV[(2*i)%4][j]
=
XandV[(2*i-2)%4][j]+para*((XandV[(2*i-1)%4][j+1]-XandV[(2*i-1)%4][j])-(XandV[(2*i-1)%4][j]-XandV[(2*i-1)%4][j-1])); XandV[(2*i+1)%4][j]=XandV[(2*i-1)%4][j]+(double)1/2*timeInterval*(XandV[(2*i)%4][j]+XandV[(2*i-2)%4][j]);
writeTxt<
}
//
XandV[(2*i+1)%4][0]
= XandV[(2*i+1)%4][intervalNumber-1] = 0;
有趣的java小程序//
writeTxt<
}
return
0;
}
int
main()
{
int
intervalNumber,iterTime;
double
para,timeInterval;
///set
parameters
intervalNumber=99;iterTime
= 100;
para
= 1;timeInterval = 0.1;
///
double
**XandV = new double* [4];
XandV[0]=
new double[intervalNumber];
XandV[1]=
new double[intervalNumber];
XandV[2]=
new double[intervalNumber];
XandV[3]=
new double[intervalNumber];
Boundary
Condition Initialize
for(int
i=0;i<
se-mark="1">intervalNumber;i++)
{
XandV[0][i]
= 0;
if(i<=65)
{
XandV[1][i]
= (double)i/20;
}
if(i>65)
{
XandV[1][i]
= (double)66/20 - (double)(i-65)/10;
}
}
fstream
writeTxt;
writeTxt.open("",ios::out);
TimeProceed(XandV,intervalNumber,para,timeInterval,iterTime,writeTxt); return
0;
}
程序看起来毫⽆漏洞。。
但是运算结果却有点问题:
本应该是直线,怎么抖成了这个样⼦?有兴趣的可以更改程序参数试试
未完待续。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论