Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

Выч Мат   Найти похожие ветки 

 
Svin   (2002-12-04 12:44) [0]

Народ помогите пожалуйста по выч мату срочно нужно здавать задачу ссесия на носу
а я немогу додумать задачку

задача
решить уранение ctg(x)=a/x
методом хорд
в общем не для своего уравнения я написал
на какомто сайте нащел доку по этому методу и написал
там задача рассматривалась на немного изогнутой прямой левая граница которой ниже оси ох а правая выше ох
и точно известно что будет только один корень т.к эта загагулина пересекает ось ох один раз
вот код
Program METODHORD;
Uses Crt,Graph;

Var
a,b:Integer;{лево право}
N:Real;{Коафицент а}
Key:Char;
J:Real;{Координата пересечения хорды с ох}
acc:Real;{Точность}
Temp,Tempj:Real;
{ГР}
{Ввод информации}
Procedure GetAll;
Begin
ClrScr;
Write("Введите коэфицент а");

ReadLn(N);
WriteLn("Вводи а");
ReadLn(a);
WriteLn("Вводи b");
ReadLn(b);
WriteLn("Введи точность");
ReadLn(acc);
End;
{Уравнение}
Function Fx(x:real):Real;
Begin
Fx:=N/X - cos(x)/sin(x);
End;
{Вычисление Методом хорд}
Procedure Calculate;

Begin
J:=a-(Fx(a)*(b-a))/(Fx(b)-Fx(a));
Temp:=Fx(j);
While Temp>=acc do
Begin
TempJ:=j;
J:=(-1) * (Temp * (b-TempJ) / (Fx(b)-temp)+TempJ);
Temp:=Fx(j);
End;
Write("х = ");
WriteLn(Temp:10:8);
write("С точностью ");
WriteLn(acc:10:8);
End;
Begin

GetAll;
Calculate;
key:=ReadKey;
Until Key in ["Q","q"];

ReadKey;
End.
а в моём уравнение почти такаяже загагулина только их дахрена
и препод вводит промежуток а и б так как ему захочется
тоесть на этом промежутке будет несколько загагулин и значит несколько ответов
я уже голову сломал никак немогу предумать помогите а может код модифицырут кто нить
если надо могу описать метод
Заранее благадарен


 
AFrolov   (2002-12-04 13:50) [1]

В общем случае наличия на интервале нескольких корней - интервал разбивается на такое число непересекающихся интервалов. Это можно сделать несколькими способами исходя из дополнительной информации о функции.


 
Александр Спелицин   (2002-12-04 14:56) [2]

Вообще-то доказательство истинности численного решения уравнения f(x) = 0 на отрезке [a, b] различными методами предполагает выполнение ряда условий для ф-ции f(x)на [a, b]. Для метода деления отрезка пополам и метода хорд достаточно, чтобы функция была непрерывной. А вот для метода касательных - f(x) должна быть уже диффиренцируемой на этом отрезке. Насчет непрерывности ctg(x) на любом отрезке я сомневаюсь :-). Так что в случае затыка программы или глупого вопроса преподавателя грамотный ответ будет такой: На данном отрезке [a, b] ур-нение f(x) = 0 решить методом хорд НЕЛЬЗЯ. Их этого вовсе не следует, что уравнение вообще не имеет корней на данном отрезке, просто не выполненяются необходимые условия для решения этим методом. А также нужна уверенность в своей правоте :o)!


 
Svin   (2002-12-05 01:18) [3]

Дело в том что я уже 3 раза говорил преподу что мою ф-ию нельзя решить методом хорд но она меня неслушает и говорит что функция непрерывна ну народ помогите же а а то у меня осталось ещё 4 задания и 2 занятия чтобы их здать


 
zavdim   (2002-12-05 11:24) [4]

1. У этой функции есть области непрерывности. (pi*n,pi*(n+1)).
2. Нехорошее место - 0. Здесь лучше повозиться на бумаге - с ходу не скажу (там видимо от а зависит, при отрицательном корень в районе 0 точно есть, а при положительном (?) - повозится надо). Если он входит в промежуток даваемый преподом, то разбивай на 2 промежутка одного знака и смело выкидывай промежуток от -pi/2 до pi/2. С этим промежутком - работай отдельно.
3. Далее строй пересечения твоего промежутка с промежутками вида
(pi*n+е,pi*(n+1)-е). Где е - бери маленькое (к сожалению есть зависимость от а если а очень большое, то е - должно быть меньше).
4. И на получившихся промежутках применяй метод хорд.
Время будет прогу сошкрябаю, но ты уж и сам не плошай.


 
zavdim   (2002-12-05 13:39) [5]

Что-то вроде этого (только я деление пополам использую):
A,B,C - твои константы - в проге видимо есть дырочки, но пока времени нет искать - поищи сам. Желаю удачи.

const
epsilon1 = 0.01;
epsilon2 = 0.0001;
step = 0.11111;

function f(x : extended):extended;
begin
Result := cos(x)/sin(x)-C/x
end;
function PointIsGood(x : extended):boolean;
begin
Result := abs((abs(x)-round(abs(x)/pi)*pi))>epsilon1
end;
function RangeIsGood(aa,bb: extended): boolean;
begin
Result := ((abs(bb)-round(abs(bb)/pi)*pi)*(abs(aa)-round(abs(aa)/pi)*pi))>0
end;
function Root(a,b : extended): extended;
var x,y,fa:extended;
begin
fa:=f(a);
y:=2*epsilon2;
x := a;
while abs(y)>epsilon2 do
begin
x:=(a+b)/2;
y:=f(x);
if fa*y<0
then b:=x
else begin
a:=x;
fa:=y
end
end;
Result:=x
end;
procedure VivResult(y : extended);
begin
-------------
end;
procedure Find;
var FA,FB,X,Y : extended;
begin
while A<B do
begin
FA := f(a);
x := a + step;
if PointIsGood(x)and(RangeIsGood(a,x)) then
begin
FB := f(x);
if FA*FB<0 then
begin
y := Root(a,x);
VivResult(y)
end;
a := x;
end else
begin
a := a+2*step
end
end;
end;


 
zavdim   (2002-12-06 05:14) [6]

При а>=1 корней от -пи до пи нет. В остальных случаях - 2 штуки.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
6-86065
Romych
2002-10-21 20:04
2002.12.26
Надежность - UDP


1-86015
MaXie
2002-12-15 11:55
2002.12.26
ООП - достучаться до небес!


1-86026
ppcat
2002-12-15 11:50
2002.12.26
StringGrid, удалить строку.


3-85860
Vint
2002-12-06 12:03
2002.12.26
Фильтр


14-86085
spROOT13
2002-12-08 17:48
2002.12.26
Архивы форумов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский