使用初始猜测值迭代到解决方案的Matlab代码

时间:2017-02-20 11:11:00

标签: matlab iteration

我有一个应用程序,我需要使用迭代技术来解决变量。基本上我需要猜测一个值为K = 1.2的值;以下是我的参数和方程式:

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)

当我猜测值为.010125时,我得到了K的正确值1.2。 如何使用具有初始猜测值的迭代技术获得正确的.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)

1 个答案:

答案 0 :(得分: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

修改

如果您正在解决a:在等式中按X补充(pi*(a./b)/2)并求解。请注意,这是一个非线性方程,除非给出良好的初始条件,否则它将失败

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)