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

Вниз

Записать в цикле.   Найти похожие ветки 

 
Anton_La   (2007-04-19 10:20) [0]

Здравствуйте. Есть у меня одна задачка, которая уже голову мне сломала, не знаю, как сделать это.

У меня есть четырые матрицы-массива:

QMatrix = array of array of Double (4x3)

1 2 3 1
2 3 1 2
3 1 2 3

BMatrix = array of Double (1x3)

4
5
6

ZMatix = array of Integer (4x1) - значения в массиве далее в процессе программы изменяются

0 0 0 0

И пустая матрица для результатов с размерностью QMatrix
RMatrix = array of array of Double (4x3)

Честно говоря, я не знаю, как описать сам алгоритм работы, поэтому у меня и такой ступор, приведу пример того, что должно получиться.

Нужно например, для указанных размерностей и данных сделать следующее:

RMatrix[1, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 2] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 3] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;

RMatrix[2, 1] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 2^0 * 3^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[2, 2] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 3^1 * 1^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[3, 3] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 3^0 * 1^0 + 3 * 2^0 * 3^0 * 1^1;

RMatrix[3, 1] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 2] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^1 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 3] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^1;

RMatrix[4, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 2] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 3] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;


Степень, в которую возводят, берется из ZMatrix по столбцу QMatrix, но на одном элементе в каждой "внутренней" итерации она возрастает на +1 от значения которое в ZMatrix.
QData := QData * Power(QMatrix[i, j], ZMatrix[i]); или  QData := QData * Power(QMatrix[i, j], ZMatrix[i] + 1);

Никак не могу сформулировать и сделать весь этот алгоритм.


 
Anton_La   (2007-04-19 10:23) [1]

Ошибся, вот корректный пример:

RMatrix[1, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[1, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;

RMatrix[2, 1] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 2^0 * 3^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[2, 2] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^1 * 1^0 + 3 * 2^0 * 3^0 * 1^0;
RMatrix[3, 3] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^0 * 1^0 + 3 * 2^0 * 3^0 * 1^1;

RMatrix[3, 1] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 2] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^1 * 2^0 + 3 * 3^0 * 1^0 * 2^0;
RMatrix[3, 3] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 3 * 3^0 * 1^0 * 2^1;

RMatrix[4, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 3 * 1^0 * 2^0 * 3^0;
RMatrix[4, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 3 * 1^0 * 2^0 * 3^1;


 
Anton_La   (2007-04-19 10:25) [2]

Что-то совсем у меня голова закружилась с матрицами с моими, опять нашел неточность

RMatrix[1, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[1, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[1, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^1;

RMatrix[2, 1] := 4 * 2^1 * 3^0 * 1^0 + 5 * 2^0 * 2^0 * 3^0 + 6 * 2^0 * 3^0 * 1^0;
RMatrix[2, 2] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^1 * 1^0 + 6 * 2^0 * 3^0 * 1^0;
RMatrix[3, 3] := 4 * 2^0 * 3^0 * 1^0 + 5 * 2^0 * 3^0 * 1^0 + 6 * 2^0 * 3^0 * 1^1;

RMatrix[3, 1] := 4 * 3^1 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 6 * 3^0 * 1^0 * 2^0;
RMatrix[3, 2] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^1 * 2^0 + 6 * 3^0 * 1^0 * 2^0;
RMatrix[3, 3] := 4 * 3^0 * 1^0 * 2^0 + 5 * 3^0 * 1^0 * 2^0 + 6 * 3^0 * 1^0 * 2^1;

RMatrix[4, 1] := 4 * 1^1 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[4, 2] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^1 * 3^0 + 6 * 1^0 * 2^0 * 3^0;
RMatrix[4, 3] := 4 * 1^0 * 2^0 * 3^0 + 5 * 1^0 * 2^0 * 3^0 + 6 * 1^0 * 2^0 * 3^1;


 
KSergey ©   (2007-04-19 10:50) [3]

Можете привести хоть один свой пример? Пусть не правильный.
А то как-то слабо верится в поломанность мозга имено этой задачей.

И еще.
Перепишите (для себя!) правильный вариант, но не переставляя порядок следования x^y в выражении (т.е. чтобы везде было 1^x * 2^y * 3^z, а не так, как сейчас).

По-моему, это поможет вам увидеть алгоритм.


 
oldman ©   (2007-04-19 11:00) [4]


> Записать в цикле.


for i=1 to 4 do
for j=1 to 3 do
RMatrix[i,j] := ИскомаяФормула;
end;
end;

:)))

Ну вас к лешему с вашими курсовиками. На занятия ходить надо!


 
Anton_La   (2007-04-19 11:16) [5]

Спасибо, что откликнулись. Всё бы хорошо, если бы можно было сделать это в два цикла просто, но там же присутствует "плавающая" увеличивающееся степень во "вложенной итерации", вот и я никак не могу понять как реализовать.


> И еще.Перепишите (для себя!) правильный вариант, но не переставляя
> порядок следования x^y в выражении (т.е. чтобы везде было
> 1^x * 2^y * 3^z, а не так, как сейчас).


Я не особо понял, честно говоря.


> Можете привести хоть один свой пример? Пусть не правильный.
> А то как-то слабо верится в поломанность мозга имено этой
> задачей.


Вот, только не ужасайтесь.

var
 i, j, m, n: Integer;
 delta1, delta2: Double;
 counter1: Integer;
 data1 : string;
 set1: Boolean;
begin
 Delta1 := 1;
 Counter1 := 0;
 delta2 := 1;
 set1 := True;
 //  for j := Low(QMatrix[0]) to High(QMatrix[0]) do
 j := 0;        //для теста, только первый столбец из QMatrix
 Counter1 := 0;

 delta2 := 0;

 if Outlay(j) - 1 < Num then
 begin

 for i := Low(BMatrix) to High(BMatrix) do
 begin
   set1 := True;
   Delta1 := 1;

   ShowMessage("i="+IntToStr(i));

   for m := Low(QMatrix) to High(QMatrix) do
   begin

     //ShowMessage(Format("%d;%d", [m, n]));
     // for n := Low(QMatrix) to High(QMatrix) do
     if (i = m) and set1 then
       Delta1 := Delta1 * Power(QMatrix[m, j], Outlay(j));
     else begin
       Delta1 := Delta1 * Power(QMatrix[m, j], Outlay(j) + 1);
       set1 := False;
     end;

     ShowMessage(FloatToStr(Delta1));

   end;
   Delta2 := Delta2 + (BMatrix[i] * Delta1);
end;


В этом коде вместо матрицы ZMatrix используется функция Outlay, с анологичным смыслом.


 
oldman ©   (2007-04-19 16:10) [6]


> Всё бы хорошо, если бы можно было сделать это в два цикла
> просто, но там же присутствует "плавающая" увеличивающееся
> степень во "вложенной итерации", вот и я никак не могу понять
> как реализовать.


> Степень, в которую возводят, берется из ZMatrix по столбцу
> QMatrix, но на одном элементе в каждой "внутренней" итерации
> она возрастает на +1 от значения которое в ZMatrix.


Обычным if then в зависимости от i,j


 
Anton_La   (2007-04-19 17:17) [7]


> Обычным if then в зависимости от i,j


Я и пытался это применить, в коде выше это видно, но я не понимаю как это правильно сделать. И кроме того, я даже не уверен, здраво ли идут у меня циклы, их наверное требуется три... не знаю, просто запутался, перепробовал кучу вариантов, но так и не смог сделать ничего нормально работающего.



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

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

Наверх




Память: 0.47 MB
Время: 0.06 c
2-1177655329
Ega23
2007-04-27 10:28
2007.05.20
TInterfacedList.Delete - произойдёт ли вызов _Release


15-1177087371
ArtemESC
2007-04-20 20:42
2007.05.20
И снова PHP...


15-1176885141
Карелин Артем
2007-04-18 12:32
2007.05.20
Вода из водопровода vs вода из бутыли.


2-1177954939
redlord
2007-04-30 21:42
2007.05.20
совместное использование данных несколикими потоками


1-1174730969
rockman_
2007-03-24 13:09
2007.05.20
Не видно курсор в StringGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский