|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
16.10.2012, 19:03 | #1 (permalink) |
Member
Регистрация: 16.10.2012
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Приближенное решение уравнения
|
16.10.2012, 19:03 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вот вам темы, которые имеют что то схожее с вашей темой Приближенное вычисление интегралов Паскаль. Найти корни уравнения методом хорд |
16.10.2012, 19:59 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
С таким не работаю. А на Free (Turbo) - пожалуйста:
Код:
Const e=0.00001; Var x,dx:real; Function F(z:real):Real; begin F:=z*z*z-z*2-13; end; Begin x:=10; dx:=1; Repeat repeat x:=x-dx; until F(x)<0; x:=x+dx; dx:=dx/10; Until dx<e; Writeln('x= ',x:0:5,' F(x)= ',F(x):0:8); Readln End. |
16.10.2012, 20:41 | #5 (permalink) |
Member
Регистрация: 16.10.2012
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
ой спасибочки большое
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
16.10.2012, 21:07 | #6 (permalink) |
Member
Регистрация: 16.10.2012
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
А можно еще в этой программе вычислить значение отдельного корня пятью различными методами. При использовании метода простых итераций найти решение при разных начальных приближениях????
|
17.10.2012, 03:15 | #7 (permalink) |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
Уважаемый пользователь, попробуйте доделать самостоятельно, а если не получится скиньте сюда текст программы, и мы попытаемся исправить ваши ошибки. Нам главное, что бы вы сами понимаете что и как работает, а не просто получали готовую программу.
|
17.10.2012, 12:10 | #8 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Некоторые пояснения: 1. Первый способ - мой любимый вследствие простоты и удобства. Я даже не знаю, существует ли у него официальное название, так что "Decimal iterations" ("Десятичные итерации") - наименование условное. Суть: стартуя с какого-либо конца промежутка, содержащего искомый корень, движемся вдоль оси Х по направлению к другому концу с шагом Dx, причем равным 10 в степени n, где n может быть и положительным, нулевым, и отрицательным, пока функция не переменит знак. Тогда "отпрыгиваем" назад на один шаг, величину шага делим на 10 и всё повторяем. Цикл продолжается до достижения заданного значения шага. Метод устойчив и удобен тем, что каждая итерация добавляет одну значащую десятичную цифру в искомую величину. 2. В надобности аналитического решения (по формуле Кардано) не уверен. Но на всякий случай привел и такой вариант. 3. Метод Ньютона (касательных) - ну с ним всё просто. Как в учебниках да справочниках написано, так в программе и сделано. 4. Различие между методами хорд и секущих в том, что в первом случае одна из точек привязки хорд неподвижна, а вторая (по идее) смещается в направлении корня, в то время как в методе секущих фиксируется (задается) угол наклона хорд к оси Х. Оба эти метода неустойчивы: если задать слишком большой исходный промежуток, вычисление может пойти "вразнос". Код:
Const e=0.00001; Var x,x0,x1,dx,s:real; c:Char; Function F(z:real):Real; begin F:=z*z*z-z*2-13; end; Function Der(z:real):real; begin Der:=z*z*3-2; end; Function Cardano(p,q:real):real; Var A,B,R:real; begin R:=Sqrt(p*p*p/27+q*q/4); A:=Exp(Ln(-q/2+R)/3); B:=Exp(Ln(-q/2-R)/3); Cardano:=A+B; end; Begin x:=10; dx:=1; Repeat repeat x:=x-dx; until F(x)<0; x:=x+dx; dx:=dx/10; Until dx<e; Writeln('Decimal iterations:'); Writeln('x= ',x:0:5,' F(x)= ',F(x):0:8); Writeln; Writeln('Cardano formula:'); x:=Cardano(-2,-13); Writeln('x= ',x:0:5,' F(x)= ',F(x):0:8); Writeln; x:=10; Repeat dx:=F(x)/Der(x); x:=x-dx; Until Abs(dx)<e; Writeln('Newton metod:'); Writeln('x= ',x:0:5,' F(x)= ',F(x):0:8); Writeln; x0:=2; x:=3; s:=(F(x)-F(x0))/(x-x0); Repeat dx:=F(x)/s; x:=x-dx; s:=(F(x)-F(x0))/(x-x0); Until Abs(dx)<e; Writeln('Chord metod:'); Writeln('x= ',x:0:5,' F(x)= ',F(x):0:8); Writeln; x0:=2; x:=3; s:=(F(x)-F(x0))/(x-x0); Repeat dx:=F(x)/s; x:=x-dx; Until Abs(dx)<e; Writeln('Secant metod:'); Writeln('x= ',x:0:5,' F(x)= ',F(x):0:8); Readln End. |
|
22.10.2012, 11:12 | #10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|