奇领yy6608在线观看官网

  • <acronym id="y46sa"></acronym>
  • <kbd id="y46sa"></kbd>
  • 空間訪問權限:游客, 頭像訪問權限:自己
    [登錄]后可以瀏覽更多信息
    博客正文
    【操作】
    用單循環枚舉法解方程組的可行性預測、實施和建模

    環境:三中模擬上課,3評委+1上課老師+本人網絡聽課

    問題提出:模擬上課老師提出枚舉需要多重循環嵌套,對于學生來說有難度,有沒有辦法用單循環實現枚舉。

    一、頭腦風暴的過程

       問題提出后,大家進行了一番討論,筆者根據數學知識預測了可行性,猜測得出:

    枚舉循環的的層數 = 未知數個數 - 方程數 + 1

       但在頭腦還是很模糊,沒能拿出實施方案。

    頭腦風暴截圖隱藏

    作者隱藏了部分內容,需要[登錄]才能查看
       

       上課老師老師開始上課,她把百錢百雞問題改成了雞兔同籠的2個未知數2個方程2層循環來簡化難度。筆者覺得她的改法很贊。受其啟發,立馬用實踐證明了前面理論的可行性。

    snap5.jpg

    作者隱藏了部分內容,需要[登錄]才能查看

    snap4.jpg

     

    二、意義

       可以簡化現行浙教版信息技術教材上的枚舉問題的難度,把教材的白錢百雞三個未知數兩個方程雙循環問題改成雞兔同籠兩個個未知數兩個方程單循環。同時筆者也建議在編的新教材Python里也能用上簡化實例。


    以下為午后更新的內容

    三、實踐和補充

        用百錢百雞來證明上述理論

     1、3個未知數1個方程---3重循環

    snap6.jpg

     2、3個未知數2個方程---2重循環

    snap7.jpg

     3、3個未知數3個方程---1重循環

    snap8.jpg

    代碼實現的思想:如果為公雞,母雞,小雞分別定義變量 g m x,可以把數學方程式寫成賦值語句(清晰版);如果只定義1個變量,就要把方程融入到條件語句中了(精簡版)。


    四、糾錯和建模

    1、糾錯

    snap11.jpg 

       繼續思考,發現綠色部分恰好錯了,要在條件語句里融入三個方程,用and連接,恰恰增加了循環嵌套,請看下面3變量3方程的終極探索。
    snap10.jpg

        上圖為我們提供了3個未知數3個方程單循環、雙循環、三循環的解法。三個方程都要用的,要么用在賦值語句里進行變量代換,要么放在條件語句里進行數據校驗。下面對該問題進行單循環建模。


    2、y=f(a,b,c,d ..), n個未知數n個方程單循環枚舉建模

    • 取一個方程為主方程準備放到條件語句中
    • 取一個變量為主變量m,即循環枚舉的變量
    • 另外n-1個變量通過另外n-1個方程轉化成用m來表示,這里是n-1個賦值語句,如果跟m沒有直接關系要變通(還沒細想過)。
    • 把所有變量的關系代入主方程做為唯一的條件判讀語句。

    3、x(x<n)層循環建模法,請自行領悟和探索

    請下載VB工程 emnu.rar ,若有bug自行修改

     

    四、繼續深度思考

        早上思維比較清晰,乘開車的時間就把枚舉的循環層數跟提供的方程數的關系想透了。

        注意,建模一節提到的方程就是本節提到的函數,未知數就是本節提到的自變量。

        其實計算機枚舉就是:當函數y=f(a)的y值確定時,通過計算機去猜測自變量a的取值,然后用函數法則f來驗證。

     1、枚舉解題范式

        計算機枚舉時要做3件事:

    •  初步確定a的取值范圍
    •  把a作為循環變量進行枚舉
    •  對每個枚舉出來的值用函數法則來檢測,即用If語句來判斷。

      于是有了下面的編程范式
       For a=下界 To a的上界
           If f(a) = y Then '用法函數法則(方程)檢測
              print a
           End If
       Next a

         
       [例題1]: 已知整數a的平方是361,求a 
       [分析]:寫成通式361=y=f(a),法則f為a * a, 估算a的取值范圍[10, 20]
     snap0.jpg

       [例題2] 已知浮點數a的平方是367,求a,要求精確到小數點后1位

    枚舉求367的平方根.jpg

      本題看起來函數y = f(a) = a * a并沒用在判斷里,不符合解題范式啊,怎么回事?

    2、一個反函數就能頂一個枚舉循環

     如果我們能找到y=f(a)的反函數a=g(y),就不需枚舉a了,比如平方的反函數就是sqrt求平方根
    一個反函數抵得一個枚舉循環.jpg
        繼續推導:一個可確定自變量的賦值表達式就能頂一個循環。

    3、多個自變量的枚舉解體范式

      按此理論,當函數y=f(a,b)有兩個自變量時,我們可以的解題范式就是
      For a=a下界 To a上界
          For b=b下界 To b上界
              If f(a,b) = y Then  '用運算法則檢測
                  Print a,b
              End If
          Next b
      Next a

    3、多個自變量,減少枚舉循環層數的方法

        接上,如果我們能找到a, b的關系b=f1(a),對于每一個確定的a都能得到一個確定的b,我們就不需要再對b進行枚舉,于是循環就可以減去一層,變成
      For a=a下界 To a上界
          b = f1(a)   'b被a確定,省一個循環
          If f(a,b)=y Then '主方程用于驗證
              Print a,b
          End If
      Next a

        這就是前面建模提到的兩個未知數兩個方程用一個循環就能解決的原因,即:在把a作為主變量枚舉的情況下,用輔助方程b=f1(a)和a的值求出b,從而減少了一個枚舉b的循環;再把主方程y=f(a, b)放到If Then里檢測,從而判斷a的合法性從而找到方程組的解。讀者也可以用b作為主變量,在循環里用b來表示a從而減少一層循環。

        現在是時候給出n個自變量(未知數)n個函數(方程)到底有幾層循環的結論了,公式因該為:

      循環層數 = 自變量總數 + 1(枚舉主自變量) - 可以用主自變量直接或間接迭代的次自變量個數 

        計算機枚舉的強大之處就是多自變量函數y=f(a, b, c,……),在提供的條件有限,比如找不到各自變量之間的關系時,我們可以通過多層循環來枚舉各自變量+用主方程判斷的方法來找出它的解。

    或許還有思考,盡情持續關注(2019-4-18 8:42)

    五、用函數解析式替代循環

        本問題和枚舉無關,只是單純的想用函數解析式來取代占用資源的循環問題?搭}

    流程圖.jpg
    Dim s As Integer, k As Integer, a As Integer
    Const u = 1024              '2的10次方

    s = 1: k = 1: a = 8
    Do While s <= u
        s = s + k * a
        a = a * 2
        k = 1 - k
    Loop
    Print s

    現在用數學方法來解決。S初始值為0,每個循環都要累加的項Sn寫成通式為

     sn.jpg(A=8)

    K在循環里的取值為:1, 0, 1, 0, 1, 0, 1, 0…… 經過一番琢磨,得出Kn的通式為

    k.jpg

        這里用到了電子線路的相關思想,如果把(-1)n 看作是振幅為1的交流電1,-1, 1, -1……的話,(-1)n + 1 就相當于疊加了數值為1的直流電2, 0, 2, 0……,再除以2就縮小了振幅。

        最后寫出S的解析式為:

    s1.jpg

    1、當n為偶數時

    s2.jpg
    括號里的推導過程如下:

    偶數次冪.jpg

    兩邊同時乘以2得到2的奇數次冪
    奇數次.jpg

    兩式左右兩邊相加補全缺少的冪
    補全奇數次冪.jpg

    左右同時加1,進一步推導得到結果
    推導.jpg

    2、當n為奇數時,其值等于其前一個偶數冪的各項和

    3、最終解析式為

    解析式.jpg

    4、用程序解答

    code.jpg用函數解析式省去循環.rar

    5、順便我們也應該把編程技巧總結一下,下面[]表示循環


      1) 獲得 True,False, True, False…… 隊列
     [k = Not k]

      2) 獲得 1,-1, 1, -1…… 隊列
     方法1:k=1 , [k=-k]
     方法2:[k=(-1)n]
         方法1計算機語言,方法2適用于寫數學通式

      3) 獲得 1, 0, 1, 0……
     方法1:k=1, [k=1-k]
     方法2:[k=((-1)n+1)/2]
         方法1計算機語言,方法2適用于寫數學通式

      4) 獲得 m, 0, m, 0……
     方法1:k=m, [k=m-k]
     方法2:[k=((-1)n+1)*m/2]

    更新于 2019-04-25


     

     

    欄目劃分
    WEB應用程序 (33)
    桌面應用程序 (10)
    Windows操作系統 (12)
    xNix操作系統 (5)
    數據庫技術 (3)
    多媒體技術 (1)
    硬件技術 (4)
    辦公軟件 (2)
    以史為鑒 (2)
    教學反思1 (2)
    奇聞趣事 (5)
    其它 (11)
    教學反思 (4)
    電子技術 (2)
    中學生科技 (3)
     
    主人推薦
    音象定位和音箱喇叭的排步
    我國高層意向已定:制造大飛機
    “運十”悲劇
    日爾曼人
    細說百越族
    宇宙深處的秘密——星云
    [強烈推薦]中華56民族FLASH完整珍藏版
    一組漂亮的植物
      
    奇领yy6608在线观看
    友情链接:dafa888手机典版网页登录 白小姐四肖必选期期中