Info
此问题已关闭。 请重新打开它进行编辑或回答。
it is showing not enough input arguments
1 次查看(过去 30 天)
显示 更早的评论
function out = g(x1 , x2)
out = x1 * x2 - 1140;
function [dGdX1 dGdX2] = dGdX(x1 , x2)
dGdX1 = x2 ;
dGdX2 = x1 ;
clc ;
clear ;
close a l l ;
format short g ;
% −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− %
mu_x1 = 38;
sigma_x1 = 3.8;
mu_x2 = 54;
sigma_x2 = 2.7;
x1 = mu_x1
x2 = mu_x2
[dg_dx1 dg_dx2] = dGdX(x1 , x2 ) ;
g_ = g(x1 , x2)
beta = g_ / sqrt (( dg_dx1 * sigma_x1)^2 + (dg_dx2 * sigma_x2)^2)
alpha_1 = -dg_dx1 * sigma_x1 / sqrt (( dg_dx1 * sigma_x1)^2 +...
(dg_dx2 * sigma_x2 )^2);
alpha_2 = -dg_dx2 * sigma_x2 / sqrt (( dg_dx1 * sigma_x1)^2 +...
(dg_dx2 * sigma_x2 )^2);
u1 = beta * alpha_1 ;
u2 = beta * alpha_2 ;
x1 = mu_x1 + u1 * sigma_x1
x2 = mu_x2 + u2 * sigma_x2
epsilon = 1.0;
while epsilon > 1E-3
g_ = g(x1 , x2)
[dg_dx1 dg_dx2] = dGdX(x1 , x2 ) ;
beta_old = beta ;
beta = (g_ - dg_dx1 * sigma_x1 * u1 - dg_dx2 * sigma_x2 * u2 )...
/ sqrt (( dg_dx1 * sigma_x1)^2 + (dg_dx2 * sigma_x2)^2)
epsilon = abs( beta - beta_old ) / beta_old
alpha_1 = -dg_dx1 * sigma_x1 / sqrt (( dg_dx1 * sigma_x1)^2 +...
(dg_dx2 * sigma_x2 )^2);
alpha_2 = -dg_dx2 * sigma_x2 / sqrt (( dg_dx1 * sigma_x1)^2 +...
(dg_dx2 * sigma_x2 )^2);
u1 = beta * alpha_1 ;
u2 = beta * alpha_2 ;
x1 = mu_x1 + u1 * sigma_x1
x2 = mu_x2 + u2 * sigma_x2
end
can any one help?
2 个评论
Azzi Abdelmalek
2016-4-9
What is the aim of assigning variables then clearing them?
dGdX1 = x2 ;
dGdX2 = x1 ;
clc ;
clear
回答(1 个)
Kuifeng
2016-4-10
%Remove the following lines from the code
clc ;
clear ;
close a l l ;
2 个评论
Walter Roberson
2016-4-11
And lucky for you that it did, as otherwise your code would recurse infinitely. You invoke [dg_dx1 dg_dx2] = dGdX(x1 , x2 ) ; within your dGdX code, so it would go back and start the routine all over again, and hit that line and go back and start the routine all over again, and so on.
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!