2017-02-20 85 views
0

我有一個應用程序,我需要使用迭代技術來解決變量問題。基本上我需要猜測一個可以讓K = 1.2的值;下面是參數和方程式,使我有:使用初始猜測值迭代求解的Matlab代碼

b = .02; 
M = 3; 
Sg = 4.5; 

這裏的公式:

X = pi*alpha/2; 
F = sqrt((1/X)*tan(X))*(.923 + .199*(1 - sin(X))^4)/cos(X); 
K = F*Sg*sqrt(pi*a) 

當我猜的0.010125的值,我得到1.2的正確值K. 哪有我使用具有初始猜測值的迭代技術獲得.010125的正確值?

這裏是整個代碼:

%ABS Plastic Under Moment Load 
clc 
clear all 
% We need to guess a value to get K = 1.2 
a = .010125; % guess this value 
b = .02; 
M = 3; 
Sg = 4.5; 
alpha = a/b; 
X = pi*alpha/2; 
F = sqrt((1/X)*tan(X))*(.923 + .199*(1 - sin(X))^4)/cos(X); 
K = F*Sg*sqrt(pi*a) 
+0

然後您需要了解迭代技術!最基本的是二分法,存在更復雜的方法,如牛頓法。嘗試在'fsolve'熟悉 –

+0

謝謝!看起來像fsolve是一個不錯的選擇! – PatStarks

回答

0

使用fsolve解決一些非線形爲:

clc 
clear all 
% We need to guess a value to get K = 1.2 
a = .010125; % guess this value 
b = .02; 
M = 3; 
Sg = 4.5; 
alpha = a/b; 
X = pi*alpha/2; 
F = @(X)sqrt((1./X).*tan(X)).*(.923 + .199*(1 - sin(X)).^4)./cos(X)-1.2/(Sg*sqrt(pi*a)); 
plot(0:0.01:1, F(0:0.01:1)); 

fsolve(F,X) 

請注意,我改變了對F的定義,包括約束,胃內F=0會給地方K=1.2

我明白了:

ans = 

     0.795259758834974 

編輯:由方程(pi*(a./b)/2)解決替補多X

如果您正在求解a。請注意,這是一個非線性方程式,除非給出良好的初始條件,否則它將失敗。

F = @(a)sqrt((1./(pi*(a./b)/2)).*tan((pi*(a./b)/2))).*(.923 + .199*(1 - sin((pi*(a./b)/2))).^4)./cos((pi*(a./b)/2))-1.2./(Sg*sqrt(pi*a)); 
a=0.01 
fsolve(F,a) 
% or as horchler Suggests 
fzero(F,a) 
+1

'fzero'對於這樣的單變量問題將是更好的選擇。 – horchler