既然说误差,那我们就得明白啥是误差,误差有哪些也就是误差的分类,怎样减小误差,让我们的真实值越来越接近预计值…
1.误差的来源很复杂,但主要可分为以下几类:
2.误差和有效数字:
【注意】:绝对误差有正有负,绝对误差可不是误差的绝对值!
4.有效数字
由有效数字的定义我们来看一道例题:
下列各近似值的误差极限都是0.005:
x1=1.38 x2=-0.132
则问:各个近似值各有几位有效数字:
误差限:0.005=1/2 x 10^(-2)
Python代码分析:
# -*- coding: utf-8 -*-
from math import *
erro_limt = input('请输入误差极限:')
#s = number.index('.')
#print(s)
#for i in number[0:number.index('.')]:
# print(i,end=' ')
#
#number = eval(input('请输入一个小数:'))
def Erro_limit(erro_limt):
# print('str(erro_limt)的长度:',len(erro_limt))
N = len(erro_limt) - 2 - erro_limt.index('.')
# print('erro_limt有 {} 个0'.format(N))
#N = k - n
s = "1/2*10^(-{})".format(N)
try:
number = input('请输入一个小数(最多于千位):')
if number[0] != '-':
k = len(number[0:number.index('.')]) #1
w_list = [4,3,2,1,0]
if k in w_list:
print('误差限:{} ='.format(erro_limt),s)
print("number={}=".format(number)+\
"10**{}x{}".format(k,eval(number)/pow(10,k)))
n = k + N
else:
k = 0
#k
for i in number[number.index('.')+1:len(number)]:
if i == '0' :
k += 1
else:
break
#m判断小数点后有多少个0
s = number[number.index('.')+1:len(number)]
w_list = [4,3,2,1,0,-1,-2,3,-4,-5]
if k in w_list:
print('误差限:{} ='.format(erro_limt),s)
print("number={}=".format(number)+\
"10**({})x{}".format((k-1),eval(number)*(10**k)))
n = k + N
if n < 0:
print('{}没有有效数字!'.format(number))
else:
print("故,k-n={}".format(k-n) + '=>' + 'n={}'.format(n))
print('number有{}位有效数字!'.format(n))
except:
print('程序出错啦!')
Erro_limit(erro_limt)
x1=1.38时:
x2=-0.132 时:
今天先写到这里吧(夜猫子生活,凌晨2点多…),代码明天写第二篇的时候再改进,总之数值分析,代码得跟上,每一篇都附上Python代码片段,供大家参考,相互交流…