2014 dxdy logo

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

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




 
 Помогите чайнику, пожалуйста.
Сообщение14.06.2006, 20:04 
Уважаемые форумчане.

Помогите, пожалуйста, чайнику. :oops: С программированием всегда были траблы.
Думал, прижмет, разрулю. Что-то не разруливается :(
Проблема такова: нужно найти коэффициенты a_n, b_n, где n от 0 до некоторого N.
Для каждых a_n, b_n есть неоднородная СЛАУ, в правой части n-ой СЛАУ стоит выражение от a_i,b_i, где 0<=i<n-1. При этом известны a_0, b_0.

Я так понимаю, что нужен цикл. Решается СЛАУ1, ее решение попадает в правую часть СЛАУ2 и т.д. до n. Решил написать цикл в Mathematca, используя встроенное умение решать СЛАУ.
Написал вроде цикл, но не работает.
Буду очень признателен, если кто объяснить в чем трабл.....
Программка:
For[n = 1; a_ 0 = 1; k = 3; q = 4; a = 10; b_ 0 = ((3^2 - 4^2 - 2*i*3*9))/25; E^2=3^2 + 4^2;
m_n = {{(-E), (-((a^2)))*((n^2))+a*n*((2*i*k + 2*q))+k^2-q^2-2*i*k*q}, {(-((a^2)))*((n^2))+
a*n*((2*i*k-2*q))+k^2-q^2+2*i*k*q,(-E)}}; m_n . { a_n, b_n} ==
{(-e)*U*([Sum]+(j=o)%(n-1)a_j*(((-1)))^((n+1-j))) ,(-e)*U*([Sum]+(j=o)%(n - 1)b_j*(((-1)))^((n+1- j)))}, n <10, n = n + 1;LinearSolve[m_n, {a_n, b_n}]; Print[a_n]]

Премного благодарен. :roll: :roll: :roll:

 
 
 
 
Сообщение14.06.2006, 21:49 
Аватара пользователя
:evil:
Чегой-то Mathematica на Ваш текст ругается... Вы какой версией пользовались?

И после n = n + 1 не запятая ли должна быть?

А вообще, что Вы пытаетесь написать? Я никак не могу понять Ваш синтаксис (у Mathematica он вообще нетрадиционный -- например, a_b -- это проверка на соответсвие образцу, а не индексация. Вы проверку имели в виду?).

 
 
 
 
Сообщение15.06.2006, 10:50 
Большое спасибо за ответ.
Mathematica 4.
Не знал, что _ не индексация, а как вводиться индексация? :oops:
Синтаксис свой я сам не понимаю, отсюда все проблемы......

Говорю же, ничего не понимаю :oops: :roll:
Может, посоветуете, почитать чего. :roll:

 
 
 
 
Сообщение15.06.2006, 12:30 
Аватара пользователя
stud если Вам нужно решить указанную СЛАУ скажем для того чтобы сдат зачет по ЧМ, то воспользуйтесь уже готовыми программами (в данной библиотеке есть такие книги); если Вам нужно решить СЛАУ именно в СКМ Mathematica, то почитайте тот же help по циклу For(лично я в таких случаях пользуюсь Maple - программировать можно как в Pascal, ну или MatLab- С/С++); если же Вы хотите действительно освоить численные методы решения СЛАУ, то это уж численные методы(метод итераций). :wink:

 
 
 
 
Сообщение15.06.2006, 17:04 
Аватара пользователя
:evil:
stud писал(а):
Не знал, что _ не индексация, а как вводиться индексация?

a[[k]]

 
 
 
 
Сообщение15.06.2006, 17:23 
Аватара пользователя
А что за индексация? Вот такая $a_k$?

Если у Вас английская версия, то заходите $file \to palettes \to 2 AlgebraicManipulation$ и ещё $file \to palettes \to 4 BasicInput $, с помощью этих двух палет возможны любые оперции.
Ну и естественно help прочтите. Я, например, если что из него просто копирую.

 
 
 
 
Сообщение15.06.2006, 17:58 
Всем спасибо за ответы.
reader_st
Ситуация такова. Я поступил в аспирантуру физфака, сменив немного тематику. До этого требовалось только умение считать аналитически. Сейчас возникла потребность в знании алгоритмов ЧМ и их реализации в любой среде. Начну, наверно, с лекций по ЧМ, буду пробовать реализовывать в С или в Фортране.
Мне наивно думается, что особых программерских навыков не потребуется.

2All
Сделел правильную индексацию. Программа печатает просто аргумент Print[], мне даже неизвестно, посчитала ли она коэффициенты a и b.

Только не смейтесь надо мной сильно :oops: :roll:

 
 
 
 
Сообщение15.06.2006, 18:43 
Аватара пользователя
:evil:
А Вы не можете используя тег math написать, что Вы пытаетесь сделать?

Что-нибудь типа $a_k = k^3-1$, $\sum\limits_{j=0}^n a_k x_{j,k} = b_k$?

 
 
 
 
Сообщение15.06.2006, 18:56 
m_{n}\overrightarrow{x_{n}}=\overrightarrow{y_{n}}(\overrightarrow{x_{0}},\overrightarrow{x_{1}},...,\overrightarrow{x_{n-1}}),
где
m_{n}-матрица (2x2),
\overrightarrow{x_{n}}=(a_{n},b_{n}),
\overrightarrow{y_{n}}=\overrightarrow{y_{n}}(\overrightarrow{x_{0}},\overrightarrow{x_{1}},...,\overrightarrow{x_{n-1}}) -- зависит от предыдущих векторов \overrightarrow{x}

Требуются все коэффициенты a_{i}, b_{i}, i=0,...,n

 
 
 
 
Сообщение15.06.2006, 19:24 
Аватара пользователя
:evil:
А формула для
stud писал(а):
$\overrightarrow{y_{n}}=\overrightarrow{y_{n}}(\overrightarrow{x_{0}},\overrightarrow{x_{1}},...,\overrightarrow{x_{n-1}})$ -- зависит от предыдущих векторов $\overrightarrow{x}$

-- остальное я вроде понял.

 
 
 
 
Сообщение15.06.2006, 20:17 
Напишу явный вид правой части, хотя, вроде бы это не так важно,
программа то не работает, или работает, но я "не работаю":
\overrightarrow{y_{n}}=(\sum\limits_{j=0}^{n-1}a_{i}(-1)^{n+1-j} ,    \sum\limits_{j=0}^{n-1}b_{i}(-1)^{n+1-j})

 
 
 
 
Сообщение15.06.2006, 20:32 
Аватара пользователя
в palettes в 3 пакете BasicCalculation показано, как работать с матрицами и векторами (List and Matrices), там -же можно прочитать про суммы (Calculs -> Common Operations). А вообще всё-то-же самое есть и в 4 пакете, я в основном как раз с BasicInput работаю.

 
 
 
 
Сообщение16.06.2006, 19:31 
Аватара пользователя
:evil:
Ваша программа по-человечески:
Код:
a[0] = 1;
b[0] = (3^2 - 4^2 - 2*i*3*9)/25;
EE = Sqrt[3^2 + 4^2];
k = 3;
q = 4;
aa = 10;
For[n = 1, n <= 10, n = n + 1,
  m[n] = {{(-EE), (-((aa^2)))*((n^2)) + aa*n*((2*i*k + 2*q)) + k^2 - q^2 - 2*i*k*q},
          {(-((aa^2)))*((n^2)) + aa*n*((2*i*k - 2*q)) + k^2 - q^2 + 2*i*k*q, (-EE)}};
  y[n] = {Sum[a[j](-1)^(n + 1 - j), {j, 0, n - 1}], Sum[a[j](-1)^(n + 1 - j), {j, 0, n - 1}]};
  {a[n], b[n]} = Simplify[Dot[Inverse[m[n]], y[n]]];
  Print[a[n]]
  ]


1) Некоторые символы зарезервированы, например E. Заменено на EE.
2) Вы не можете использовать a как параметр и как последовательность. Параметр переименован в aa.
3) Mathematica -- конструктивный (а не декларативный) пакет. Поэтому надо явно писать выражение для EE.
4) Посмотрите синтаксис оператора цикла. У Вас все было смешано в одну кучу. Между тем разница между запятой и точкой с запятой -- принципиальна.

Дальше -- сами. Но -- найдите и почитайте книгу по Mathematica. Вам не приходит в голову писать на суахили исходя из знания русского? :wink: Здесь -- тоже самое. Вы изобретаете синтаксис, изобретаете функции... В общем, дуэт из "Формулы любви"

 
 
 
 
Сообщение16.06.2006, 21:55 
Спасибо ОГРОМНОЕ-ОГРОМНОЕ. :P

Пункт 3) не понятен :( .
Я понимаю, что разница между запятой и точкой с запятой огромна в цикле, но у меня хэлп к математике не полный -- примеров не нашел, а из определения я не очень понял.
Дописывать завтра буду. Из этих коэффициентов буду строить функции. :)


Может посоветуете что-нибудь по Mathematica и по программированию с уклоном к реализации алгоритмов ЧМ, а не по созданию приложений win32. А то я скачал лекции по ЧМ с сайта кафедры математики физфака, но там теория одна, а мне бы какой-нибудь практический курс. :roll: :roll:

 
 
 
 
Сообщение16.06.2006, 22:27 
Аватара пользователя
:evil:
stud писал(а):
Пункт 3) не понятен

Вы пишите E^2 == 3^2+4^2. Это декларация того, что у Вас есть. Конструктивный же вариант -- указать, что надо вычислить: E = Sqrt[3^2+4^2].

Воспользуйтесь poiskknig.ru (я нашел по крайней мере "Mathematica book" и "Mastering Mathematica"). Вам нужны не приложения, а базовые сведения о Mathematica. Можно еще в библиотеку попробовать сходить (Вы же аспирант?)...

 
 
 [ Сообщений: 15 ] 


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