我目前正在做一個家庭作業任務,要求我使用false-position方法來估計一個值。我覺得我幾乎所有的東西都存在,但是如果我的陳述中出現了問題,我會掛斷電話。所以我必須確定函數的位姿實根:ln(x^2)= 0.7使用3次迭代的假位置方法,xl = 0.5和xu = 2。我在底部附上了正確答案,以幫助我更好地解釋我的問題。我有三個需要幫助的具體問題。Matlab False-Position方法
1)。首先,在X1的值的第三次迭代中,我的代碼仍然將其視爲1.625而不是正確的1.25。我不明白爲什麼這樣做,因爲我的if語句應該阻止這一點。它在第二次迭代中正確地改變了這個值,而不是第三次。 2)。我也需要幫助來查找錯誤。這部分我很堅持。我知道找到錯誤的方程,但我的問題是如何跟蹤xr_new和xr_old。林不知道,如果我想添加一些比較,以查看它是否改變之前計算或什麼。 3)。我也想輸出我的價值,並像提供的解決方案一樣構建一個表。我之前使用過的表的經驗是直接對它進行硬編碼,並且在找到值時我很難建立表格。我知道我需要for循環中的表格,並且一次構建一個單元格,但是在這個領域沒有經驗可以開始。
我希望這不是太多的幫助,要求我有intermatiate matlab技能,這是我不得不做的一個更難的問題。任何幫助都非常感謝。
clc; clear;
f= @(x) log(x.^2) - 0.7;
x = -3: .005 : 3;
figure(1)
grid on
hold on
plot (x,f(x))
% bisection method with 3 iterations
xl = 0.5
xu = 2
%Table = table(iteration, xl , f(xl), xu, f(xu), xr, f(xr), Ea)
for i = 1:1:3
F_xl = f(xl)
F_xu = f(xu)
xr = .5*(xl+xu)
F_xr = f(xr)
if ((F_xu*F_xl) < 0)
xl = xr
else
xu = xr
end
%Error = abs(xr_new-xr_old)/xr_new
end
我不知道爲什麼行迭代=(1:3)';不在代碼內。當您嘗試此代碼時添加該行。 – nahomyaja
非常感謝!我應該想到將xl,xu和xr作爲3個空格開始。 – jake
不客氣。希望你明白代碼中正在做什麼。我沒有解釋太多,因爲你說你是一位經驗豐富的MATLAB程序員。 – nahomyaja