2014-11-22 2 views
0

Я создал небольшой код в Julia, который может использовать function iteration для решения простой нелинейной проблемы.Хорошее представление результатов в Julia после цикла

Код следующее:

""" 
Problem: find the root of f(x) = exp(-x) - x 
using the fixed point iteration 
(aka function iteration) 

Solution: f(x) = exp(-x) - x = 0 
      x = exp(-x) 

""" 

i = 0;    # initialize first iteration 
x = 0;    # initialize solution 
error = 1;   # initialize error bound 
xvals = x;   # initialize array of iterates 

tic() 

while error >= 1e-10 
     y = exp(-x); 
     xvals = [xvals;y];  # It is not needed actually 
     error = abs(y-x); 
     x = y; 
     i = i + 1; 
     println(["Solution", x', "Error:", error', "Iteration no:", i']) 
end 

toc() 

В приведенном выше коде результаты не являются в чистом виде для Есть много десятичных чисел. Насколько я понимаю, использование println может быть не очень хорошей идеей, и вместо этого необходимо использовать @printf или sprintf, однако я не смог поместить все в одну строку.

Возможно ли это?

+0

Не ответ на ваш вопрос, но для чего стоит функция 'compute_fixed_point' в библиотеке' QuantEcon', которая применила бы итерацию функции для вас. Таким образом, при условии, что вы вызвали 'Pkg.add (« QuantEcon »)' и 'using QuantEcon', вы могли бы решить эту проблему через' sol = compute_fixed_point (x-> exp (-x), guess) ', где' guess' это исходное предположение. – spencerlyon2

+0

Ты сэр сделал мой день. Прошло некоторое время с тех пор, как я посетил их сайт (Quant-Econ), и теперь они также включили примеры Джулии. Pefect, просто отлично. – Echetlaeus

+0

Удивительный, рад, что вы в восторге от этого! Мы потратили некоторое время на то, чтобы тот же код был доступен как в версиях Quanton, так и в python и julia. – spencerlyon2

ответ

3

Синтаксис для printf (примерно) одинаковый для всех языков, , но это действительно тайный.

Вы можете использовать %f для поплавков, %e для поплавков в научной нотации, %d для целых чисел, %s для строк. Числа между % и буквой: Число цифр (или символов) до и после запятой.

i = 0 
x = 0 
error = Inf 
while error >= 1e-10 
    x, previous = exp(-x), x 
    error = abs(x - previous) 
    i += 1 
    @printf( 
     "Value: %1.3f Error: %1.3e Iteration: %3d\n", 
     x, error, i 
    ) 
end 

Вы также попробовали round или signif, , но так как круглых десятичных чисел не всегда могут быть точно представлены как поплавки, , что не работает надежно.

Смежные вопросы