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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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