[問題] 牛頓法的程式一直找不出錯...已回收

看板MATLAB作者 (棒球板板主)時間16年前 (2009/12/18 20:52), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/1
以下是我寫的小程式,也在command window 試過了,可是還是有錯: 這是一個寫牛頓法的程式,為了懶得動筆化簡微分,所以順便也寫了偏微的程式。 syms v1 v2 f1 f2 M; tol = 0.0001; //容忍值 m = .07592; //初始值 n = .07546; for L = 1:1:1000 f1 = exp(40*v1)+v1-v2-2; //函數f2,f2 f2 = -v1+v2+exp(40*v2)-1; M = [diff(f1,v1) diff(f1,v2);diff(f2,v1) diff(f2,v2)]; //偏微(矩陣形式) v1 = m; v2 = n; M_val = subs(M); //用subs求M值 f1_val = subs(f1); f2_val = subs(f2); N = -inv(M_val)*[f1_val;f2_val]; //多變數牛頓法中心公式 if (L==1000)&&(abs(N(1,1))>tol)&&(abs(N(2,1))>tol) //判斷 print(disconvergence) elseif abs(N(1,1))<tol&&abs(N(2,1))<tol break end m = v1 + N(1,1); //新值傳給舊值 n = v2 + N(2,1); end m //輸出 n ??? Error using ==> diff Difference order N must be a positive integer scalar. Error in ==> improved_newton at 9 M = [diff(f1,v1) diff(f1,v2);diff(f2,v1) diff(f2,v2)]; 實在看不懂他到底是指哪個地方錯了,矩陣這樣弄應該沒錯阿..... -- http://www.wretch.cc/blog/sleeeve You are welcome to browse my blog. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.170.46

12/18 22:38, , 1F
第二圈之後 你的v1 v2都變小數了 這樣要怎麼微?
12/18 22:38, 1F

12/18 22:51, , 2F
v1 v2應該還是變數 雖然有值輸入 可是我用command window
12/18 22:51, 2F

12/18 22:51, , 3F
試過 M 還是會顯示變數 subs(M) 才會顯示值
12/18 22:51, 3F

12/20 20:07, , 4F
有些東西需要每次做嗎
12/20 20:07, 4F

12/20 20:47, , 5F
感謝一樓 好像真的變小數了 不過問題解決了 鬆了口氣><
12/20 20:47, 5F
文章代碼(AID): #1BAtie2q (MATLAB)
文章代碼(AID): #1BAtie2q (MATLAB)