|
# !/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# @Author:Nicolas TU
# @Date: 2019-12-2 15:53:06
import numpy as np
from math import pi,cos,sin,sqrt
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #这两句用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False
import time
time_start=time.time()#计算时间开始
#x*sin[13272/(2x)] = 6601,求实数 x 的值
# 画图
plt.figure(figsize=(8,6))
x = np.linspace(-50000,50000,1000)
y =x*np.sin(13272/(2*x))-6601
x1 = np.linspace(-40000,40000,1000)
y1 =np.linspace(0,0,1000)
plt.plot(x,y,color="blue",linewidth=2)#函数f(x)=x*sin[13272/(2*x)]-6601的曲线
plt.plot(x1,y1,color="red",linewidth=2)#零点线
plt.title(u'函数f(x)=x*sin[13272/(2*x)]-6601曲线')
plt.xlabel("x")
plt.ylabel("y")
plt.show()
print("二分法求方程根")
print("x*sin[13272/(2*x)] - 6601=0")
print("========================华丽的分割线============================")
print("求方程第一个根")
a=30000#给定第一根的下限
b=40000#给定第一根的上限
n=1
x=(a+b)*0.5
print("第",n,"次二分,x=",x)
while ((x-a)>0.000000001):
fx=x*sin(13272/(2*x))-6601
if fx>0:
b=x
else:
a=x
x=(a+b)/2
n=n+1
print("第",n,"次二分,x=",x)
print("========================华丽的分割线============================")
print("求方程第二个根")
a=-50000#给定第2根的下限
b=-30000#给定第2根的上限
n=1
x=(a+b)*0.5
print("第",n,"次二分,x=",x)
while ((x-a)>0.000000001):
fx=x*sin(13272/(2*x))-6601
if fx>0:
a=x#注意函数的取值方向,在a方向是大于0的;
else:
b=x#注意函数的取值方向,在b方向是小于0的;
x=(a+b)/2
n=n+1
print("第",n,"次二分,x=",x)
print("==============误差已经控制在百万分之1内==============")
print("一共经历了",n,"次二分,得到方程的根:x=",x)
fx=x*sin(13272/(2*x))-6601
print("验算x*sin[13272/(2*x)]-6601=%f"%(fx))
time_end=time.time()#计算时间结束
print('-'*50)
print('python3.6程序运行',time_end-time_start,'秒。')
print('-'*50)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|