我有个basic的源代码
就是把x-y(16组数对应)算出a(x×x)+b(x)+c=0中的a,b,c,然后拿算出来的y=a(x×x)+b(x)+c用vb画曲线basic的源代码如下:
10 REM **** Least Sqares Polynomial Approximation ****
20 N=16:M=2
30 DIM X(N),Y(N),S(2*M),T(M),A(M+1,M+2)
40 FOR J=1 TO N:READ X(J),Y(J):NEXT J
50 FOR I=0 TO M
60 T(I)=0:S(I)=0
70 FOR J=1 TO N
80 T(I)=T(I)+Y(J)*X(J)^I
90 S(I)=S(I)+X(J)^I
100 NEXT J
110 NEXT I
120 FOR I=1 TO M:S(M+I)=0
130 FOR J=1 TO N:S(M+I)=S(M+I)+X(J)^(M+I)
140 NEXT J
150 NEXT I
160 REM *** Modified Squarer Method ***
170 FOR I=0 TO M
180 FOR J=0 TO M
190 A(I+1,J+1)=S(I+J):LPRINT TAB(10*J);A(I+1,J+1);
200 NEXT J
210 A(I+1,M+2)=T(I):LPRINT TAB(10*M+12)A(I+1,M+2)
220 NEXT I
230 GOSUB 400
240 REM *** Print Resolutions ***
250 LPRINT
260 FOR I=0 TO M
270 LPRINT "a(";I;")="A(I+1,M+2)
280 NEXT I
290 data 1,4.00,2,6.40,3,8.00,4,8.80,5,9.22,6,9.50,
300 data 7,9.70,8,9.86,9,10.00,10,10.20,11,10.32
310 data 12,10.42,13,10.50,14,10.55,15,10.58,16,10.60
320 end
400 rem *** subroutine ***
410 for i=2 to m+1:a(i,1)=a(i,1)/a(1,1):next i
if m<2 then 530
430 for k=2 tom
440 for j=k to m+2
450 l=1 to k-1
460 a(k,j)=a(k,j)-a(k,l)*a(l,j)
470 next l
480 next j
490 for i=k+1 to m+1
500 a(i,k)=a(k,i)/a(k,k)
510 next i
520 next k
530 for j=m+1 to m+2
540 for l=1 to m
550 a(m+2,j)=a(m+1,j)-a(m+1,l)*a(l,j)
560 next l
570 next j
580 rem *** back substitution ***
590 a(m+1,m+2)=a(m+1,m+2)/(m+1,m+1)
600 for i=m to 1 step -1
610 for l=i+1 to m+1
620 a(j,m+2)=a(i,m+2)-a(i,l)*a(l,m+2)
630 next l
640 a(i,m+2)=a(i,m+2)/a(i,i)
650 next i
就是把x-y(16组数对应)算出a(x×x)+b(x)+c=0中的a,b,c,然后拿算出来的y=a(x×x)+b(x)+c用vb画曲线basic的源代码如下:
10 REM **** Least Sqares Polynomial Approximation ****
20 N=16:M=2
30 DIM X(N),Y(N),S(2*M),T(M),A(M+1,M+2)
40 FOR J=1 TO N:READ X(J),Y(J):NEXT J
50 FOR I=0 TO M
60 T(I)=0:S(I)=0
70 FOR J=1 TO N
80 T(I)=T(I)+Y(J)*X(J)^I
90 S(I)=S(I)+X(J)^I
100 NEXT J
110 NEXT I
120 FOR I=1 TO M:S(M+I)=0
130 FOR J=1 TO N:S(M+I)=S(M+I)+X(J)^(M+I)
140 NEXT J
150 NEXT I
160 REM *** Modified Squarer Method ***
170 FOR I=0 TO M
180 FOR J=0 TO M
190 A(I+1,J+1)=S(I+J):LPRINT TAB(10*J);A(I+1,J+1);
200 NEXT J
210 A(I+1,M+2)=T(I):LPRINT TAB(10*M+12)A(I+1,M+2)
220 NEXT I
230 GOSUB 400
240 REM *** Print Resolutions ***
250 LPRINT
260 FOR I=0 TO M
270 LPRINT "a(";I;")="A(I+1,M+2)
280 NEXT I
290 data 1,4.00,2,6.40,3,8.00,4,8.80,5,9.22,6,9.50,
300 data 7,9.70,8,9.86,9,10.00,10,10.20,11,10.32
310 data 12,10.42,13,10.50,14,10.55,15,10.58,16,10.60
320 end
400 rem *** subroutine ***
410 for i=2 to m+1:a(i,1)=a(i,1)/a(1,1):next i
if m<2 then 530
430 for k=2 tom
440 for j=k to m+2
450 l=1 to k-1
460 a(k,j)=a(k,j)-a(k,l)*a(l,j)
470 next l
480 next j
490 for i=k+1 to m+1
500 a(i,k)=a(k,i)/a(k,k)
510 next i
520 next k
530 for j=m+1 to m+2
540 for l=1 to m
550 a(m+2,j)=a(m+1,j)-a(m+1,l)*a(l,j)
560 next l
570 next j
580 rem *** back substitution ***
590 a(m+1,m+2)=a(m+1,m+2)/(m+1,m+1)
600 for i=m to 1 step -1
610 for l=i+1 to m+1
620 a(j,m+2)=a(i,m+2)-a(i,l)*a(l,m+2)
630 next l
640 a(i,m+2)=a(i,m+2)/a(i,i)
650 next i
就是一个窗体,上面一个按钮
单击按钮实现同时打开三个excel文档的过程
第一个excel文档里面放的是x-y的原始数据,vb读入数据
第二个excel文档放中间过程算出来的参数
第二个excel文档放a,b,c的结果,vb算出来的
Dim ExApp As Excel.Application
'定义ExApp为excel应用程序对象变量
Dim ExWb As Workbook
Dim ExWb_out As Workbook
Dim ExWbout As Workbook
'定义ExWb为excel工作簿对象变量
Dim ExWs As Excel.Worksheet
Dim x(200) As Single
Dim y(200) As Single
'声明数组
Dim m As Integer, n As Integer
Dim t(200) As Single
Dim s(200) As Single
Dim a(3, 4) As Single
Dim d(10) As Single
Private Sub Command1_Click()
Set ExApp = New Excel.Application
'设置一个新excel的对象
ExApp.Visible = True
Set ExWb = ExApp.Workbooks.Open("d:\drying\datain1.xls")
Set ExWb_out = ExApp.Workbooks.Open("d:\drying\dataout1.xls")
Set ExWbout = ExApp.Workbooks.Open("d:\drying\dataout.xls")
Dim i As Integer
For i = 1 To 16
' A 列的值填充了数组的
' 第一个系列。如果这些值是字符串
' 那么将成为行的标签。
x(i) = ExWb.Worksheets(1).Range("A" & i).Value
' B 列的值填充第二个系列。
y(i) = ExWb.Worksheets(1).Range("B" & i).Value
Next i
m = 2
n = 16
d(0) = 1
For i = 1 To m + 1
t(i) = 0
s(i) = 0
Next i
For i = 1 To m + 1
For j = 1 To n
t(i) = t(i) + y(j) * x(j) ^ i
s(i) = s(i) + x(j) ^ i
Next j
Next i
For i = 2 To m + 1
s(m + i) = 0
Next i
For i = 2 To m + 1
For j = 1 To n
s(m + i) = s(m + i) + x(j) ^ (m + i)
Next j
Next i
For i = 0 To m
For j = 0 To m
a(i + 1, j + 1) = s(i + 1 + j)
Next j
a(i + 1, m + 2) = t(i + 1)
Next i
ExWb_out.Worksheets(1).Range("a1:d3").Value = a()
'ExApp.Range("a1:j10").Value = x
Print
End Sub
多谢了!