1. 程式人生 > >關於自動解題機的設計的一些思路

關於自動解題機的設計的一些思路

   

 

    線性方程組可以用矩陣來模擬計算,但是如果不是線性方程組呢?是高次的方程呢?矩陣怎麼解呢?
    帶高次元的大規模矩陣的自動解,需要怎麼樣的演算法和資料結構呢?


    這種用矩陣來解線性方程組的方法並不適用於拓撲分析裡面的數值問題,一個特定的拓撲結構

    要對應一個特定的物理結構,是不能夠做變換的,變換以後,物理模型就是失去原來的結構了

    這樣解出來的數值結果,顯然就不對了。。。。

   

    把一個矩陣變換為上下三角陣,然後把對角線的元素全部進行階乘,求出矩陣值,但是拓撲矩陣的元素
    不能夠進行這種變換,一旦進行變換,拓撲結構就發生變化了,舊的架構將失去作用,顯然不行

 

    

     

  String  FunctionA = "a*(X*X)+b*(Y*Y)=c";
  String  FunctionB = "m*(X*X)+n*(Y*Y)=d";

  /* FA變換為 a*(X*X) = c-b*(Y*Y)
             (X*X) = (c-b*(Y*Y))/a
   *          X = ((c-b*(Y*Y))/a)
   *
   * 字串位移和消除
   *
   * FB代入變換為  m*((c-b*(y*y))/a)+n*(y*y)=d
   * 再次變換     ((m*c) - (m*b*(y*y)))/a + n*(y*y) =d
   *              a*((m*c) - (m*b*(y*y))) + a*n*(y*yY) = a*d
   *              a*m*c - a*(m*b*(y*y)) + a*n*(y*y) = a*d
   *              (y*y)(((a*n)-(a*m*b))) + a*m*c = a*d
   *              (y*y) = ((a*d) - (a*m*c))/((a*n)-(a*m*b))
   *               y= (((a*d) - (a*m*c))/((a*n)-(a*m*b)))@@2 (開平方)
   *  
     代入計算,得到結果
   *
   * 有十幾個字串變換過程,很容易出錯,人工識別肯定會出問題,必須有一個
   * 很完善的機器識別演算法
   *
   * 本質上是一種字串變換 需要一個普適性的帶狀態引數的英文符號自動機-類編譯演算法
   * 狀態引數符號自動機 設計  更加靈活的設計 更加具有普適性的設計
   *
   * 這個演算法要實現這樣一個目標:通過掃描影象或者鍵盤輸入一組方程式和引數,並不經過
   * 任何程式碼設計過程,就完全自動解出數值解,中間過程全部由計算機自動完成

  

 * 不用高斯消元法,而直接用傳統的迭代消元法來解N元N次方程組
 * 構造自動解題演算法  2018.7.2
 *
 * aX^2+bY^2=c
 * dX^2+kY^2=s
 *
 * 自動移項,自動相除,自動代入
 * 用自動迭代演算法,消去X
 * 然後生成一元方程,用實時編譯器自動計算
 * 方程組字串處理函式
 * 虛擬碼演算法設計:
 *
 *    掃描方程字串,確定等號和等號後面的引數的位置
 *    掃描方程字串,確定X的次數和係數的位置
 *
 *    將不屬於X變數專案的且在等號前面的字串項移動到等號和等號後面的引數以後,且變號
 *    在上述過程完成之後,對等號後面的字串加括號
 *
 *    將X變數的係數除到等號後面的字串中,且加上除號字串,再次在等號後面和被除數後面加上括號
 *    根據X變數的冥指數,對等號後面的字串(包括除號和被除數)進行開N次方處理
 *
 *    獲得以Y表示的X變數字串
 *
 *    將上述字串代入方程式2,獲得一元二次方程組
 *    呼叫迭代法和牛頓法求解該方程
 *
 *    將Y值帶回方程1,求解X值