Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.06.2015, 22:27   #1
romaric
Пользователь
 
Регистрация: 10.06.2015
Сообщений: 10
По умолчанию Решение нелинейных уравнений различными методами

Есть задача решить нелинейное уравнение на Pascal различными методами:
методом итерации, методом половинного деления, методом ньютона.
Можете подсказать что-нибудь?
e^x+ln x-10 x=0
Отрезок содержащий корень: [3;4]
romaric вне форума
Старый 10.06.2015, 22:32   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Что, например, подсказать? Пробуйте решать самостоятельно, если будут вопросы, задавайте, вероятно, вам смогут помочь.
Вадим Мошев вне форума
Старый 10.06.2015, 22:36   #3
romaric
Пользователь
 
Регистрация: 10.06.2015
Сообщений: 10
По умолчанию

Попробовал, методом половинного деления:

Код:
uses crt;
function F(x,y:real):real;
begin
F:=(exp(ln(y)*x))+(Ln(x))-(10*x);
end;
var a,b,c,e,y,x:real;
begin
clrscr;
a:=3;{левая граница}
b:=4;{правая граница}
y:=3;
e:=0.000001;{точность}
if F(a,y)*F(b,y)<0 then
  begin
   repeat
   c:=(a+b)/2;
   if F(a,y)*F(c,y)<=0 then b:=c
   else a:=c;
   until b-a<e;
   x:=(a+b)/2;
  end
else writeln('На данном интервале корней нет, либо взят большой интервал.');
writeln('Z(x,y)=',x:0:7);
readln
end.

Результат: Z(x,y)=3.0885139

В условии задачи была оговорка, что шаг следует считать так:
i=o,n
Xi=X0+ih
не могу понять, как это изобразить в pascal

Последний раз редактировалось romaric; 10.06.2015 в 22:47.
romaric вне форума
Старый 10.06.2015, 22:43   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Прежде всего, по поводу офорления кода. Почитайте это: http://www.programmersforum.ru/showt...23#post1497723
Вадим Мошев вне форума
Старый 10.06.2015, 22:47   #5
romaric
Пользователь
 
Регистрация: 10.06.2015
Сообщений: 10
По умолчанию

Что не так? [СODE][/СODE] вписано
romaric вне форума
Старый 10.06.2015, 22:49   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Код:
function F(x,y:real):real;
begin
F:=(exp(ln(y)*x))+(Ln(x))-(10*x);
end;
Зачем так?
Вашу функцию можно записать так:

function F(x:real):real;
begin
F:=e(x)+ln(x)-exp(x*ln(10))
end;

Цитата:
Сообщение от romaric Посмотреть сообщение
Что не так? [СODE][/СODE] вписано
А вы прочитайте, как правильно пользоваться этим тегом
Вадим Мошев вне форума
Старый 10.06.2015, 22:50   #7
romaric
Пользователь
 
Регистрация: 10.06.2015
Сообщений: 10
По умолчанию

Не подумал. А по существу будет что? Или будет только набивание ЧСВ модератору, методом тыканья новичка в мелкие ошибки?

Последний раз редактировалось romaric; 10.06.2015 в 22:54.
romaric вне форума
Старый 10.06.2015, 23:28   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
В условии задачи была оговорка, что шаг следует считать так:
i=o,n
Xi=X0+ih
не могу понять, как это изобразить в pascal
Зачем вам считать шаг? Согласно этому методу, границы движутся навстречу друг другу.

Остальное вроде всё верно. Что проверить, насколько адекватно считает программа, вычислите значение функции, от того, что было найдено в процессе поиска корня.
Кстати
Код:
until b-a<e;
Надо писать:
Код:
until abs(b-a)<e;
Цитата:
А по существу будет что? Или будет только набивание ЧСВ модератору, методом тыканья новичка в мелкие ошибки?
А вот это зачем? Я вам не хамил.
Вадим Мошев вне форума
Старый 11.06.2015, 00:18   #9
romaric
Пользователь
 
Регистрация: 10.06.2015
Сообщений: 10
По умолчанию

Теперь по существу. Благодарю. Беру свои слова про ЧСВ обратно.

Решал методом итерации, код:

Код:
uses crt;
function F(x,y:real):real;
begin
F:=(exp(ln(y)*x))+(ln(x))-(10*x);
end;
{var x0,x1,a,b,e:real;}
var x0,x1,e:real;
iteraz:integer;
begin
clrscr;
write('Введите приближённое значение X=');
readln(x1);
write('Введите точность e=');
readln(e);
iteraz:=0;
repeat
iteraz:=iteraz+1;
x0:=x1;
x1:=F(x0);
until (abs(x1-x0)<=e);
writeln('Решение уравнения:');
writeln('Точное значение корня.........0.7376');
writeln('Вычисленное значение корня...',x1:6:5);
writeln('Число итераций.............. ',iteraz);
writeln('Программа закончена, нажмите Enter.');
readln;
end.
Программа не компилируется. Выдает: (18,5) Error: Wrong number of parameters specified for call to "fun"
Не могу врубится где ошибка. Точнее в чем именно.

Последний раз редактировалось romaric; 11.06.2015 в 00:25.
romaric вне форума
Старый 11.06.2015, 00:25   #10
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Код:
function F(x,y:real):real;
Потому что написанная вами функция ожидает два параметра, а вы передаёте ему один:
Код:
x1:=F(x0)
Вадим Мошев вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение нелинейных уравнений за численными методами Olga2002 Помощь студентам 0 29.09.2013 15:27
Delphi. Решение системы нелинейных уравнений методами Ньютона и простых итераций. Помогите найти ошибку! Sianessa Помощь студентам 8 13.04.2012 17:32
Решение нелинейных уравнений Kazik Помощь студентам 0 13.02.2012 14:26
Решение нелинейных уравнений s2dentishe Помощь студентам 0 18.04.2010 11:47
решение нелинейных уравнений Жанна__90 Помощь студентам 21 22.07.2009 01:30