2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3  След.
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 11:09 
g______d в сообщении #1390523 писал(а):
maximkarimov в сообщении #1390187 писал(а):
Однако, символьное выражение суммы моего ряда содержит гипер-геометрическую функцию, с котрой funm почему-то "не дружит" (выдает ошибку).


Вроде для гипергеометрической функции есть пакет

http://www-math.mit.edu/~plamen/software/mhgref.html

И там статья с описанием алгоритма прилагается. То ли это, что нужно, я не разбирался.

-- Вт, 30 апр 2019 21:11:41 --

А, может быть это и не то:

https://en.wikipedia.org/wiki/Hypergeom ... x_argument

-- Вт, 30 апр 2019 21:13:35 --

А вот это больше похоже на то что нужно:

https://www.mathworks.com/matlabcentral ... -arguments


Вот что мне ответил Plamen Koev:

"I am not sure what you're trying to do that MATLAB doesn't already have implemented.The hypergeometric function of a matrix argument is "of matrix argument" in name only -- it's a symmetric series in the eigenvalues, not a regular hypergeometric series where the argument is a matrix."

Plamen

Даже не знаю что по этому поводу думать. Вы что думаете?

-- 01.05.2019, 12:41 --

Markiyan Hirnyk в сообщении #1390522 писал(а):
Вот пример а Математике:
Код:
m = MatrixFunction[#^2*MittagLefflerE[2, #] &, {{3, 1}, {0, Pi}}^3]

$\left(
\begin{array}{cc}
 729 \cosh \left(3 \sqrt{3}\right) & \frac{\pi ^6 \cosh \left(\pi ^{3/2}\right)}{\pi ^3-27}-\frac{729 \cosh \left(3 \sqrt{3}\right)}{\pi ^3-27} \\
 0 & \pi ^6 \cosh \left(\pi ^{3/2}\right) \\
\end{array}
\right)$
Код:
Map[N, m]

$\left(
\begin{array}{cc}
 65822. & 15006.4 \\
 0. & 125942. \\
\end{array}
\right)$
Цитата из справки
Цитата:
A matrix function transforms a matrix to another matrix. For convergent power series, MatrixFunction[f,m] effectively evaluates the power series for the function f with ordinary powers replaced by matrix powers


Выше я уже ответил, что функция ML не соответствует моему ряду (показатель степени другой), хотя и весьма близка. При n строго больше 2 сумма ряда может быть выражена через гипер-геометрическую функцию.

Буду чрезвычайно признателен если Вы получите в Математике символьное выражение при m=2 и n=3 для моего ряда (а не значение функции ML для тех же параметров!), после чего подставите в качестве аргумента следующую матрицу:
$$\begin{pmatrix}
 1 & 2\\
 3 & 4\\
\end{pmatrix}$$ и сообщите результат (и символьное выражение и численный результат для матричного аргумента).
Спасибо.

P.S. Вольфрам-альфа в онлайне дает другое символьное выражение (не через гипер-геометрическую функцию). При этом численно, для скаляра, результат совпадает с Матлабом до 15-го знака. Проблема в том, что символьное выражение Вольфрама также невозможно применить к матричному аргументу. Например, при вышеуказанных параметрах m и n, в выражении присутствует число пи, которое нужно вычесть. Но как из матрицы вычесть скаляр?))

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 12:50 
maximkarimov в сообщении #1390535 писал(а):
символьное выражение при m=2 и n=3 для моего ряда (а не значение функции ML для тех же параметров!), после чего подставите в качестве аргумента следующую матрицу:
$$\begin{pmatrix}
1 & 2\\
3 & 4\\
\end{pmatrix}$$ и сообщите результат (и символьное выражение и численный результат для матричного аргумента).

Годится?
$$\begin{bmatrix}
 17.2105  &  24.9822\\
37.4733    & 54.6839 \end{bmatrix}$$
Пока числовое, а вдруг не устроит.

-- 01.05.2019, 14:54 --

maximkarimov в сообщении #1390535 писал(а):
Вольфрам-альфа в онлайне дает другое символьное выражение (не через гипер-геометрическую функцию).

Ну она там действительно не очень-то и нужна.

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 12:55 
maximkarimovПожалуйста, объясните
Цитата:
Выше я уже ответил, что функция ML не соответствует моему ряду (показатель степени другой), хотя и весьма близка. При n строго больше 2 сумма ряда может быть выражена через гипер-геометрическую функцию.

Сумма предложенного Вами ряда равна (в обозначениях цитированной статьи Вики) $A^mE_{n,m}(A^n)$, где $E_{\alpha,\beta}(z)$ - функция Миттаг-Леффлера. В Математике функция Миттаг-Лефлера обозначается
Код:
MittagLefflerE[\[Alpha],\[Beta],z]
(см. справку).
Далее, Математика производит
Код:
m = 2; n = 3;N[ MatrixFunction[#^m*MittagLefflerE[m, n, #^n] &, {{1, 2}, {3, 4}}]]

$\left(
\begin{array}{cc}
 5686.18 & 8287.09 \\
 12430.6 & 18116.8 \\
\end{array}
\right).$

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 13:26 
Otta в сообщении #1390542 писал(а):
maximkarimov в сообщении #1390535 писал(а):
символьное выражение при m=2 и n=3 для моего ряда (а не значение функции ML для тех же параметров!), после чего подставите в качестве аргумента следующую матрицу:
$$\begin{pmatrix}
1 & 2\\
3 & 4\\
\end{pmatrix}$$ и сообщите результат (и символьное выражение и численный результат для матричного аргумента).

Годится?
$$\begin{bmatrix}
 17.2105  &  24.9822\\
37.4733    & 54.6839 \end{bmatrix}$$
Пока числовое, а вдруг не устроит.

-- 01.05.2019, 14:54 --


Вы сами легко можете проверить - численно. Ряд быстро сходится, поэтому достаточно 50 итераций:
Используется синтаксис Matlab M
Z=zeros(size(X));
for i=1:50
    Z=Z+X^(2+3*i)/factorial(2+3*i);
end
Z
 

Как видим, результат совсем другой:
$$\begin{bmatrix}
 13.7105 & 19.9822 \\
 29.9733 &  43.6839\\
\end{bmatrix}$$

Символьное выражение Матлаба для данных параметров m и n:
Используется синтаксис Matlab M
S =
(A^2*hypergeom([], [4/3, 5/3], A^3/27))/2
 


-- 01.05.2019, 14:28 --

Markiyan Hirnyk в сообщении #1390543 писал(а):
maximkarimovПожалуйста, объясните

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

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 13:33 
maximkarimov в сообщении #1390547 писал(а):
Вы сами легко можете проверить - численно. Ряд быстро сходится, поэтому достаточно 50 итераций:

Я проверила: результат именно такой.

-- 01.05.2019, 15:35 --

У Вас, во-первых, алгоритм очень нерациональный и затратный, во-вторых суммирование от нулевого индекса.

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 13:38 
Otta в сообщении #1390548 писал(а):
maximkarimov в сообщении #1390547 писал(а):
Вы сами легко можете проверить - численно. Ряд быстро сходится, поэтому достаточно 50 итераций:

Я проверила: результат именно такой.


Полагаю, что Вы где-то что-то напутали при проверке. Посмотрите выше мой код для проверки итерационным методом, укажите матрицу X - наши компьютеры не могут выполняя один и тот же код с одними и теми же данными давать разный результат. Не должны!))

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 13:39 
Я Вам сказала, где ошибка.

-- 01.05.2019, 15:42 --

maximkarimov в сообщении #1390317 писал(а):
$$\sum\limits_{k=0}^{\infty}\frac{A^{m+nk}}{(m+nk)!}$

maximkarimov в сообщении #1390547 писал(а):
Код:
for i=1:50
Z=Z+X^(2+3*i)/factorial(2+3*i);

Изначально $Z$ нулевая. Почувствуйте разницу.

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 13:49 
Otta в сообщении #1390548 писал(а):
maximkarimov в сообщении #1390547 писал(а):
Вы сами легко можете проверить - численно. Ряд быстро сходится, поэтому достаточно 50 итераций:

Я проверила: результат именно такой.

-- 01.05.2019, 15:35 --

У Вас, во-первых, алгоритм очень нерациональный и затратный, во-вторых суммирование от нулевого индекса.


Да, действительно забыл про нулевой индекс! Спасибо! Итак, правильный код для проверки итеррационным методом такой:
Используется синтаксис Matlab M
Z=zeros(size(X));
for i=1:50
    Z=Z+X^(2+3*i)/factorial(2+3*i);
end
Z=Z+X^2/factorial(2);%  при i=0
Z
 

И он дает следующий результат (для заданной матрицы Х, m=2 и n=3):
$$\begin{bmatrix}
 17.2105& 24.9822 & \\
  37.4733& 54.6839 & \\
\end{bmatrix}$$
который, полностью совпадает с Вашим расчетом.
Вопрос - какое символьное выражение позволило Вам его получить?

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 13:56 
maximkarimov Действительно, вычисление частичной суммы дает иной результат
Код:
m = 2; n = 3; N[Sum[MatrixPower[{{1, 2}, {3, 4}}, m + k*n]/(m + n*k)!, {k, 0, 100}]]

$\left(
\begin{array}{cc}
 17.2105 & 24.9822 \\
 37.4733 & 54.6839 \\
\end{array}
\right)$

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 14:03 
Markiyan Hirnyk в сообщении #1390556 писал(а):
maximkarimov Действительно, вычисление частичной суммы дает иной результат
Код:
m = 2; n = 3; N[Sum[MatrixPower[{{1, 2}, {3, 4}}, m + k*n]/(m + n*k)!, {k, 0, 100}]]

$\left(
\begin{array}{cc}
 17.2105 & 24.9822 \\
 37.4733 & 54.6839 \\
\end{array}
\right)$


Чрезвычайно рад, что Математика и Матлаб считают одинаково итеррационным методом!
Однако проблема никуда не делась - как получить тот же результат аналитически для матричного аргумента?

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 14:22 
Символьный результат в Математике получается так:
Код:
m = 2; n = 3; Sum[MatrixPower[{{1, 2}, {3, 4}}, m + k*n]/(m + n*k)!, {k, 0, Infinity}]
{{-((32 E^(-(5/4) - Sqrt[33]/
        2) (-11 E^(15/4) - Sqrt[33] E^(15/4) -
         11 E^(15/4 + Sqrt[33]) + Sqrt[33] E^(15/4 + Sqrt[33]) +
         22 E^((3 Sqrt[33])/4)
           Sin[1/12 (15 Sqrt[3] - 9 Sqrt[11] + 2 \[Pi])] +
         2 Sqrt[33] E^((3 Sqrt[33])/4)
           Sin[1/12 (15 Sqrt[3] - 9 Sqrt[11] + 2 \[Pi])] +
         22 E^(Sqrt[33]/4)
           Sin[1/12 (15 Sqrt[3] + 9 Sqrt[11] + 2 \[Pi])] -
         2 Sqrt[33] E^(Sqrt[33]/4)
           Sin[1/12 (15 Sqrt[3] + 9 Sqrt[11] + 2 \[Pi])]))/(33 (-5 +
         Sqrt[33])^2 (5 + Sqrt[33])^2)), (128 E^(-(5/4) - Sqrt[33]/
      2) (-E^(15/4) + E^(15/4 + Sqrt[33]) +
       2 E^((3 Sqrt[33])/4)
         Sin[1/12 (15 Sqrt[3] - 9 Sqrt[11] + 2 \[Pi])] -
       2 E^(Sqrt[33]/4)
         Sin[1/12 (15 Sqrt[3] + 9 Sqrt[11] + 2 \[Pi])]))/(3 Sqrt[
     33] (-5 + Sqrt[33])^2 (5 + Sqrt[33])^2)}, {(64 E^(-(5/4) - Sqrt[
      33]/2) (-E^(15/4) + E^(15/4 + Sqrt[33]) +
       2 E^((3 Sqrt[33])/4)
         Sin[1/12 (15 Sqrt[3] - 9 Sqrt[11] + 2 \[Pi])] -
       2 E^(Sqrt[33]/4)
         Sin[1/12 (15 Sqrt[3] + 9 Sqrt[11] + 2 \[Pi])]))/(Sqrt[
     33] (-5 + Sqrt[33])^2 (5 + Sqrt[33])^2), (32 E^(-(5/4) - Sqrt[
      33]/2) (11 E^(15/4) - Sqrt[33] E^(15/4) +
       11 E^(15/4 + Sqrt[33]) + Sqrt[33] E^(15/4 + Sqrt[33]) -
       22 E^((3 Sqrt[33])/4)
         Sin[1/12 (15 Sqrt[3] - 9 Sqrt[11] + 2 \[Pi])] +
       2 Sqrt[33] E^((3 Sqrt[33])/4)
         Sin[1/12 (15 Sqrt[3] - 9 Sqrt[11] + 2 \[Pi])] -
       22 E^(Sqrt[33]/4)
         Sin[1/12 (15 Sqrt[3] + 9 Sqrt[11] + 2 \[Pi])] -
       2 Sqrt[33] E^(Sqrt[33]/4)
         Sin[1/12 (15 Sqrt[3] + 9 Sqrt[11] + 2 \[Pi])]))/(33 (-5 +
       Sqrt[33])^2 (5 + Sqrt[33])^2)}}

Он громозкий и мне не удается привести его здесь в виде компилированной TeX формулы. Она такова
Код:
\left(
\begin{array}{cc}
-\frac{32 e^{-\frac{\sqrt{33}}{2}-\frac{5}{4}} \left(-\sqrt{33} e^{15/4}-11 e^{15/4}-11 e^{\sqrt{33}+\frac{15}{4}}+e^{\sqrt{33}+\frac{15}{4}} \sqrt{33}-2 \sqrt{33} e^{\frac{\sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}+9 \sqrt{11}+2 \pi \right)\right)+22 e^{\frac{\sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}+9 \sqrt{11}+2 \pi \right)\right)+22 e^{\frac{3 \sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}-9 \sqrt{11}+2 \pi \right)\right)+2 e^{\frac{3 \sqrt{33}}{4}} \sqrt{33} \sin \left(\frac{1}{12} \left(15 \sqrt{3}-9 \sqrt{11}+2 \pi \right)\right)\right)}{33 \left(\sqrt{33}-5\right)^2 \left(\sqrt{33}+5\right)^2} & \frac{128 e^{-\frac{\sqrt{33}}{2}-\frac{5}{4}} \left(-e^{15/4}+e^{\sqrt{33}+\frac{15}{4}}-2 e^{\frac{\sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}+9 \sqrt{11}+2 \pi \right)\right)+2 e^{\frac{3 \sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}-9 \sqrt{11}+2 \pi \right)\right)\right)}{3 \sqrt{33} \left(\sqrt{33}-5\right)^2 \left(\sqrt{33}+5\right)^2} \\
\frac{64 e^{-\frac{\sqrt{33}}{2}-\frac{5}{4}} \left(-e^{15/4}+e^{\sqrt{33}+\frac{15}{4}}-2 e^{\frac{\sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}+9 \sqrt{11}+2 \pi \right)\right)+2 e^{\frac{3 \sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}-9 \sqrt{11}+2 \pi \right)\right)\right)}{\sqrt{33} \left(\sqrt{33}-5\right)^2 \left(\sqrt{33}+5\right)^2} & \frac{32 e^{-\frac{\sqrt{33}}{2}-\frac{5}{4}} \left(-\sqrt{33} e^{15/4}+11 e^{15/4}+11 e^{\sqrt{33}+\frac{15}{4}}+e^{\sqrt{33}+\frac{15}{4}} \sqrt{33}-2 \sqrt{33} e^{\frac{\sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}+9 \sqrt{11}+2 \pi \right)\right)-22 e^{\frac{\sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}+9 \sqrt{11}+2 \pi \right)\right)-22 e^{\frac{3 \sqrt{33}}{4}} \sin \left(\frac{1}{12} \left(15 \sqrt{3}-9 \sqrt{11}+2 \pi \right)\right)+2 e^{\frac{3 \sqrt{33}}{4}} \sqrt{33} \sin \left(\frac{1}{12} \left(15 \sqrt{3}-9 \sqrt{11}+2 \pi \right)\right)\right)}{33 \left(\sqrt{33}-5\right)^2 \left(\sqrt{33}+5\right)^2} \\
\end{array}
\right)

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 14:43 
Markiyan Hirnyk в сообщении #1390559 писал(а):
Символьный результат в Математике получается так:


Спасибо! Не важно, что символьное выражение в Математике получается таким громоздским (в Матлабе всего 1 строчка) - важно что Математика с матричным аргументом корректно работает. Осталось понять как интегрировать Математику в Матлаб...

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 14:50 
Левое:

(Оффтоп)

maximkarimov в сообщении #1390554 писал(а):
Итак, правильный код для проверки итеррационным методом такой:

Только, извините, это беспощадный код. Каждый раз возводить матрицу в степень и считать факториал?
Меня в детстве за это даже по рукам не били, было незачем: просто компы отказывались работать за нормальное время, и это был вопрос выживания: будет работать программа или не будет.
Хорошо еще, матрица два на два.
Код (для проверки) должен выглядеть как-то так (остаточные навыки: последний раз хоть три строчки программировала я четверть века назад, а Матлаб вообще первый раз нынче ночью вижу, нет у меня пакетов):
Код:
A0=A^2/2; D = A0;
for k=1:100
A0 = A0*A^3/((3*k)*(3*k+1)*(3*k+2));
D = D+A0;
end;

Это вовсе не в порядке нравоучения, а в порядке экономии времени и ресурсов. Меня когда-то учили обращать на это внимание, вот, делюсь.

maximkarimov в сообщении #1390554 писал(а):
Вопрос - какое символьное выражение позволило Вам его получить?

Да в общем-то тот же, что и у Вас. Я его продублировала и проверила за компанию еще и с помощью funm. Если все верно, результаты совпадают и совпадают с тем, что выше. Кстати, с неквадратной матрицей код не работает. Ругается, что неквадратная. Могу скопировать:
Цитата:
Error using symengine
Not a square matrix.


Дальше пишете в syms, что действительно нужно.
Дальше:
Код:
S= symsum(x^(m+k*n)/factorial(m+k*n),k,0,inf);
B = funm(A,S);
B1 = symsum(A^(m+k*n)/factorial(m+k*n),k,0,inf);

B и B1 численно выдают один результат - тот, что выше.
Символьная запись может различаться.
Код:
B =

[ (33^(1/2)*(33^(1/2)/2 - 5/2)^2*(33^(1/2)/6 + 1/2)*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/22 + (33^(1/2)*(33^(1/2)/2 + 5/2)^2*(33^(1/2)/6 - 1/2)*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/22,
(33^(1/2)*(33^(1/2)/2 + 5/2)^2*(33^(1/2)/6 - 1/2)*(33^(1/2) + 3)*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/132 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*(33^(1/2)/6 + 1/2)*(33^(1/2) - 3)*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/132]
[(33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/22 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/22,
(33^(1/2)*(33^(1/2)/2 - 5/2)^2*(33^(1/2) - 3)*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/132 + (33^(1/2)*(33^(1/2)/2 + 5/2)^2*(33^(1/2) + 3)*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/132]


Код:
B1 =

[ ((33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/4 + ((33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/4 + (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/44 - (33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/44,   
(33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/33 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/33]
[  (33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/22 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/22,
((33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/4 + ((33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/4 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/44 + (33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/44]


-- 01.05.2019, 16:53 --

Но $n=3$ для Математики очень хороший показатель: все будет сводиться к экспоненте и синусу. Должно, по крайней мере.
Matlab до этого не додумывается.

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 15:08 
Otta в сообщении #1390564 писал(а):
Левое:

(Оффтоп)

maximkarimov в сообщении #1390554 писал(а):
Итак, правильный код для проверки итеррационным методом такой:

Только, извините, это беспощадный код. Каждый раз возводить матрицу в степень и считать факториал?
Меня в детстве за это даже по рукам не били, было незачем: просто компы отказывались работать за нормальное время, и это был вопрос выживания: будет работать программа или не будет.
Хорошо еще, матрица два на два.
Код (для проверки) должен выглядеть как-то так (остаточные навыки: последний раз хоть три строчки программировала я четверть века назад, а Матлаб вообще первый раз нынче ночью вижу, нет у меня пакетов):
Код:
A0=A^2/2; D = A0;
for k=1:100
A0 = A0*A^3/((3*k)*(3*k+1)*(3*k+2));
D = D+A0;
end;

Это вовсе не в порядке нравоучения, а в порядке экономии времени и ресурсов. Меня когда-то учили обращать на это внимание, вот, делюсь.

maximkarimov в сообщении #1390554 писал(а):
Вопрос - какое символьное выражение позволило Вам его получить?

Да в общем-то тот же, что и у Вас. Я его продублировала и проверила за компанию еще и с помощью funm. Если все верно, результаты совпадают и совпадают с тем, что выше. Кстати, с неквадратной матрицей код не работает. Ругается, что неквадратная. Могу скопировать:
Цитата:
Error using symengine
Not a square matrix.


Дальше пишете в syms, что действительно нужно.
Дальше:
Код:
S= symsum(x^(m+k*n)/factorial(m+k*n),k,0,inf);
B = funm(A,S);
B1 = symsum(A^(m+k*n)/factorial(m+k*n),k,0,inf);

B и B1 численно выдают один результат - тот, что выше.
Символьная запись может различаться.
Код:
B =

[ (33^(1/2)*(33^(1/2)/2 - 5/2)^2*(33^(1/2)/6 + 1/2)*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/22 + (33^(1/2)*(33^(1/2)/2 + 5/2)^2*(33^(1/2)/6 - 1/2)*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/22,
(33^(1/2)*(33^(1/2)/2 + 5/2)^2*(33^(1/2)/6 - 1/2)*(33^(1/2) + 3)*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/132 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*(33^(1/2)/6 + 1/2)*(33^(1/2) - 3)*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/132]
[(33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/22 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/22,
(33^(1/2)*(33^(1/2)/2 - 5/2)^2*(33^(1/2) - 3)*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/132 + (33^(1/2)*(33^(1/2)/2 + 5/2)^2*(33^(1/2) + 3)*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/132]


Код:
B1 =

[ ((33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/4 + ((33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/4 + (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/44 - (33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/44,   
(33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/33 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/33]
[  (33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/22 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/22,
((33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/4 + ((33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/4 - (33^(1/2)*(33^(1/2)/2 - 5/2)^2*hypergeom([], [4/3, 5/3], -(33^(1/2)/2 - 5/2)^3/27))/44 + (33^(1/2)*(33^(1/2)/2 + 5/2)^2*hypergeom([], [4/3, 5/3], (33^(1/2)/2 + 5/2)^3/27))/44]


-- 01.05.2019, 16:53 --

Но $n=3$ для Математики очень хороший показатель: все будет сводиться к экспоненте и синусу. Должно, по крайней мере.
Matlab до этого не додумывается.


Боже, как все просто оказалось! Моя ошибка заключлась в том, что после получения символьного выражения я не сразу использовал funm, а сначала делал вот это:
Используется синтаксис Matlab M
f=matlabFunction(S);
 

Без этой строчки все заработало! Нет слов! Спасибо Вам огроменное!!!

 
 
 
 Re: Символьное вычисление суммы ряда в Матлаб
Сообщение01.05.2019, 15:30 
Аватара пользователя

(Оффтоп)

Ну почему мне все время кажется, что тема называется "Самовольное вычисление суммы ряда в Матлаб". И мысли, "А что, нельзя без разрешения?"

 
 
 [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group