Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Прога решения уравнений

Автор: dron4ik 13.11.2008 0:07

Всем привет!

Дана следующая задача;

Составить программму на любом языке программирования и с ее помощью решить уравнение с точностью равную до тысячных E=0.001 б=0.01 Уравнение 3cos2x-x+0.25 х принадлежит [-2.5;-1,8]

Я выяснил что уравнение корней не имеет!!! т.к найдя производную этого уравнение и подставляя значение -2.5 и -1.8 получается что в двух случаях уравнение имеет знак плюс!!!



Написал прогу на Делфи но у меня она не запускается(((((((((((( Может кто предложит более простой вариант? Я еще не организовал как задать точность(((

код проги:



var
Form1: TForm1;
x1, n,p,b,rez,rezu,t,y,u,q:integer;
x2, x3,f,h,c,w,e: extended;
s, red,per:string;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
x1:=3;
n:=-5;
x2:=2.5;
x3:=0.25;
s:= IntToStr(x1)+'cos'+IntToStr(n)+'+'+FloatToStr(x2)+'+'+FloatToStr(x3)+'=';
label1.Caption:=s;
p:= StrToInt (3*cos(-5)+ StrToFloat (2.5+0.25);
Label2.Caption:=IntToStr(p);
end;
begin
b:=3;
c:=-3.6;
f:=1.8;
h:=0.25;
red:= IntToStr(b)+'cos'+FloatToStr©+'+'+FloatToStr(f)+'+'+FloatToStr(h)+'=';
label3.Caption:=red;
rez:= StrToFloat (3*cos(-3.6)+ StrToFloat (1.8+0.25);
Label4.Caption:=FloatToStr(rez);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
t:=-6;
y:=-5;
u:=-5;
per:=IntToStr(t)+'sin'+IntToStr(y)+'*'+'cos'+IntToStr(u)+'=';
Label5.Caption:=per;
rezu:=StrToInt (-6*sin(-5)* cos(-5));
Label6.Caption:=IntToStr(rezu);
ShowMessage('uraveneie ne imeet kornei');

end;
begin
q:=-6;
w:=-3.6;
e:=-3.6;
per:=IntToStr(q)+'sin'+FloatToStr(w)+'*'+'cos'+FloatToStr(e)+'=';
Label7.Caption:=per;
rezu:=FloatToStr (-6*sin(-3.6)* cos(-3.6));
Label8.Caption:=StrToFloat(rezu);
ShowMessage('uraveneie ne imeet kornei);

end.

Добавлено через 5 мин.
В этом коде полно проблем с переводом типов данных и почему то ошибки выдает с лейбелами

Автор: volvo 13.11.2008 0:39

Цитата
Я выяснил что уравнение корней не имеет!!!
Смотря какое уравнение. Если 3cos2x-x+0.25=0, то неправда...

X = -1.9455 - вот корень с точностью 0.001.
Проверяем: 3*cos(-3.891) - (-1.9455) + 0.25 = -2.19628 + 1.9455 + 0.25 (дальше сам посчитаешь?)

Цитата
Может кто предложит более простой вариант?
Самый простой вариант - консольное приложение.
program Project1;
{$APPTYPE CONSOLE}

function f(x: real): real;
begin
f := 3 * cos(2*x) - x + 0.25;
end;

var
x, y: real;
found: boolean = false;

begin
x := -2.5;
while x <= -1.8 do begin
y := f(x);
if abs(y) < 0.001 then begin
writeln('X = ', X:12:6, ' Y = ', Y:12:6); found := true;
end;
x := x + 0.0005;
end;

if not found then writeln('no roots...');
readln;
end.

Автор: dron4ik 13.11.2008 0:45

Это на каком языке написано? это уравнение не имеет корней при х=-2.5 и -1.8

Автор: volvo 13.11.2008 0:50

А это на каком языке написано?

Цитата
Уравнение 3cos2x-x+0.25 х принадлежит [-2.5;-1,8]
ГДЕ здесь написано, что надо найти решение при x=-2.5 и x=-1.8? Написано, что X принадлежит ИНТЕРВАЛУ от -2.5 до -1.8

Разницу видишь?

Автор: dron4ik 13.11.2008 2:02

Если даже сделать чертеж то эти два графика не пересекаются! а значит нет корней

Добавлено через 2 мин.
А как запустить этот код? в проге

Добавлено через 46 сек.
Я не знаю консольный режим(((((( в делфи

Автор: samec 13.11.2008 4:06

Цитата(dron4ik @ 13.11.2008 1:02) *

Если даже сделать чертеж то эти два графика не пересекаются! а значит нет корней

Какие два графика то?
Дано уравнение, дан интервал - уравнение одно - откуда тогда второй график?. В пост прекрепил Excel-евский файлик - там график, посмотри - сам всё увидишь smile.gif

Цитата(dron4ik @ 13.11.2008 1:02) *

А как запустить этот код? в проге


Открываешь Delphi, затем File -> New -> Other -> Console Application.
Вставляешь туда написаный volvo код -> F9 -> и всё работает smile.gif



Прикрепленные файлы
Прикрепленный файл  _____1.xls ( 21.5 килобайт ) Кол-во скачиваний: 376

Автор: dron4ik 13.11.2008 12:56

Там получаеотся два графика из одного уравнения! 3cos2x и x-0.25 нарисуй их и поймешь что они не пересекаются

Автор: volvo 13.11.2008 13:57

Цитата
3cos2x и x-0.25 нарисуй их и поймешь что они не пересекаются
Да какие, блин, два графика??? Ты бы еще отдельно 3cos2x, отдельно x, и отдельно 0.25 рисовал? Чего ж ты одно отделил, а другое - нет? Срочно читать учебник математики, и уяснять разницу между понятиями "уравнение" и "система уравнений"

Тебе заданы 2 линии: первая - график функции y=3cos2x-x+0.25, вторая - y=0. Пересечение их дает тебе решение уравнения 3cos2x-x+0.25=0 Если это непонятно, то говорить дальше просто не о чем, жаль времени. dry.gif

Автор: Lapp 13.11.2008 16:51

Цитата(volvo @ 13.11.2008 9:57) *
Да какие, блин, два графика???

volvo, я не вполне понимаю твое возмущение. dron4ik просто перенес два слагаемых в правую часть:

3cos2x = x - 0.25

- и интерпретирует уравнение как равенство двух частей (графиков). Подход вполне имеет право на жизнь. Я, правда, не рассматривал сами графики, так что не знаю, есть ли решение (пересечение) на самом деле, но метод абсолютно верный. Перенос тоже произведен верно (со сменой знака).
Я что-то упускаю?.. blink.gif

Автор: volvo 13.11.2008 17:24

Цитата
Я, правда, не рассматривал сами графики, так что не знаю, есть ли решение (пересечение) на самом деле
Ну, так посмотри:
program Project1;
uses graph;

function f1(x: real): real;
begin
f1 := 3 * cos(2*x);
end;

function f2(x: real): real;
begin
f2 := x - 0.25;
end;

const
found: boolean = false;
var
x, y1, y2: real;

gd, gm: smallint;

begin
initgraph(gd, gm, '');
x := -2.5;
while x <= -1.8 do begin
y1 := f1(x); y2 := f2(x);

putpixel((getmaxx div 2) + trunc(x*50),
(getmaxx div 2) + trunc(y1*50), lightred);
putpixel((getmaxx div 2) + trunc(x*50),
(getmaxx div 2) + trunc(y2*50), lightgreen);

if abs(y1 - y2) < 0.001 then begin
writeln('X = ', X:12:6, ' Y1 = ', Y1:12:6, ' Y2 = ', Y2:12:6); found := true;
end;
x := x + 0.0005;
end;

if not found then writeln('no roots...');
readln;
end.


(сами графики + результат в аттаче)

Цитата
метод абсолютно верный. Перенос тоже произведен верно (со сменой знака).
Я не телепат, и методов, которыми при правильно произведенном переносе и правильном построении графиков можно получить НЕправильный результат, я не знаю. Автор утверждал, что
Цитата
3cos2x и x-0.25 нарисуй их и поймешь что они не пересекаются
? Утверждал. Нарисовал я их. Они пересекаются... Что дальше? (это вопрос автору топика)


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Lapp 13.11.2008 17:43

Ну, наверное, человек ошибся при рисовании графиков. Мне кажется, это не повод отсылать его..

Цитата(volvo @ 13.11.2008 9:57) *
Срочно читать учебник математики, и уяснять разницу между понятиями "уравнение" и "система уравнений"

Автор: dron4ik 14.11.2008 16:33

Как могут пересечся эти два графика?????? если мы берем значения от [-2.5 , -1.8]

Делал вручную они не пересекаются!!!!! значит нет корней а выясняем мы с помощью производной которую берем от уравнения 3 * cos(2*x)-X+0.25

Добавлено через 19 мин.
Посмотрите ваши график противоположен моему!


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: dron4ik 14.11.2008 18:14

Точно они пересекаются извините за ошибку

Автор: do you need a prescription for p 3.11.2021 22:58

Chlamydia Pills Online

Автор: nishaknapp 16.01.2023 6:46

Why not settling on games that is fun and at the same time your earning. Well it'll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. https://muzzglobal.com/4-tips-for-online-casino-players-to-remember/