Консультация № 137159
17.05.2008, 00:13
0.00 руб.
0 1 1
Еще раз салют вам,Дорогие Эксперты и умные люди. Помогите мне пожалуйста с курсовой работой,для нее нужно решить уравнение F(x)=(x-1)*(x-1)-exp(ln(0.5)*x) тремя методами: методом половинного деления, методом Ньютона (метод касательных) и методом простых итераций.
Заранее вам огромное спаибо...

Обсуждение

Неизвестный
17.05.2008, 12:28
общий
это ответ

<i>Здравствуйте, <b>Денисов Игорь Александрович</b>!</i>

В приложении находятся примеры решения данного уравнения методом половинного деления и методом Ньютона (касательных).

Информацию про методы я взял здесь: <a target=_blank href=http://elib.ispu.ru/library/math/sem1/index.html>Высшая математика. Первый семестр</a>.

Комментарии к первому примеру:

В примере <i>N</i> - количество итераций, необходимое для получения результата с точностью, равной <i>eps</i>.
<i>N</i> расчитывается по формуле:
<code>N = |log<sub>2</sub>((b-a)/(2*eps))|</code>
Комментарии ко второму примеру:

<i>Fp(x)</i> - это производная функции <i>F(x)</i>.
Если я правильно понял, то
<code>F(x) = (x-1)<sup>2</sup> - 0,5<sup>x</sup></code>
а ее производная, если я правильно посчитал
<code>F‘(x) = 2*(x-1) - 0,5<sup>x</sup>*ln(0,5)</code>

Если я неправильно посчитал производную, то пересчитайте и измените функцию <i>Fp(x)</i> - я уже давно производных не считал, и боюсь, что где-нибудь мог допустить ошибку.

<em>Удачи!</em>

Приложение:
###### Метод половинного деления ######program Q137159_1;{$N+}uses Crt; function F(const x: Double): Double;begin F:= (x-1)*(x-1)-exp(ln(0.5)*x);end;var a, b, c: Double; fa, fb, fc: Double; eps: Double; N: Integer;begin {ЋзЁбвЄ  нЄа ­ } ClrScr; {‡ Їа иЁў Ґ¬ г Ї®«м§®ў вҐ«п ¤Ё Ї §®­ Ї®ЁбЄ } writeln(‘‚ўҐ¤ЁвҐ ¤Ё Ї §®­ Ї®ЁбЄ  [a, b]:‘); write(‘a = ‘); readln(a); write(‘b = ‘); readln(b); fa:= F(a); fb:= F(b); if (((fa < 0.0) and (fb < 0.0)) or ((fa > 0.0) and (fb > 0.0)) or (a >= b)) then begin writeln(‘‚л ўўҐ«Ё ­ҐўҐа­лҐ §­ зҐ­Ёп a Ё b‘); readln; Halt(0); end; {‡ Їа иЁў Ґ¬ в®з­®бвм} write(‘’®з­®бвм Ї®ЁбЄ  = ‘); readln(eps); if (eps <= 0.0) then begin writeln(‘‚л ўўҐ«Ё ­ҐЇа ўЁ«м­®Ґ §­ зҐ­ЁҐ в®з­®бвЁ Ї®ЁбЄ !‘); readln; Halt(0); end; N:= Round(abs(ln((b - a)/(2*eps))/ln(2))); c:= (a + b)/2; fc:= F(c); while ((fc <> 0.0) and (N > 0)) do begin Dec(N); if (((fa > 0.0) and (fc < 0.0)) or ((fa < 0.0) and (fc > 0.0))) then begin b:= c; fb:= fc; end else begin a:= c; fa:= fc; end; c:= (a + b)/2; fc:= F(c); end; {‚лў®¤ १г«мв в } writeln; writeln(‘x = ‘, c:1:6); writeln(‘F(x) = ‘, fc:1:6); {Ћ¦Ё¤ ­ЁҐ ­ ¦ вЁп Ї®«м§®ў вҐ«Ґ¬ «оЎ®© Є­®ЇЄЁ} WriteLn; WriteLn(‘Press any key...‘); ReadLn;end.###### Метод Ньютона (касательных) ######program Q137159_2;{$N+}uses Crt; function Fp(const x: Double): Double;begin Fp:= 2*x - exp(ln(0.5)*x)*ln(0.5) - 2;end; function F(const x: Double): Double;begin F:= (x-1)*(x-1)-exp(ln(0.5)*x);end;var xi, xi1, fxi: Double; eps: Double;begin {Очистка экрана} ClrScr; {Запрашиваем у пользователя диапазон поиска} writeln(‘Введите начальное значение‘); write(‘x0 = ‘); readln(xi); {Запрашиваем точность} write(‘Точность поиска = ‘); readln(eps); if (eps <= 0.0) then begin writeln(‘Вы ввели неправильное значение точности поиска!‘); readln; Halt(0); end; fxi:= F(xi); xi1:= xi - fxi/Fp(xi); while ((fxi <> 0.0) and (abs(xi1 - xi) > eps)) do begin xi:= xi1; fxi:= F(xi); xi1:= xi - fxi/Fp(xi); end; {Вывод результата} writeln; writeln(‘x = ‘, xi:1:6); writeln(‘F(x) = ‘, fxi:1:6); {Ожидание нажатия пользователем любой кнопки} WriteLn; WriteLn(‘Press any key...‘); ReadLn;end.
Форма ответа