《计算机在化学化工中的应用》
实验报告
学院: 化学与化工学院
班级:12级硕勋励志班
姓名: 徐凯杰
学号: 120702028
实验一 传热实验中多变量的曲线的拟合
一、实验目的
1)熟悉VB编程平台
2)掌握多变量曲线拟合的算法
3)编拟合所给的传热实验模型的VB程序
4)通过实验数据求出模型数据、并掌握解线性方程组的克拉默法则
二、运行环境
1)Microsoft Windows XP
2)VB6.0
三、实验原理
略
四、vb代码
Private Sub Command1_Click()
Dim m As Integer
'm=inputbox(“实验次数”)
m = 7
Dim x10, x20, y0
Dim i, j, k As Integer
Dim a(1 To 10, 1 To 10), y(1 To 10), y1(1 To 10), a0, a1, a2
Dim s, S1, S2, S3, b(1 To 10, 1 To 10), xx
Dim x1(1 To 10), x2(1 To 10), YY, sd
'open"dem.dat"for input as#1
'for i=1 to m
' input#1,xx,YY
' x1(i)=xx
' x2(i0=xx^2
' y(i)=YY
'next i
'close#1
'7组努塞尔准数、雷诺数及普兰德准数,数据最大时应采用直接从文件读取方法
x10 = Array(0, 100, 200, 300, 500, 100, 700, 800) '注意下标的起点处理(加0)
x20 = Array(0, 2, 4, 1, 0.3, 5, 3, 4) '注意下标的起点处理(加0)
y0 = Array(0, 1.127, 2.416, 2.205, 2.312, 1.484, 6.038, 7.325) '注意下标的起点处理(加0)
For i = 1 To m
x1(i) = Log(x10(i))
x2(i) = Log(x20(i))
y(i) = Log(y0(i))
Next i
'求解法方程系数矩阵
a(1, 1) = m
a(1, 2) = 0
For i = 1 To m
a(1, 2) = a(1, 2) + x1(i)
Next i
a(2, 1) = a(1, 2)
a(1, 3) = 0
For i = 1 To m
a(1, 3) = a(1, 3) + x2(i)
Next i
a(3, 1) = a(1, 3)
a(2, 2) = 0
For i = 1 To m
a(2, 2) = a(2, 2) + x1(i) * x1(i)
Next i
a(3, 3) = 0
For i = 1 To m
a(3, 3) = a(3, 3) + x2(i) * x2(i)
Next i
a(2, 3) = 0
For i = 1 To m
a(2, 3) = a(2, 3) + x1(i) * x2(i)
Next i
a(3, 2) = a(2, 3)
'求解法方程常数向量
y1(1) = 0
For i = 1 To m
y1(1) = y1(1) + y(i)
Next i
y1(2) = 0
For i = 1 To m
y1(2) = y1(2) + x1(i) * y(i)
Next i
y1(3) = 0
For i = 1 To m
y1(3) = y1(3) + x2(i) * y(i)
Next i
'(利用克拉默法则解法方程/线性非常组)
s = a(1, 1) * a(2, 2) * a(3, 3) + a(1, 2) * a(2, 3) * a(3, 1) + a(1, 3) * a(2, 1) * a(3, 2)
s = s - a(1, 1) * a(2, 3) * a(3, 2) - a(1, 2) * a(2, 1) * a(3, 3) - a(1, 3) * a(2, 2) * a(3, 1)
For j = 1 To 3
b(j, 1) = a(j, 1)
a(j, 1) = y1(j)
Next j
S1 = a(1, 1) * a(2, 2) * a(3, 3) + a(1, 2) * a(2, 3) * a(3, 1) + a(1, 3) * a(2, 1) * a(3, 2)
S1 = S1 - a(1, 1) * a(2, 3) * a(3, 2) - a(1, 2) * a(2, 1) * a(3, 3) - a(1, 3) * a(2, 2) * a(3, 1)
For j = 1 To 3
a(j, 1) = b(j, 1)
Next j
For j = 1 To 3
b(j, 2) = a(j, 2)
a(j, 2) = y1(j)
Next j
S2 = a(1, 1) * a(2, 2) * a(3, 3) + a(1, 2) * a(2, 3) * a(3, 1) + a(1, 3) * a(2, 1) * a(3, 2)
S2 = S2 - a(1, 1) * a(2, 3) * a(3, 2) - a(1, 2) * a(2, 1) * a(3, 3) - a(1, 3) * a(2, 2) * a(3, 1)
For j = 1 To 3
a(j, 2) = b(j, 2)
Next j
For j = 1 To 3
b(j, 3) = a(j, 3)
a(j, 3) = y1(j)
Next j
S3 = a(1, 1) * a(2, 2) * a(3, 3) + a(1, 2) * a(2, 3) * a(3, 1) + a(1, 3) * a(2, 1) * a(3, 2)
S3 = S3 - a(1, 1) * a(2, 3) * a(3, 2) - a(1, 2) * a(2, 1) * a(3, 3) - a(1, 3) * a(2, 2) * a(3, 1)
a0 = S1 / s
a1 = S2 / s
a2 = S3 / s
Text1.Text = Int(1000 * Exp(a0) + 0.5) / 1000 '四舍五入保留三位
Text2.Text = Int(1000 * a1 + 0.5) / 1000
Text3.Text = Int(1000 * a2 + 0.5) / 1000
sd = 0
For i = 1 To m
sd = sd + Abs(a0 + a1 * x1(i) + a2 * x2(i) - y(i)) '求
Next
sd = sd / m
Text4.Text = sd 'Int(1000 * sd + 0.5) / 1000
Print Tab(50); "序号", "模型计算值", "实验值"
For i = 1 To m
Print Tab(45); i; (Text1.Text) * (x10(i) ^ (Text2.Text)) * (x20(i) ^ (Text3.Text)); 0.023 * (x10(i) ^ 0.8) * (x20(i) ^ 0.3)
Next
End Sub
五、实验结果截图
六、实验后思考。
VB编程是一种简单,并且效率高的可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言。。通过对本实验的实际操作,我掌握了多变量曲线拟合的基本算法,了解了解线性方程组的克拉默法则。并且,同时在以后的工作中,可以通过这个实验来解决大部分实验数据及模型参数的拟合问题。
实验二 梯度法拟合蒸汽压与温度关系模型
一 、实验目的
1)掌握梯度法拟合的基本算法以及理解其普适性
2)编写梯度法拟合蒸汽压与温度的关系的VB程序
3)通过实对程序进行验证,并注意比较初值对运行速度和结果的影响
二 、运行环境
1)Microsoft Windows XP
2)VB6.0
三 、实验原理
略
四、 实验VB程序代码
Private Sub Command1_Click(Index As Integer)
Dim m, n As Integer
m = 6
Dim i, j, k As Integer
Dim A, B, C, F, ee, P(1 To 10), T(1 To 10)
Dim A1, B1, C1, TA, TB, TC, TT, f1, f2, f3
Dim sd, W, S, EY, XX, YY
'(由dem.dat输入实验数据
XX = Array(-23.7, -10, 0, 10, 20, 30, 40) '注意下标的起点处理(加0)
YY = Array(0.101, 0.174, 0.254, 0.359, 0.495, 0.662, 0.88) '注意下标的起点处理(加0)
Print "直接读数据文件后计算"
For i = 1 To m
T(i) = XX(i)
T(i) = 273.15 + T(i)
P(i) = YY(i) * 7600
Print T(i), P(i)
Next i
Close i
A = Val(InputBox("A")) '指定初值
B = Val(InputBox("B")) '指定初值
C = Val(InputBox("C")) '指定初值
1000 F = 0
For i = 1 To m
ee = FNP(A, B, C, T(i), P(i))
ee = ee ^ 2
F = F + ee
Next i
f1 = 0
A1 = A + 0.000001 * A
'print"A,A1=";A,A1
For i = 1 To m
ee = FNP(A1, B, C, T(i), P(i))
ee = ee ^ 2
f1 = f1 + ee
Next i
TA = (f1 - F) / (0.000001 * A)
'print f1,F,TA
'A=val(inputbox("A"))
f2 = 0
B1 = B + 0.00001 * B
For i = 1 To m
ee = FNP(A, B1, C, T(i), P(i))
ee = ee ^ 2
f2 = f2 + ee
Next i
TB = (f2 - F) / (0.00001 * B)
f3 = 0
C1 = C + 0.00001 * C
For i = 1 To m
ee = FNP(A, B, C1, T(i), P(i))
ee = ee ^ 2
f3 = f3 + ee
Next i
TC = (f3 - F) / (0.00001 * C)
TT = TA ^ 2 + TB ^ 2 + TC ^ 2
TT = Sqr(TT)
If TT > 0.001 Then
A = A - 0.005 * TA
B = B - 1.5 * TB
C = C - 0.001 * TC
GoTo 1000
Else
End If
sd = 0
For i = 1 To m '//计算绝对平均相对误差
sd = sd + Abs(FNSD(A, B, C, T(i), P(i))) / P(i)
Print FNSD(A, B, C, T(i), P(i))
Next i
sd = sd / m
Print "A,B,C="; A, B, C
Print "sd="; sd '//打印绝对平均相对误差
End Sub
Public Function FNP(A, B, C, T, P)
FNP = (A - B / (T + C)) - Log(P)
End Function
Public Function FNSD(A, B, C, T, P)
FNSD = Exp(A - B / (T + C)) - P
End Function
五 、实验结果截图
六 、实验后思考。
本实验是基于最小二乘原理,函数拟合的目标是使拟合函数和实际测量值之间的差的平方和最小。对于最小值的问题,梯度法是用负梯度方向作为优化搜索方向。而梯度法是一个简单的迭代优化计算方法。注意的是,负梯度的最速下降性是一个局部的性质。在计算的前期使用此法,当接近极小点时,在改用其他的算法,如共轭梯度法。
实验三 二分法求解化工中的非线性方程
一、实验目的
1)掌握二分法解非线性方程组的基本算法
2)编写二分法邱珏非线性方程组的VB程序
3)通过实例的程序进行调试,并学习输出数据格式化
二、 运行环境
1)Microsoft WindowsXP
2)VB6.0
三 、实验原理
略
四 、实验VB代码
Private Sub Command1_Click()
Dim ax As Single
Dim bx As Single
Dim cx As Single
Dim ay As Single
Dim by As Single
Dim cy As Single
Dim e As Single
Dim num As Integer '累计次数变量
Dim st As String
Dim ch As String
Dim sp As String
ch = Chr(13) + Chr(10)
sp = Space(10)
st = "二分法解方程" + ch
st = st + "求2,3-二甲基苯胺沸点(当 P=101325 时 解 lnP=59.7622-8013.69/T-5.081lnT)" + ch
ax = 200
bx = 500
e = 0.01
st = st + "区间左端点初始值 ax=" + Str(ax) + ch
st = st + "区间右端点初始值 bx=" + Str(bx) + ch
st = st + "精度控制限 e=" + Str(e) + ch
st = st + "num" + sp + "ax" + Space(14) + "bx" + Space(14) + "|ax-bx|" + ch
ay = F(ax)
by = F(bx)
num = 1
Do While Abs(ax - bx) > e
cx = (ax + bx) / 2
cy = F(cx)
If cy = 0 Then Exit Do '如果已得解,则退出循环
If cy * ay > 0 Then
ax = cx
ay = cy
Else
bx = cx
by = cy
End If
st = st + Format(num, "000") + sp + Format(ax, "000.00") + sp + Format(bx, "000.00") + sp + Format(Abs(ax - bx), "0.0000") + ch
num = num + 1
Loop
st = st + ch + "2,3-二甲基苯胺沸点:" + Format(cx, "#00.00") + "K" + ch + ch
st = st + "***时间:" + Str(Time) + Space(3) + "日期: " + Str(Date) + ch
Text1.Text = ""
Text1.Text = st
End Sub
'二分法求2,3-二甲基苯胺沸点所用函数
Private Function F(ByVal u As Single)
F = Log(101325) - 59.7622 + 8013.69 / u + 5.081 * Log(u) '注意对数运算
End Function
五、实验结果截图
六 、实验后思考。
通过应用微积分中的介值定理,是是用二分法的前提条件。如果我们所要求解的方程从物理意义上来讲确实存在实根,但又不满足f(a)f(b)<0,这时候,我们必须通过改变a和b的值来满足二分法的应用条件。
实验四 主元最大高斯消元法解化工中的线性方程组
一、实验目的
1)掌握主元最大高斯消元法
2)编写最大高斯消元法求解线性方程组的VB程序
3)通过实例对程序进行调试,并比较一般的高斯消去法比较
二 、运行环境
1)Microsoft WIndowsXP_
2)VB6.0
三 、实验原理
略
四 、实验程序代码
Private Sub Command1_Click()
Dim m, n As Integer
Dim a(), z(), x(), w, aa(), s, t, k, l
n = 4
ReDim a(n + 2, 2 + n), z(n + 2, 2 + n), x(n + 1), aa(n + 2, 2 + n)
Dim i, j, k1, k2, st
Dim ch As String
Dim sp As String
ch = Chr(13) + Chr(10)
sp = Space(5)
a(1, 1) = 6# / 123.1
a(1, 2) = 6# / 93.13
a(1, 3) = 3# / 73.1
a(1, 4) = 2# / 43.07
a(2, 1) = 5# / 123.1
a(2, 2) = 7# / 93.13
a(2, 3) = 7# / 73.1
a(2, 4) = 6# / 43.07
a(3, 1) = 1# / 123.1
a(3, 2) = 1# / 93.13
a(3, 3) = 1# / 73.1
a(3, 4) = 0# / 43.07
a(4, 1) = 2# / 123.1
a(4, 2) = 0# / 93.13
a(4, 3) = 1# / 73.1
a(4, 4) = 1# / 43.07
a(1, 5) = 57.78 / 12.01
a(2, 5) = 7.92 / 1.008
a(3, 5) = 11.23 / 14.01
a(4, 5) = 23.09 / 16
st = st + "主元最大高斯消去法解线性方程组" + ch
st = st + "设有一混合物由硝基苯、苯胺、氨基丙酮、乙醇组成;" + ch
st = st + "对该混合物进行元素分析结果以百分数表示如下" + ch
st = st + "C%=57.78%;H%=7.92%;N%=11.23%;O%=23.09%" + ch
st = st + "原子量:A(C)=12.01;A(H)=1.008;A(N)=14.01;A(O)=16.00" + ch
st = st + "分子量:硝基苯 123.1;苯胺 93.13;氨基丙酮 73.10;乙醇 43.07" + ch
st = st + "硝基苯分子C-6;H-5;N-1;O-2" + ch
st = st + "苯胺分子C-6;H-7;N-1;O-0" + ch
st = st + "氨基丙酮分子C-3;H-7;N-1;O-1" + ch
st = st + "乙醇分子C-2;H-6;N-0;O-1" + ch
st = st + "确定上面四种化合物在混合物中所占的百分比" + ch + ch
'寻找主元
For i = 1 To n
If i = n Then GoTo 200
For t = i + 1 To n
If Abs(a(i, i)) < Abs(a(t, i)) Then
For s = i To n + 1
aa(t, s) = a(i, s)
a(i, s) = a(t, s)
a(t, s) = aa(t, s)
Next s
Else
End If
Next t
200
'消去
w = a(i, i)
For j = 1 To n + 1
a(i, j) = a(i, j) / w
Next j
If i = n Then GoTo 100
For j = i + 1 To n
For k = i + 1 To n + 1
z(i, k) = a(i, k) * a(j, i)
a(j, k) = a(j, k) - z(i, k)
Next k
Next j
Next i
100
'回代
x(n + 1) = 0
For k = n To 1 Step -1
s = 0
For j = k + 1 To n
s = s + a(k, j) * x(j)
Next j
x(k) = a(k, n + 1) - s
'st=st+"x("+str(i)+")="+format(x(i),"00.00")+"%"+ch
'print"x(";k;")=";x(k)
Next k
For i = 1 To n '输出结果
st = st + "x(" + Str(i) + ")=" + Format(x(i), "00.00") + "%" + ch
Next i
st = st + ch
st = st + "***时间:" + Str(Time) + Space(3) + "日期:" + Str(Date) + ch
Text1.Text = ""
Text1.Text = st
End Sub
五 、实验结果截图
六、 实验后思考
高斯消去法不需要方程组的初值,也不需要重复迭代计算。只通过“消去”和“回代”2个过程就可以直接求出方程组的解。然后若是在消去的过程中,若碰到主元为0,则无法计算。所以,发展了“主元最大高斯消去法”。就是在主元所在的列中,寻找到最大的元素,进行行与行之间的调换,并将该最大的元素作为主元,保证主元不为0。
实验五 松弛迭代法求解化工中的线性方程组
一、实验目的
1)掌握松弛迭代法的基本算法及和紧凑迭代的细微区别
2)编写松弛迭代法求救线性方程组的VB代码,注意学习从文件读取数据
3)通过实例的程序进行验证,并观察松弛迭代因子对结果的影响
二、运行环境
1)Microsoft WIndowse XP
2)VB6.0
三、实验原理
略
四、实验程序代码
Private Sub Command1_Click()
Dim n As Integer
Dim i, j, ff, t, k, l, h
Dim st As String
Dim a() As Single
Dim y() As Single
Dim b() As Single
Dim g() As Single
Dim x1() As Single
Dim x2() As Single
Dim jk() As Integer
Dim ch As String
Dim sp As String
ch = Chr(13) + Chr(10)
sp = Space(5)
CommonDialog1.CancelError = True
'on error goto errhandler
CommonDialog1.Filter = "数据文件(*.txt)|*.txt|拉图文件(*.bmp)|*.bmp|AllFiles(*.*)|*.*" '文件过滤
CommonDialog1.FilterIndex = 0
CommonDialog1.DialogTitle = "加载增广矩阵数据文件"
CommonDialog1.ShowOpen
'*****数据文件的行数就是方程的个数
Open CommonDialog1.FileName For Input As #1
Do While Not EOF(1)
Line Input #1, st
n = n + 1
Loop
Close #1
'*****数据文件的行数就是方程的个数
ReDim a(1 To n, 1 To n) As Single
ReDim b(1 To n, 1 To n) As Single
ReDim x1(1 To n) As Single
ReDim x2(1 To n) As Single
ReDim g(1 To n) As Single
ReDim y(1 To n) As Single
'*****读数据
Open CommonDialog1.FileName For Input As #1
For i = 1 To n
For j = 1 To n
Input #1, a(i, j) '方程等号左端数据
Next j
Input #1, y(i) '方程等号右端数据
Next i
Close #q
'*****读数据
st = "松弛迭代法解线性方程" + ch
st = st + Space(5) + "数据来源于" + CommonDialog1.FileName + ch + ch
st = st + "增广矩阵如下(对二甲苯-间二甲苯-邻二甲苯-乙苯---(混合物):" + ch + ch
st = st + Space(5) + "第一行为12.5nm波长处摩尔吸收系数-混合物吸收" + ch
st = st + Space(5) + "第一行为13.0nm波长处摩尔吸收系数-混合物吸收" + ch
st = st + Space(5) + "第一行为13.4nm波长处摩尔吸收系数-混合物吸收" + ch
st = st + Space(5) + "第一行为14.3nm波长处摩尔吸收系数-混合物吸收" + ch + ch
'*****输出原始数据
For i = 1 To n
For j = 1 To n
If a(i, j) >= 0 Then
st = st + Space(5) + Format(a(i, j), "0.00000")
Else
st = st + Space(4) + Format(a(i, j), "0.00000")
End If
Next j
If y(i) >= 0 Then
st = st + Space(5) + Format(y(i), "0.00000") + ch
Else
st = st + Space(4) + Format(y(i), "0.00000") + ch
End If
Next i
'*****输出原始数据
'---------------------------------------
For i = 1 To n
x1(i) = 0
x2(i) = 0
Next i
'for i = 1 to n
' for j = 1 to n
' a(i,j) = InputBox("a("&i&","&j&")")
' Print a(i,j),
' next j
'y(i) = InputBox("y("&i&")")
'print" ",y(i)
'Next i
'产生迭代矩阵
For i = 1 To n
g(i) = y(i) / a(i, i)
For j = 1 To n
If j = i Then
b(i, j) = 0
Else
b(i, j) = -a(i, j) / a(i, i)
End If
Next j
Next i
e = InputBox("输入松弛因子")
'开始松弛迭代
Do
If k >= 1 Then
For i = 1 To n
x1(i) = x2(i)
Next i
End If
For i = 1 To n
s = g(i)
For j = 1 To n
s = s + b(i, j) * x2(j)
Next j
x2(i) = (1 - e) * x1(i) + e * s '注意
Next i
eer = 0
For i = 1 To n
eer = cer + Abs(x1(i) - x2(i)) '计算误差
Next i
k = k + 1 '累计次数
Loop While (k < 100 And eer >= 0.001)
Print k
st = st + ch + "方程组的解为:" + ch + ch
For i = 1 To n
st = st + "x(" + Str(i) + ")=" + Format(x2(i), "0.00000") + ch
Next i
st = st + ch + "迭代次数为:" + Str(k) + ch 'format(k,"000")
st = st + ch + "松弛因子为:" + Format(e, "0.0000") + ch
st = st + ch + "误差为:" + Format(eer, "0.000000") + ch
st = st + ch
st = st + "***时间:" + Str(Time) + Space(3) + "日期:" + Str(Date) + ch
Text1.Text = ""
Text1.Text = st
End Sub
五、实验结果截图
六、 实验后思考。
松弛迭代法是数值计算中解线性代数方程组的一类迭代法。逐次超松弛迭代过程中,已知迭代方程及其系数矩阵,对任意的初始值,确定超松弛因子,用迭代矩阵来进行计算确定谱半径,然后其绝对值小于一解出来超松弛因子。
而紧凑迭代是当松弛因子为1的时候,叫做紧凑迭代。两者的区别在于松弛因子的不同。
实验六 龙格库塔法求解化工过程中的常微分方程
一、实验目的
1) 掌握龙格库塔法的基本原理
2) 编写龙格库塔法解决常微分方程的VB程序
3) 通过实例的程序进行调试和验证,并观察初值对计算过程及结果的影响
4) 掌握VB绘制二维曲线图的方法和绘图参数的设置
二、 运行环境
1)Microsoft WindowsXP
2)VB6.0
三 、实验原理
略
四、 实验程序截图
Private Sub Command1_Click()
Const eps = 0.00001
Dim t() As Single
Dim x() As Single
Dim y() As Single
Dim z() As Single
Dim J1, J2 As Single
Dim K1, K2, K3, K4 As Single
Dim Q1, Q2, Q3, Q4 As Single
Dim S1, S2, S3, S4 As Single
Dim h As Single
Dim i As Integer
Dim n As Integer
h = 0.01
J1 = 1
J2 = 1.1
n = Int(10 / h)
ReDim t(n + 1), x(n + 1), y(n + 1), z(n + 1) As Single
t(0) = 0
x(0) = 0
y(0) = 0
'z(0) = 0
For i = 0 To n - 1
K1 = -J1 * x(i)
Q1 = J1 * x(i) - J2 * y(i)
S1 = h * (J2 * y(i))
K2 = -J1 * (x(i) + h * K1 / 2)
Q2 = J1 * (x(i) + h * K1 / 2) - J2 * (y(i) + h * Q1 / 2)
S2 = h * (J2 * (y(i) + Q1 / 2))
K3 = -J1 * (x(i) + h * K2 / 2)
Q3 = J1 * (x(i) + h * K2 / 2) - J2 * (y(i) + h * Q2 / 2)
S3 = h * (J2 * (y(i) + Q2 / 2))
K4 = -J1 * (x(i) + h * K3)
Q4 = J1 * (x(i) + h * K3) - J2 * (y(i) + h * Q3)
S4 = h * (J2 * (y(i) + Q3))
x(i + 1) = x(i) + h * (K1 + 2 * K2 + 2 * K3 + K4) / 6 '计算A物质的浓度
y(i + 1) = y(i) + h * (Q1 + 2 * Q2 + 2 * Q3 + Q4) / 6
z(i + 1) = z(i) + (S1 + 2 * Q2 + 2 * Q3 + Q4) / 6
z(i) = x(0) - x(i) - y(i)
t(i + 1) = t(i) + h '计算反应时间t
Next i
Dim axisname1 As String, axisname2 As String
axisname1 = "t"
axisname2 = ""
xy_axis picture1, t(), x(), axisname1, axisname2
For i = 0 To n - 1
picture1.PSet (t(i), x(i))
Next i
'xy_axis picture1,t(),y(),axisname1,axisname2
For i = 0 To n - 1
Picture.PSet (t(i), y(i))
Next i
'xy_axis picture1,t(),z(),axisname1,axisname2
For i = 0 To n - 1
Picture.PSet (t(i), z(i))
Next i
End Sub
模块代码
Sub xy_axis(pic As PictureBox, x1() As Single, y1() As Single, axisname1 As String, axisname2 As String)
On Error GoTo problemx:
Dim maxnumber As Single, minnumber As Single
Dim leftx As Single, topy As Single
Dim rightx As Single, bottomy As Single
Dim n As Integer
n = UBound(x1)
pic.Font.Size = 12
pic.Font.Name = "宋体"
pic.DrawWidth = 2
maxmin x1(), maxnumber, minnumber
leftx = minnumber
rightx = maxnumber
maxmin y1(), maxnumber, minnumber
topy = maxnumber
bottomy = minnumber
Dim linelen1 As Single, linelen2 As Single
linelen1 = Abs(rightx - leftx) / 4
linelen2 = Abs(topy - bottomy) / 3
pic.Scale (leftx - linelen1, topy + linelen2)-(righrx + linelen1, bottomy - linelen2)
pic.DrawStyle = 0
pic.Line (leftx, bottomy)-(rightx, bottomy)
pic.Line (leftx, bottomy)-(leftx, topy)
Dim jj As Single
For jj = leftx To rightx + 0.0001 * linelen1 Step linelen1
pic.Line (jj, bottomy)-(jj, bottomy + 0.08 * linelen2)
pic.CurrentX = jj - 0.2 * linelen1
pic.CurrentY = bottomy - 0.1 * linelen2
If jj > 100 Then
pic.Print Format(Trim(Str(jj)), "#000")
ElseIf Abs(jj) < 0.01 Then
pic.Print Format(Trim(Str(jj) * 10000), "#0.00")
Else
pic.Print Format(Trim(Str(jj)), "#0.00")
End If
Next jj
pic.CurrentX = leftx
pic.CurrentY = topy + 0.5 * linelen2
pic.Print Trim(axisname2)
Exit Sub
problemx:
MsgBox "数据异常,请退出"
End Sub
Sub maxmin(x1() As Single, ByRef maxnumber As Single, ByRef minnumber As Single)
Dim n1 As Integer, n2 As Integer
Dim i As Integer
n1 = UBound(x1)
n2 = LBound(x1)
maxnumber = x1(n2)
minnumber = x1(n2)
For i = n2 + 1 To n1
If x1(i) > maxnumber Then
maxnumber = x1(i)
ElseIf x1(i) < minnumber Then
minnumber = x1(i)
End If
Next
End Sub
五 、实验结果截图
六 、实验后思考
龙格库塔法时求解常微分方程的常用的一种方法,他通过巧妙的线性组合,在显示格式的情况下活动理想的计算精度,大大提高了计算速度。它的主要优点是计算精度较高,能满足通常的计算要求,且容易编制程序。是一个求解常微分的一个好方法。
七 自己编写的VB
VB编写圆面积的计算。
代码为:Private Sub Command1_Click()
r = Val(Text1.Text)
Text2.Text = Str(3.1416 * r * r)
End Sub
Origin 图片