iT邦幫忙

0

R的數值分析二分法code

r
  • 分享至 

  • xImage

更:

目的:f在[a,b]連續,且f(a)、f(b)一正一負,找出f(x)=0
Input: 端點: a,b、誤差: esp 、迭代次數: N
Output: p or “No roots !”

Step1: Let i=1 ;
FA=f(a).
Step2: while i ≤ N do step 3-6
Step3: set p=a+(b-a)/2 (計算p)
FP=f(p)
Step4: if (b-a)/2<eps
output(p)
Step5: set i=i+1
Step6: if FP*FA > 0 then set a=p; FA=FP
else set b=p
Step7: Output : “No roots !”

大概是這樣,

f1(f,1,2,1e-5,30)是說:x^3+4x^2-10在[1,2]的解,誤差小於10^(-5),疊代30次
但f1(f,0,1),函數x^3+4
x^2-10在[0,1]之間並無解,卻沒印出“No roots !”,反而印出0.99999,想請問後面哪一條有問題?謝謝


f1=function(f,a,b,eps=1e-5,N=20){
i=1
FA=f(a)
p=numeric(N)
while (i<=N){
p=a+(b-a)/2
FP=f(p)
if ( (b-a)/2<eps){
print(p)
}
i=i+1
if(FA*FP>0) {
a=p
FA=FP
}
else{
b=p
}
list(fail="No root!")
}
}

f=function(x) x^3+4*x^2-10
f1(f,1,2,1e-5,30)
f1(f,0,1)

各位好,我弄出了一個數值分析二分法的code,在if(FA*FP>0)那裏無解,應該列出No root,請問我那部分少加了什麼?

最近剛學,細節還不太懂,謝謝

obarisk iT邦研究生 2 級 ‧ 2022-10-23 10:44:38 檢舉
你可能需要把你想做的事情講清楚
l960908 iT邦新手 5 級 ‧ 2022-10-23 10:57:52 檢舉
好,抱歉,我晚上回去用電腦再加上去,謝謝提醒
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答