zoukankan      html  css  js  c++  java
  • 初入VSCode以及用麦克劳林公式法求ln(x)

    作为计算机萌新刚开始学python一个月不到(老师给的Anaconda安装包,Spyder),在周围大佬影响下准备入坑VSCode,不过刚开始用的时候出现了点小麻烦,貌似是VSCode里面没找到python的编译器(我也不晓得这是啥,甚至一度以为已经安装的高亮python是个编译器QAQ)

    官网下载一个python也可以,但是大佬给我说下载Anaconda的时候已经有pyhton.exe,可以给VSCode用,这就涉及到一个叫环境变量的东西

    “环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
    环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。”——百度百科

    大致就是,把anaconda文件夹设置为一个环境变量,就可以让VSCode在此路径里面去找到可以编辑python的编译器从而正常运行我写的代码

    环境变量-Path-新建-添加Anaconda文件夹

    当时添加完后就直接去测试了,结果一运行程序就弹出Microsoft的APP商店,最后搞明白原来环境变量存在优先级

    电脑从上向下读取环境变量里面的路径,读到WindowsAPPs的时候找到了python,就弹出了在商店下载python的窗口,然后电脑就不会继续读取下面的路径了

    解决这个问题只需要把添加的Anaconda从下面移到WindowsAPPs上面就OK了(当时还想把这个碍事的WindowsAPPs删掉,后来明白有些系统自带的东西是这里面的,就不敢再删,至于把Anaconda优先级提高到WindowsAPPs上面后发生什么我也不晓得,等待日后的bugQWQ)

    折腾一番之后终于打开VSCode可以运行我写的代码啦!(ps:VSCode真的是一款能让你养成随手保存好习惯的软件orz)

    开始进入正题>>

    麦克劳林公式法求解ln(x)

    (我还没有学会用markdown敲公式(泪目)就暂时用图片代替吧)

    运用这个公式我们可以尝试写ln(x)(x∈(0,2])的代码

    def ln(x,N):                #x是用户输入的自变量,N是循环的次数
        n=1
        m=0
        while n<=N:
            m+=(-1)**(n+1)*(x-1)**n/n
            n=n+1
        return m
    print(ln(1.5,50))
    

    不过这个代码的局限性在于它的定义域被限制在(0,2],要想求任意大于0的对数值,需要想办法将任给的x变换到区间(0,2]之内:

    据此我们可以写出代码

    # ln计算函数(麦克劳林公式法)
    from math import log,e
    def  ln(x):
        result = 0
        m=0
        while x/e**m>1:
            m=m+1
        x=x/e**m
        for n in range(1,10000): # range(N)=[0,1,2,...,N-1]
            result += (-1)**(n+1)/n * ((x-1)**n)
        result+=m    
        return result
    x=eval(input())
    print('x=%.5f时,ln(x)=%.10f'%(x, ln(x)))
    a=log(x)
    print('x=%.5f时,ln(x)=%.10f'%(x, a))
    

    就可以对任意的x进行对数计算了,不过我在运行中又发现了一个小问题

    程序员日常对笔记本性能检测(QWQ)——发现输入这么大一个数时,用户输入的数与现实的“x=_时”竟然不一样甚至相差很大

    一个原因是我想输出的是5位小数,计算机再得到这么大一个数时要把它转化成五位小数就会使用科学计数法,1.00000e--,再转换成整数时造成了小数部分的丢失产生误差

    貌似后面生成的是一串乱码,但是输出两遍都是同一套乱码,说明乱码和原数据之间还是存在一定的联系的,至于深层的关联我还没搞懂啊(萌新学渣的卑微)

    浮点数精确度问题是一个很重要的事情,所谓“失之毫厘,谬以千里”,但是我还没有学到那去,这里特别感谢在同班的一个大佬的帮助下创建博客写了第一篇随笔,希望在以后的日子里学到更多的东西记录在博客里,加油加油!

  • 相关阅读:
    <html>
    小贝_mysql 触发器使用
    windows能连网络,可是打不开网页,出现无法解析server的DNS
    POJ 3268 Bookshelf 2 动态规划法题解
    Artistic Style在windows下的使用(C/C++)
    ASP.NET CS文件中输出JavaScript脚本的3种方法以及区别
    跨浏览器的本地存储解决方案
    JavaScript Array 对象扩展方法
    JavaScript String 对象扩展方法
    jQuery开发技巧
  • 原文地址:https://www.cnblogs.com/orz-/p/13934315.html
Copyright © 2011-2022 走看看