你过来,我告诉你用stata解方程的小秘密

2016-10-24 宝宝 爬虫俱乐部 爬虫俱乐部
我们不讨论高深的理论研究
而是只想分享给大家一些实用的stata命令
告诉你,你不知道的秘密。
这是别人整理数据的状态:
 这是你自己整理数据的窘境:

为什么有的人整理数据so easy,有的却是身心俱疲?
为什么中学数学我可以用XX点读机,大学的
5x +x^2 +3x^3 +x^4 +8x^5=100再也不能so easy?

Why?

因为你没有选择好的工具呀!信息技术如此发达的今天,你还在手工整理数据?别人早就甩你几条街了。(小编的意思是,你来关注我们的公众号啊~
今天小编就带你领略如何使用stata解决高阶方程的求解问题。

How?
    该算法的主要思路是通过二分法,求一元高阶复杂方程的解,因为一元高阶高阶复杂方程会有多解问题,本次我们主要解决一解问题的高阶复杂方程。
以x^2+x^3=12方程为例

首先我们需要通过模拟数据观察方程是否是一解方程。
clear
set obs 100
gen x=runiform(0,100)
gen y= x^2 +x^3 -12 //定义y函数,根据自己的方程可以变换
sort x
line y x
可以得出y 与x关系图
根据图形我们可以得知y是增函数即x^2+x^3=12有唯一解。
由 图我们可以初步判定方程解的范围,以此我们可以初步设定两个参数a b,解x在两个参数之间,当x=a时y小于0,当x=b时y大于0,通过两分法,x每次取0.5*(a+b)观察函数y的值,如果y<0,将x赋值 于a,如果y>0, 将x赋值于b,当y=0时,输出x和y值,此时的x为该方程的解。
先用比较简单方程来测试结果,方程为x^2+x^3=12当x>0时方程的求解。
clear
set obs 100     //设置观察数目
local a=0        //设置x最小观测值
local b=16      //设置x最大观测值
gen y=.
gen x=.
local j = 1
forvalues i=1/100{    //设置最大迭代次数
local x=0.5*(`a'+`b')    //将0.5*(a+b)赋值于x
local y= `x'^2+`x'^3 - 12  //定义y函数,根据自己的方程可以变换
if `y'==0 |abs(`y')<0.00001  {  
qui replace x= `x'  in `j'
qui replace y= `y'  in `j'
continue, break     //如果y==0终止迭代或者y绝对值小于0.00001终止迭代
                }
else {
  if `y'>0 {
            local b=`x'         //如果y>0, 将x赋值于b
            qui replace x= `x'  in `j'
            qui replace y= `y'  in `j'
                        }
 else{
             local a=`x'    //如果y<0,将x赋值于a
             qui replace x= `x'  in `j'
             qui replace y=`y'  in `j'
                                  }
                                  }
         local j=`j'+1
                                  }
此时可以得出方程当x>0时方程解为2
如果是一元高阶复杂方程,我们也只需要同样步骤,先模拟线图,观测解的范围,再运行程序求出具体解,如方程5x+x^2+3x^3+x^4+8x^5=100
根据上面程序可以先画图
得出结果
得出y也是增函数,根据图形我们可以的出当x>40时y值大于0所以我们将x的最大观测值b定义为40。
clear
set obs 100 //设置观察数目 
local a=0     //设置x最小观测值
local b=40   //设置x最大观测值
下面程序如上得出迭代结果
根据观测迭代28次以后,此时y的绝对值小于0.00001
此时的y已经非常逼近于0了,对应的x=1.554803729057312可以近似为方程的解。
第二种情况,对于一元高阶复杂方程根据第一步骤画图,得出一元高阶复杂函数为减函数问题,只需要将a b取值替换一下即可。
第三种情况,对于一元高阶复杂方程根据第一步骤画图,得出一元高阶复杂函数有多解问题,只需要通过第一步骤模拟函数分布图,得到对应根的取值范围,通过第一种情况增函数的求解和第二种减函数的求解,分别处理,这样就可以解决一元高阶复杂函数有多解问题。

 Now 

恭喜!一元高阶复杂方程总共就这三种情况
通过stata程序你已经可以轻松求出一元高阶复杂方程的解,
但要让自己掌握更多的数据处理技巧,
你还可以……

1
多加练习
光看我们的推文没有实际操作,效果不是那么明显的哟~

2
关注我们的公众号
“爬虫俱乐部”公众号致力于分享实用的stata命令,相互交流,相互学习,共同进步。

3
点赞、分享与打赏

有钱的捧个钱场,有人的捧个人场,多赏多赞多转发~


(编辑 @徐苾雯)



往期推文推荐:

1.有了这个命令,以后还怕重复?

2.esttab功能挖掘:“Yes”or“No”

3.用“套路”处理数据

4.厉害了,我stata哥

5.图之多,stata放得下

6.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度

7.据说这样数据替换比较快,你试一下,然后……

8.众里寻她千百度,synth命令来帮助!

9.登登等登 凳登等灯——均值t检验ttable2命令

10.I have a Stata, I have a python



此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

长按二维码关注爬虫俱乐部公众号

微信扫一扫
关注该公众号