2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 MathCad и производная от массива
Сообщение10.03.2007, 12:52 


10/03/07
4
Уже бьюсь головой об стенку.
Есть массив: www.paco.net/~mt/post.png
Мне нужно взять производную от FQ по Qj. Т. е. чтобы в первой строке (FQ1) взялась производная по Q1, во второй строке - по Q2 и т.д.
Никак не хочет. Ругается то на тип переменной типа Qj под знаком дифференциала, то на саму функцию (this value must be a scalar), то просто на погоду.
Есть какие-то варианты?
У меня вообще не получается брать производные, если в функции встречается хоть один индекс. Видимо, виноваты мои ручки :-)
Как заставить Маткад увидеть скаляр в выражении? :-)
Спасибо за помощь!

P.S. Ессно все j, k, l, m .... определены выше.

 Профиль  
                  
 
 
Сообщение10.03.2007, 14:17 
Заслуженный участник
Аватара пользователя


03/03/06
648
!nferno

Здесь все дело именно в типе данных. Mathcad считает, что это не переменные, а скаляры. Задайте неизвестные вектором, наверняка, есть пример в help'e.

Я, когда начинал работать с СКМ, начал с MathCad, но очень скоро отказался --- на мой взгляд очень капризная вещь.
Переходите на Maple. :wink:

 Профиль  
                  
 
 
Сообщение10.03.2007, 14:30 


10/03/07
4
Я с Maple еще не сильно освоился. У меня там проблема возникает уже на первой формуле. Там, где Маткад автоматически делает массив (как на рисунке), Мапл выдает ошибку и просит все правильно обозначить. А КАК это сделать - знаний нету. Только help читать...
Да и с перерасчетом всего листа у Maple как-то туго получилось (во всяком случае, у меня). Мне нужно сделать алгоритм, а потом менять в самом начале значения переменных. У Маткада это проходит на ура, а вот Мапл чуть ли не циклится (в ходе алгоритма постоянно присваиваю одной и той же переменной разные значения. Маткад читает сверху вниз и все отлично, а вот Мапл вычисляет по всему листу).

Имхо, Маткад наоборот считает переменные вектором и просит их перевести в скаляр (this value must be a scalar). А вот как это сделать :?
Выкладываю весь пример в MathCad13: www.paco.net/~mt/primer.rar

Мне главное - чтобы MatCad это делал автоматически для любого m, n, k. Как с верхними формулами.

 Профиль  
                  
 
 
Сообщение10.03.2007, 14:59 
Заслуженный участник
Аватара пользователя


03/03/06
648
!nferno

Я, конечно, посмотрю вечерком Ваш пример, если у меня дома откроется, у не понмю какая версия MathCad есть у меня, а если я не ошибаюсь у них есть проблема несовместимости.

Если будут время, то сделаю в Maple.
Относительно

Цитата:
Маткад читает сверху вниз и все отлично, а вот Мапл вычисляет по всему листу).


делайте разные скобки(секции) и вычисляйте как угодно. Все там нормально :wink:

 Профиль  
                  
 
 
Сообщение11.03.2007, 18:06 
Заслуженный участник
Аватара пользователя


03/03/06
648
reader_st

Если я ничего не напутал, смотря на Вашу запись, то вот код в Maple
Цитата:
> with(linalg):
> Tp:Ts:
> X:=matrix(3,2):
> Q:=vector(3):
> FQ:=vector(3):
> d:=vector(3):
> T:=matrix(3,3):
> Y:=matrix(3,3):
> Th:=vector(3):
> a:=vector(2):b:=vector(2):
> P_t:=multiply(Q,X):
>
> for i from 1 to 2 do
> P[i]:=a[i]-b[i]*P_t[i];
> end do:
>
>
> for j from 1 to 3 do
> FQ[j]:=sum(P[l]*Q[j]*X[j,l],l=1..2)-d[j]*Q[j]-sum(Y[j,l]*Q[j]*T[j,l],l=1..3)-Ts*Q[j]*Th[j]-Tp*Q[j];
> end do;
>
>
> seq(diff(FQ[j],Q[j]), j=1..3):
>


Я думаю проблем не будет и с циклом и дополнительными индексами. Можно это оформить как процедуру и в цикле подставлейте любые значения параметров.

Ваш файл diplom.xmcd у меня не открылся (MathCad 2000).

 Профиль  
                  
 
 
Сообщение12.03.2007, 00:05 


10/03/07
4
Громадное спасибо за желание помочь!
Начал разбираться с Maple... и понял, насколько удобнее для неосведомленного ума MathCad. :-)

Вот, что я ввел в Maple:

Код:
>n := 3
>k := 2
>m := 3
>X := Matrix(n, k, symbol = x)
>Q := vector(n)
>for j to n do
Qr[j] := Q[j] X(j, i)
end do;
>a := vector(k)
>b := vector(k)
> for i from 1 to k do
P[i]:=a[i]-b[i]*Qr[i];
end do
>FQ := vector(n)
>c := vector(n)
>d := vector(n)
>Y := Matrix(n, m, symbol = y)
>T := Matrix(n, m, symbol = t)
>Th := vector(n)
>Dist := vector(k)
>for j from 1 to n do
> FQ[j]:=sum(P[i]*Q[j]*X[j,i],i=1..k)-c[j]*((Q[j])^2)-d[j]*Q[j]-sum(Y[j,l]*Q[j]*T[j,l],l=1..m)-Ts*Q[j]*Th[j]-Tp*Q[j]-sum(Tf*Q[j]*Dist[i]*X[j,i],i=1..k);
> end do
Warning, inserted missing semicolon at end of statement
Error, Matrix index out of range
>


Вот что получил :) Явно где-то что-то в матрицах недообозначил.
Если Вы заметили, то я немного подправил формулу (ночью ошибка приснилась :D ).

Но насколько же Маткад удобнее! Может, там все-таки можно как-то взять эту производную?
Ведь всего то и делов. Взять производную от вектора по Q[j], приравнять к нулю и решить уравнения, найдя Q[j].
Все остальные действия - повторяющиеся.
На всякий случай прилагаю полный пример в формате MathCad11 :oops: (13 Маткад на более раниие версии не хочет сохранять):
www.paco.net/~mt/DIPLOM.mcd

Ну и в html, если не откроется:
www.paco.net/~mt/Diplom_html.rar

 Профиль  
                  
 
 
Сообщение12.03.2007, 11:50 


10/03/07
4
Сейчас опять поигрался в Maple 10. Не получается ничего, совсем синтаксиса не знаю :(
Он еще и различает, к примеру, команды matrix и Matrix; vector и Vector. Совсем запутался.

:oops:
Вот если бы мне кто-то описал мой пример... не весь... хотя бы до первой суммы в формуле FQ[j]... т.е. все, что до нее (n, k, m, i, l, j, QR[i], P[i]) и "огрызок" FQ[j] = sum(P[i]*Q[j]*X[j,i],i=1..k). И производную от нее по Q[j].
А дальше я по аналогии, думаю, смогу.
:oops:

P.S. A что делает фраза with(linalg)? В справке почитал, что добавляет специальные функции. И пишется как with(LinearAlgebra).
Но на перемножении вектора с матрицей в формуле QR[i] я все-равно ступорюсь и получаю кучу ошибок: от invalid arguments до нечто футуристического:
Error, (in LinearAlgebra:-VectorMatrixMultiply) invalid input: LinearAlgebra:-VectorMatrixMultiply expects its 1st argument, v, to be of type Vector[row] but received Vector[Column]
Ему не все-равно, как вектор записан? В ряд или в столбик?

 Профиль  
                  
 
 
Сообщение12.03.2007, 20:23 
Заслуженный участник
Аватара пользователя


03/03/06
648
!nferno

Ваш код в MathCad я посмотрю, но думаю ошибка в следующем:
$$Q_i$$ наверняка задаете как вектор и MathCad воспринимает его как числовой. Следовательно, необходимо научить в MathCad задавать и работать в символьными переменными.

Относительно моего кода в Maple 10:
Цитата:
> with(linalg): //пакет linalg для работы с функциями линейной алгебры(есть еще более широкий пакет LinearAlgebra с более широкими возможностями откуда и команда Vector, а vector из linalg ) Также команды с большой буквы, например, Limit использую для вывода выражения, но не его вычисления, в станд. мат. написании.
> Tp:Ts: объявление переменных
> X:=matrix(3,2): объявление символьной матрицы X 3*2
> Q:=vector(3): объявление символьного вектор Q длиной 3
> FQ:=vector(3): и т.д.
> d:=vector(3):
> T:=matrix(3,3):
> Y:=matrix(3,3):
> Th:=vector(3):
> a:=vector(2):b:=vector(2):
> P_t:=multiply(Q,X): //перемножение вектора и матрицы, т.е. то что у Вас в скобках
>
// формирование $$P_i$$ по Вашей общей формуле в сумме
> for i from 1 to 2 do
> P[i]:=a[i]-b[i]*P_t[i];
> end do:
>
>// собственно вычисление по указанной формуле
> for j from 1 to 3 do
> FQ[j]:=sum(P[l]*Q[j]*X[j,l],l=1..2)-d[j]*Q[j]-sum(Y[j,l]*Q[j]*T[j,l],l=1..3)-Ts*Q[j]*Th[j]-Tp*Q[j];
> end do;
>
> формирование последовательности производных, т.е. производная каждой строки полученного вектора по переменной или воспользуйтесь отдельно командой diff(FQ[j],Q[j]);, где вместо j подставляйте 1,2,3 и будете получать соответствующие производные.
> seq(diff(FQ[j],Q[j]), j=1..3):
>

Данный код является рабочим.
Кстати, у Maple очень хороший и понятный help с примерами.
Ежели, что не получится --- спрашивайте.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: gris


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group