有關MATLAB數值該如何解

hamutaro 發表於 2006-6-25 14:53:35 [顯示全部樓層] 回覆獎勵 閱讀模式 2 2853
老師最近出題
說要用二分法來解這題
不過不太知道該如何寫
題目:3X*cos(X)+1=0試求在[-5, 3]區間內此方程式所有的根,根的誤差須在10的-5次方內
程式類似如下不過COS方面不知道該如何代
function root=bisection(func,x_left,x_right,er)
err=1;
while err>er
   x_middle=(x_left+x_right)/2;
   if func(x_left)*func(x_middle)<0
      x_right=x_middle;
   else
      x_left=x_middle;
   end
   root=x_middle;
   err=abs(func(root));
end

[ 本帖最後由 夕陽武士 於 2006-6-26 03:10 AM 編輯 ]

已有(2)人回文

切換到指定樓層
adddream 發表於 2006-7-6 01:07
正正正正正正正正正正正正
5|~g4b*E~[本站是一個大型的討論區網站, 提供許多類型討論, 資源下載, 非常的熱鬧喔! 等待你的加入!!!正正正正正正正正正正正正正
3QV@-bg.i%EX卡提諾王國 - 最用心的網路社群正正正正正正正正正正
yroeht 發表於 2006-10-9 15:12
bisection 的程式修改如下

function root=bisection(func,x_left,x_right,er)

while abs(x_left-x_right) > er   % 如果 x_left 和 x_right 的距離大於誤差, 繼續切割
   x_middle=(x_left+x_right)/2;

    if feval(func, x_left) * feval(func, x_middle) >= 0  % 中間點和 x_left 在同一邊
      x_left = x_middle;
   else
      x_right = x_middle;
   end
end

root = (x_left+x_right)/2;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% main program

func = inline( '3*cos(x)+1' );  % 要解的函數
res = bisection(initial_guess, -5, 3, 1e-5)
你需要登入後才可以回覆 登入 | 註冊會員

本版積分規則

hamutaro

LV:6 爵士

追蹤
  • 3

    主題

  • 20

    回文

  • 1

    粉絲