2017-09-19 52 views
0

我正在學習數學微積分課程,除了非常基本的課程外,我們不需要知道任何scilab編程,因爲課程大部分都是理論課。我正在閱讀小冊子,並發現這個scilab代碼旨在通過bissection方法找到一個函數的根。 問題是,我無法找到使其工作的方法。我試圖用bissecao(x,-1,1,0.1,40)來調用它,但它不起作用。 我得到的錯誤是:有關scilab的基本問題

at line  3 of function bissecao (E:\Downloads\bisseccao3.sce line 3) 

Invalid index. 

正如我高度懷疑,代碼本身是不工作,我試圖尋找什麼我可以發現,似乎錯了,沒有用,我想我可能不知何故,它說錯了。

的代碼如下:

function p = bissecao(f, a, b, TOL, N) 
i = 1 
fa = f(a) 
while (i <= N) 
    //iteraction of the bissection 
    p = a + (b-a)/2 
    fp = f(p) 
    //stop condition 
    if ((fp == 0) | ((b-a)/2 < TOL)) then 
    return p 
    end 
    //bissects the interval 
    i = i+1 
    if (fa * fp > 0) then 
    a = p 
    fa = fp 
    else 
    b = p 
    end 
    end 
error ('Max number iter. exceded!') 
endfunction 

其中F是函數(I猜),a和b是在其中我們將迭代的間隔的限制,TOL在公差在其程序終止接近零,N是最大迭代次數。

任何幫助如何使這個運行非常感謝。

+0

錯誤日誌不符合我的:您的通話'涉及bissecao''x'作爲第一個參數,這是不是在你的問題中定義。請明確定義:你的意思是身份功能嗎? – PTRK

回答

1

錯誤bissecao

bissecao功能有唯一的錯誤是調用return

在功能return停止功能的執行, [x1,..,xn]=return(a1,..,an)停止功能的執行和 將本地變量ai放在名稱爲xi的呼叫環境中。

因此,您應該調用它沒有任何參數(輸入我們的輸出),函數將退出並返回p。 或者您可以撥打y1 = return(p),該功能將退出並且p將被存儲在y1中。

在函數中使用無參數形式return以避免更改父/調用腳本/函數中變量的值(可能的副作用)更好。

的參數的形式是更加有用當與pause交互調試:

在暫停模式下,它允許返回到較低的水平。 [x1,..,xn]=return(a1,..,an)返回到較低級別並將 變量ai放在名稱爲xi的呼叫環境中。

錯誤調用bissecao

的問題可能會通過您的來電:bissecao(x,-1,1,0.1,40)因爲你沒有定義x。只需通過創建一個功能修復這個問題解決了:

function y=x(t) 
    y=t+0.3 
enfunction 
x0=bissecao(x,-1,1,0.1,40) // changed 'return p' to 'return' 
disp(x0) // gives -0.3 as expected 
+0

在x(t)的定義中,它不應該是't'而不是'x'嗎? – luispauloml

+0

@luispauloml忘記了。修復。 – PTRK