可利用命令nl,编写程序解决之
假设要求方程:1.47/(1+X)+2.56/(1+X)^2+3.19/(1+X)^3-7=0 的解,求解步骤如下:
*第一步
clear all
program nlfaq
syntax varlist(min=1 max=1) [if], at(name)
tempname X A B C
scalar `X' = `at'[1, 1]
scalar `A' = `at'[1, 2]
scalar `B' = `at'[1, 3]
scalar `C' = `at'[1, 4]
tempvar yh
gen double `yh' = 1.47/(1+`X')+2.56/(1+`X')^2+3.19/(1+`X')^3-6 in 1
replace `yh' = `A'- (1+`X') in 2
replace `yh' = `B'-(1+`X')^2 in 3
replace `yh' = `C'-(1+`X')^3 in 4
replace `varlist' = `yh'
end
*第二步
clear
set obs 4
generate y = 0
replace y = 1 in 1
*最后求解
nl faq @ y, parameters(X A B C) initial(X 1 A 1 B 1 C 1)
计算结果如下所示:
(obs = 4)
Iteration 0: residual SS = 76.58403
Iteration 1: residual SS = 32.03028
Iteration 2: residual SS = .011014
Iteration 3: residual SS = 1.44e-06
Iteration 4: residual SS = 2.56e-14
Iteration 5: residual SS = 4.44e-31
Source | SS df MS
-------------+------------------------------ Number of obs = 4
Model | 1 4 .25 R-squared = 1.0000
Residual | 4.4373e-31 0 . Adj R-squared = .
-------------+------------------------------ Root MSE = .
Total | 1 4 .25 Res. dev. = -273.754
------------------------------------------------------------------------------
y | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
/X | .0139472 . . . . .
/A | 1.013947 . . . . .
/B | 1.028089 . . . . .
/C | 1.042428 . . . . .
------------------------------------------------------------------------------
可以看出,方程的解 X=.0139472
以上方法比较繁杂,权当抛砖引玉,希望有人给出更简便的方法。