Форум: "Прочее";
Текущий архив: 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.053 c