| 
| 
 | Вопрос # 1 516/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Здравствуйте, уважаемые эксперты! У меня программа должна находить собственные числа для матрицы третьего порядка. Сначала я составляю уровнение, это у меня строка  похожая например на это:
 (2-X)(4-X)(6-)+(3)(5)(3)+(4)(2)(4)-(4)(4-x)(3)-(2-x)(4)(5)-(3)(2)(6-x)=0. Вопрос у меня в том как найти корни к этому уравнению. Их ведь во-первых несколько, точнее три, и они  могут быть вещественными. Все корни я собираюсь записать в таблицу, ну это я уже сам сооброжу. Я вас не прошу решать мне задачу, только пожалуйста опишите хотя бы в общих чертах как можно найти корни.
 
|  |   Вопрос задал: Anton (статус: Посетитель)Вопрос отправлен: 21 апреля 2008, 19:03
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Feniks Здравствуйте, Anton!На сколько я помню, решение квадратных уравнений уже падымались тут. Попробуйте поискать поиском на сайте, а так же воспользоваться модулем SqRoot из Приложения.
 Приложение:Переключить в обычный режим unit SqRoot; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, OleCtrls; typeTForm1 = class(TForm)   Edit1: TEdit;   Edit2: TEdit;   Edit3: TEdit;   Label1: TLabel;   Label2: TLabel;   Label3: TLabel;   Label4: TLabel;   Button1: TButton;   Label5: TLabel;   Button2: TButton;   procedure Button1Click(Sender: TObject);   procedure Button2Click(Sender: TObject);private   { Private declarations }public   { Public declarations }end; varForm1: TForm1; implementation   procedure SqRoot(a, b, c: real; var x1, x2: real; var ok: boolean);    var begind := Sqr(b) - 4 * a * c;if d < 0   then elsebegin   ok := True;   x1 := (-b + Sqrt(d)) / (2 * a);   x2 := (b + Sqrt(d)) / (2 * a);end;end;{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);var   beginSqRoot(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text),   StrToFloat(Edit3.Text), k1, k2, rez);if rez then      'x1=' + FloatToStrF(k1, ffGeneral, 4, 2) + #13 +     'x2=' + FloatToStrF(k2, ffGeneral, 4, 2) + #13else  label5.Caption := mes;end; procedure TForm1.Button2Click(Sender: TObject);beginwinhelp(Form1.Handle, 'sqroot.hlp', HELP_CONTEXT, 1);end; end.
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 21 апреля 2008, 19:35
 
 |  Ответ #2. Отвечает эксперт: Вадим К Здравствуйте, Anton!Ну на самом деле не всё так сложно как кажеться на первый взгляд. Если вы получаете это уравнение с матрицы,  то записав коэфициенты в виде а11, а12 ... а33 и сделав один раз преобразование к виду
 b1*x^3 + b2*x^2+b3*x+b4 =0 (где b1 ... b4 - определённые выражения с a1...a4).
 Это может показаться сложноватым, но надо аккуратно обратится. Возможно, нужно будет обратиться к преподавателю математики или товарищам. роботы то на полчаса с проверкой.
 Теперь, имея формулы преобразования, вы можете имея матрицу построить кубическое уравнение.
 Теперь осталось его решить. Если коэффициент b1 равен 0, то решить просто.
 Для кубического немного сложнее, но и тут есть решение, оно просто не входит в стандартный курс ни школьной, ни обычного технического вуза. но если есть формула:), то какие проблемы? читайте здесь http://ru.wikipedia.org/wiki/Кубическое_уравнение
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 21 апреля 2008, 23:54
 
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 23 апреля 2008, 16:10; участников в обсуждении: 2. 
|   | Anton (статус: Посетитель), 21 апреля 2008, 20:08 [#1]:В поиске я то-то не нашел, может где-то не там искал. 
 Но вообщем вытекает второй вопрос.
 Это значит мне сначало все это привести к уравнению третий степени, научить компьютер скобки раскрывать, потом перебором найти первый корень, а уж остальные два это процедурой, которую вы написали?
 |  
|   | Anton (статус: Посетитель), 22 апреля 2008, 17:54 [#2]:Спасибо, вроде разобрался, упростил. Получил кубическое уравнение. Теперь знаю как решать вроде. Только подскажите пожалуйста как в Дельфи возвести в куб и взять кубичискей корень из выражения. Может там функции есть специальные, или как то через экспоненту как в паскале помню в степень нужную возводили.
 |  
|   | Вадим К (статус: Академик), 22 апреля 2008, 23:03 [#3]:ну возвести в куб - это расмешили  трижды перемножить. возвести число в любую положительную степень  можно так
 x^y = exp(y*ln(x));
 но если у вас делфи, то проще можно. Подключаем в uses модуль Math. Теперь появляются функции Power(x,y:real) и intpower(x:real; y:integer). Обе они считают x^y, только вторая возводит в целую степень, благодаря чему работает быстрее и результат будет точным.
 Power(2, 10) даст вещественное число, близкое к 1024. Например 1023.9999, так что не удивляйтесь - обычная ситуация. А IntPower(2,10) - будет точно 1024.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Anton (статус: Посетитель), 23 апреля 2008, 16:10 [#4]:ДА спасибо))) Я уже догодался, просто устал тогда... что-то глупил, глупые вопросы задавл, извините уж)  Все равно спасибо, все уже работает, Сдал!))) |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |