2016-09-17 11 views
1

指数関数の近似和を求めるコードを書いた。これはN-1項まで繰り返し実行し、 、合計、abs誤差および各反復ステップの相対誤差。出力をPythonターミナルのテーブルとして出力し、適切な見出しをつけて.txtとして出力を保存する

from __future__ import division 
import numpy as np 
import matplotlib.pyplot as plt 
import math 

N = input ("Please enter an integer at which term you want to turncate your summation") 
x = input ("please enter a number for which you want to run the exponential summation e^{x}") 


function= math.exp(x) 
exp_sum = 0.0 
abs_err = 0.0 
rel_err = 0.0 


for n in range (0, N): 
    factorial = math.factorial(n) 
    power  = x**n 
    nth_term = power/factorial 
    exp_sum = exp_sum + nth_term 
    abs_err = abs(function - exp_sum) 
    rel_err = abs(abs_err)/abs(function) 


    print "The exponential function which has %d-term expansion, returns the approximated sum to be %.16f." % (n, exp_sum) 
    print "This approximated sum has an absolute error to be %.25f" % abs_err 
    print "and a relative error to be %.25f" % rel_err 

が今、それは実際には各繰り返しで愚かな印刷値を見て、それがわずか数反復までよさそうだ、私の計画は、適切な列見出し(反復、合計、ABS errを持つ表として出力を得ることです、rel err)を実行してください。

また、私は出力の.txtファイルを保存したいと思います。誰かがそれをPythonで行う方法を知っていれば、私は非常に感謝していただきありがとうございました。

答えて

1

あなたはかなりこのように、表形式のデータを印刷するためにpretty_table()機能を使用する場合があります。

def pretty_table(rows, column_count, column_spacing=4): 
    aligned_columns = [] 
    for column in range(column_count): 
     column_data = list(map(lambda row: row[column], rows)) 
     aligned_columns.append((max(map(len, column_data)) + column_spacing, column_data)) 

    for row in range(len(rows)): 
     aligned_row = map(lambda x: (x[0], x[1][row]), aligned_columns) 
     yield ''.join(map(lambda x: x[1] + ' ' * (x[0] - len(x[1])), aligned_row)) 

行のリストと列数与えられたこの小さな機能、かなり形式のテーブルのデータが得られます、 1行ずつ。必要に応じて列の間隔を調整することもできます。

# At first, contains just the header columns. 
rows = [['Term', 'Exponential sum', 'Absolute error', 'Relative error']] 
for n in range (0, N): 
    factorial = math.factorial(n) 
    power  = x**n 
    nth_term = power/factorial 
    exp_sum = exp_sum + nth_term 
    abs_err = abs(function - exp_sum) 
    rel_err = abs(abs_err)/abs(function) 

    rows.append((str(n), str(exp_sum), str(abs_err), str(rel_err))) 

for line in pretty_table(rows, 4): 
    print(line) 

N = 10, X = 5の入力については、このコードの出力を:あなたは次のことを行うことができ、あなたの特定のコードで

Term Exponential sum Absolute error Relative error  
0  1.0    147.413159103  0.993262053001  
1  6.0    142.413159103  0.959572318005  
2  18.5    129.913159103  0.875347980517  
3  39.3333333333  109.079825769  0.734974084703  
4  65.375    83.0381591026  0.559506714935  
5  91.4166666667  56.9964924359  0.384039345167  
6  113.118055556  35.295103547  0.237816537027  
7  128.619047619  19.7941114835  0.13337167407  
8  138.307167659  10.1059914438  0.0680936347218  
9  143.68945657  4.72370253291  0.0318280573062  

あなたはそれをファイルにリダイレクトしたい場合は、かこれは最後のものの代わりにforループ:

with open('my_file.txt', 'w') as output: 
    for line in pretty_table(rows, 4): 
     print >> output, line 
関連する問題