Re: [問題] 遞迴方程式寫法

看板Mathematica作者 (養花種魚數月亮賞星星)時間10年前 (2014/09/26 14:59), 編輯推噓4(408)
留言12則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《GOLDRAN (貝卡斯)》之銘言: : 我是最近才開始使用Mathematica的新手,有問題想請版上大大幫忙>"< : 目的是要解出 Xn,Yn,Zn,其中n=1,2,3,... : 經過整理可以得到Zn的三次方程式,式中包含Xn-1,Yn-1,Zn-1 : n=1的初始值是自己給的,使用NSolve解出3個根(1實根,2虛根) : 將Zn的實根,代入Xn,Yn的方程式,可以得到Xn,Yn : 下一步是將Xn,Yn,Zn取代原本的Xn-1,Yn-1,Zn-1,然後重復動作算出Zn+1 : 最後將X,Y,Z的值畫成3D圖 eqs={4x+3y+3z==350,4x+2y+5z==360,8x+8y+10z==840}; Solve[eqs,{x,y,z}] ans=Block[{temp}, NestWhileList[( (* 給定z,求x, y *) temp=Solve[eqs[[3]]/.{x->#[[1]],y->#[[2]]},z,Reals][[1]]; (* 把x,y拿來求z *) Flatten[{x,y,z/.temp}/.Solve[eqs[[1;;2]]/.temp,{x,y},Reals]] (* 直到誤差小於10^-5才停止 *) )&,{0,0,0},(N[Norm[#1-#2]]>10^-5)&,2] ] N@ans Show[ContourPlot3D[Evaluate@eqs,{x,0,100},{y,0,100},{z,0,100}, ContourStyle->Opacity[0.2],Mesh->None], (* 把圖畫出來 *) Graphics3D[{Red,Arrow/@Partition[ans,2,1]}]] : 請問連續代入解方程式,且會自動取實根的部份要怎麼寫呢? ?Solve Solve[expr,vars,dom] Solve[expr,vars,Reals] -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.240.46 ※ 文章網址: http://www.ptt.cc/bbs/Mathematica/M.1411714763.A.FC1.html

09/26 17:05, , 1F
感謝大大解答,我嘗試看看>"<
09/26 17:05, 1F

10/02 11:50, , 2F
太強大了,大大!我想請教一下大大在前面第一個Solve裡面
10/02 11:50, 2F

10/02 11:51, , 3F
的#[[1]],#[[2]]這個設定,他是預設去那個邊的值,這是
10/02 11:51, 3F

10/02 11:51, , 4F
怎麼運作的呀。
10/02 11:51, 4F

10/02 23:57, , 5F
# 是純函式的參數 (其實它有名字叫 Slot) 不過在 temp 定義
10/02 23:57, 5F

10/02 23:58, , 6F
的時候因為還沒有函數結尾的 & 出現, 所以只會留著 Slot
10/02 23:58, 6F

10/02 23:59, , 7F
一直到 temp 跟 Flatten[] 的 ()& 才把裡面的 Slot 變成
10/02 23:59, 7F

10/02 23:59, , 8F
函數參數, 這一整個函數最後提供給 NestWhileList 做迭代
10/02 23:59, 8F

10/03 00:00, , 9F
另外要注意 #[[1]] 是指第一參數裡的第一成員
10/03 00:00, 9F

10/03 00:01, , 10F
而不單指第一參數, 也就是這迭代函式吃的是 {x,y} 這種東西
10/03 00:01, 10F

10/03 00:02, , 11F
當然它自己也是吐出這種東西來 (所以才能迭代)
10/03 00:02, 11F

10/06 19:50, , 12F
感謝大大的解說,真是精闢^^
10/06 19:50, 12F
文章代碼(AID): #1K9GxB_1 (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1K9GxB_1 (Mathematica)