我有一个应用程序,我需要使用迭代技术来解决变量。基本上我需要猜测一个值为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)
答案 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)