07.04.2014, 22:13 | #1 (permalink) |
Member
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Решение нелинейного уравнения методом деления отрезка пополам
Прошу у вас помощи в написании такой вот программы.... И можете примерно описать как такие программы пишутся, вообще тьма. ФУНКЦИЯ – КАК ПАРАМЕТР ПРОЦЕДУРЫ EQROOT. Составить программу для решения уравнения f1(х) = 0 и f2(х) = 0 на отрезке [А,В] с точностью Еps методом деления отрезка пополам. Задача заключается в том, чтобы вычисление индивидуальной формулы F(x) было оформлено в виде функции. При этом сама функция должна быть использована как параметр процедуры EqRoot. Обращение вида F(x) внутри процедуры должно выдать результат вычисления формулы в точке x, подобно тому, как обычно используются стандартные функции типа sin(x), Ln(x). Процедура не должна использовать «внутри себя» глобальных переменных. Для проверки программы задать: А = 0 0, В = 2, массив Еps[1..5]=(0.1,0.01,0.001, 0.0001, 0.00001), F_16 и F_17 Задача на картинке. Совершенно не понятно что такое EqRoot... Возможно это и не трудно, но я даже не знаю с чего начать. Прошу прощения за свою глупость |
07.04.2014, 22:13 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Хорошо было бы прочесть похожие обсуждения Решение дифференциального уравнения Решение уравнений методом Ньютона |
07.04.2014, 22:32 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
И почему мне всё чаще хочется взять составителей методичек за волосья и лупить лбом обо что-нибудь твёрдое до появления первой трещины?.. Это ж надо простой вопрос изложить столь напыщенно-высокопарно, что и впрямь ничего не понять!
Вообще-то нужно вот что: 1. Задать функцию отдельно в виде подпрограммы-функции. 2. Написать процедуру, которая будет решать задачу для данного Eps[i] и выдавать результат, при этом, естественно, обращаясь к функции. И обозвать эту процедуру, если уж им так хочется, EQRoot. 3. Тело программы это, по сути, будет цикл по Eps, то есть для каждого из членов массива Eps Вы вызываете процедуру EQRoot, и результатом будет значение корня с возрастающей точностью. |
08.04.2014, 09:40 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Часто ловлю себя на мысли - какое счастье, что меня никто программированию не учил и, соответственно, не стоял над душой с дебильными указулями типа "использовать/не использовать то-то", "задать в виде того-то", "описать так-то" и т.д. и т.п. и проч.! Потому что самое IMHO интересное в программировании - это именно творческое начало, ибо почти каждая программа - индивидуальна, каждый, даже начинающий, программист находит свои способы решения, стиль, приёмы - и это ужасно здорово. Увы, иногда возникает ощущение, что горе-преподаватели, в особенности составители методичек, просто задались целью выхолостить творческие подходы и привить студентам прямо таки ненависть к программированию. Извините - иногда трудно сдержаться.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.04.2014, 11:22 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
В принципе - методом изучения программирования, чтения всяких книжек и пособий, а главное - проб и ошибок. В конце концов должно получиться что-то в таком роде:
Код:
Var Eps:Array[1..5] of Real; i:Integer; Res:Real; Function F(x:real):real; begin F:=Sqr(Sin(x)+Cos(x))/Exp(Ln(33.5)*2/3)+Sqrt(3/7)-x; end; Procedure EQRoot(e:real; var R:Real); var a,b,c:real; begin a:=0.0; b:=2.0; Repeat c:=(a+b)/2; if F(a)*F(c)<0 then b:=c else a:=c; Until b-a<e; R:=c; end; Begin Eps[1]:=0.1; for i:=2 to 5 do Eps[i]:=Eps[i-1]/10; for i:=1 to 5 do begin EQRoot(Eps[i],Res); Writeln(Res:12:10); end; Readln End. |
13.04.2014, 15:53 | #8 (permalink) |
Member
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Может кому нибудь пригодится
Оказывается нужно было делать для 2 функций, с выводом количества интераций, с выводом функции от определённого аргумента, у меня F(0.83)... Переписывал программу на паре в Делфи, не знаю правильно или нет, но препод принял, обозначив ошибку: PHP код:
PHP код:
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|