2015-02-27 3 views
1

У меня есть уравнение f(x)=exp(x)+3x^2, f(x)=0, x=? тогда я использую scilab решить это уравнение с помощью итераций с фиксированной точкой, это мой кодрешить уравнение с использованием фиксированной точки в scilab?

function fixed_point(fung,x0,err) 
x=zeros(100); 
ea = 100; 
i = 1; 
x(i)=x0; 
printf(" \t i \t x(i) \t  ea(%%)"); 
printf("\n\t %d \t %f \t %f", i, x(i), abs(ea)); 
while (abs(ea) >err) do 
    i=i+1; 
    z =x(i-1); 
    x(i) = evstr(fung)+z; 
    ea =100*(x(i)-x(i-1))/x(i); 
    printf("\n\t %d \t %f \t %f", i, x(i), abs(ea)); 
end 

printf("\n Akar = %f", x(i)); 
endfunction 

тогда я называю его с помощью:

fixed_point ('exp(z)-(3 .* z .*z)',0.00000000001,0.5) 

Я получил x(i)=inf наконец, но я думаю, что это не ответ, может кто-нибудь объяснить мне, что случилось с моим кодом?

+0

Я не понимаю метод, который вы пытаетесь реализовать. Специально здесь: 'x (i) = evstr (fung) + z;' Здесь вы вычисляете 'f (x (i-1)) + x (i-1)', не могли бы вы объяснить этот метод или связать алгоритм? – Daniel

+0

Реальных решений нет: http://www.wolframalpha.com/input/?i=f%28x%29%3Dexp%28x%29%2B3x%5E2 – Daniel

+0

спасибо за ваш комментарий, я использую итерацию с фиксированной точкой, https : //mat.iitm.ac.in/home/sryedida/public_html/caimna/transcendental/iteration%20methods/fixed-point/iteration.html, http://en.wikipedia.org/wiki/Fixed-point_iteration, function x (i) = evst ... означает x (i) = f (z) + z или x (i) = f (x (i-1)) + x (i-1) @ Daniel –

ответ

1

Давайте разделим ответ на «подзадачи»:

  1. В общем: не использовать численные методы, если вы не имеете представление о решении. Как показал Даниэль, это уравнение не имеет никакого решения в действиях. Если у вас есть разумный x0, заговорите его окрестности сначала!

  2. В целом: ваша цель - решить уравнение или реализовать этот метод? Matlab имеет, например, fsolve (и вы добавили тег matlab, а также scilab), или, если вы хотите создать свою собственную функцию, Newton's method отлично справляется с этими легко дифференцируемыми функциями (sin, exp, x^n ...).

  3. В частности: добавьте к вашему коду что-то, что позволит вам избежать цикла while, если решение не сходится. Чем ваш выход должен быть «НЕ ПРЕОБРАЗОВАТЬ», который определенно лучше, чем таинственный inf (например, перерыв петли if i>1e3 или что-то в этом роде).