| 
					阅读:3495回复:6
				 VB数学实例:巧用递归法解不定方程
					多元一次方程往往采用循环求解。笔者在与网友们讨论一个问题过程中,琢磨出一种算法,采  用递归进行多元一次方程的求解。并将解分为整数解和 非负整数解两种情况,请大家指教。<br><br>  Private Sub Command1_Click() '演示求X1+X2+X3+X4+X5=10整数解<br>  Text1.Text = ""<br>  Dim answer As String<br>  answer = GETRESULT(5, 10, True) '赋值<br>  Dim temp<br>  temp = Split(answer, vbCrLf)<br>  For i = 0 To UBound(temp)<br>  temp(i) = "解" ; i + 1 ; ":" ; vbTab ; temp(i) ' add index<br>  Next<br>  answer = Join(temp, vbCrLf)<br>  Text1.Text = "方程 X1+X2+X3+X4+X5=10 共有 " ; UBound(temp) + 1 ; " 个整数解:" ; vbCrLf ; answer 'show all answer in textbox<br><br>  End Sub<br>  Private Sub Command2_Click() '演示求X1+X2+X3+X4+X5=10非负整数解<br>  Text1.Text = ""<br>  Dim answer As String<br><br>  answer = GETRESULT(5, 10, False) '赋值<br>  Dim temp<br>  temp = Split(answer, vbCrLf)<br>  For i = 0 To UBound(temp)<br>  temp(i) = "解" ; i + 1 ; ":" ; vbTab ; temp(i) 'add index<br>  Next<br>  answer = Join(temp, vbCrLf)
 [此贴子已经被作者于2005-8-19 12:05:21编辑过] | |
| 
 | 
| 1楼#发布于:2004-12-23 19:34 
					 Text1.Text = "方程 X1+X2+X3+X4+X5=10 共有 " ; UBound(Split(answer, vbCrLf)) + 1 ; " 个非零整数解:" ; vbCrLf ; answer 'show all answer in textbox
 End Sub Private Sub Command3_Click() '演示无解情况 Text1.Text = "" Dim answer As String answer = GETRESULT(5, 3, False) Dim temp temp = Split(answer, vbCrLf) For i = 0 To UBound(temp) temp(i) = "解" ; i + 1 ; ":" ; vbTab ; temp(i) Next answer = Join(temp, vbCrLf) Text1.Text = "方程 X1+X2+X3+X4+X5=3 共有 " ; UBound(Split(answer, vbCrLf)) + 1 ; " 个非零整数解:" ; vbCrLf ; answer End Sub '求解函数 Function GETRESULT(ByVal n As Integer, ByVal SUM As Integer, Optional allowzero As Boolean = True) As String Dim temp() As String, i As Long If n = 2 Then '二元方程 If allowzero = True Then | |
| 
 | 
| 2楼#发布于:2004-12-23 19:35 
					ReDim temp(SUM)
 For i = 0 To SUM ' allow zero temp(i) = "X1=" ; i ; ",X2=" ; SUM - i Next GETRESULT = Join(temp, vbCrLf) Erase temp Else ReDim temp(1 To SUM - 1) 'forbid zero For i = 1 To SUM - 1 temp(i) = "X1=" ; i ; ",X2=" ; SUM - i Next GETRESULT = Join(temp, vbCrLf) Erase temp End If End If If n > 2 Then If allowzero = True Then ReDim temp(SUM) For i = SUM To 0 Step -1 ' allow zero temp(i) = Replace(GETRESULT(n - 1, i, True), vbCrLf, ",X" ; n ; "=" ; SUM - i ; vbCrLf) ; ",X" ; n ; "=" ; SUM - i Next GETRESULT = Join(temp, vbCrLf) Erase temp Else If SUM < n Then MsgBox "无解!": Exit Function '无解情况 ReDim temp(1 To SUM - n + 1) 'not allow zero For i = 1 To SUM - n + 1 temp(i) = Replace(GETRESULT(n - 1, SUM - i, False), vbCrLf, ",X" ; n ; "=" ; i ; vbCrLf) ; ",X" ; n ; "=" ; i '递归 Next GETRESULT = Join(temp, vbCrLf) Erase temp End If End If End Function | |
| 
 | 
| 3楼#发布于:2004-12-24 13:16 
					<P>这么复杂</P>				 | |
| 
 | 
| 4楼#发布于:2005-03-16 16:58 
					学习!				 | |
| 5楼#发布于:2005-04-29 17:00 
					sdm 				 | |
| 6楼#发布于:2005-07-31 10:59 
					<P>还以为很简单!</P>				 | |
 
							
 
				




 
				
 
				

