+1.13
6 читателей, 54 топика


Метод Эйлера на C++

См. также метод Эйлера-Коши на С++

Будем рассматривать дифференциальное уравнение вида

y'=f(x,y),     (1)

где f(x,y) — заданная непрерывная функция в области D.

Задача нахождения решения этого уравнения, удовлетворяющего начальному условию

(x0)=y0,     (2)

называется задачей Коши.

Метод Эйлера

Пусть требуется найти решение задачи Коши (1)-(2) на отрезке [a,b].

Разобьем отрезок [a,b] на n равных частей точками xi=a+i·h, где i=0,1,,n,h=ban. Заменяя в уравнении (1) производную разностным отношением, получим
y1y0h=f(x0,y0).

Перепишем последнее уравнение в виде
y1=y0+h·f(x0,y0).

Повторяя этот процесс, получим приближенное решение задачи (1)-(2).

Таким образом, итерационная формула метода Эйлера имеет вид
xi+1=a+i·h,   yi+1=yi+h·f(xi,yi),   i=0,1,,n.

Пример. Решить методом Эйлера дифференциальное уравнение y'=3sin2y+x с начальным условием y(0)=2 на отрезке [0,1] с шагом h=0,1.

Решение.

#include <iostream>
#include <cmath>
using namespace std;

double F(double x, double y){
	return 3*sin(2*y)+x;
}

int main() {
	double a=0; double b=1; double h=0.1;
	double n=(b-a)/h;
	double X[(int)n]; double Y[(int)n];
	X[0]=a; Y[0]=2;
	for(int i=1; i<=n; i++){
		X[i]=a+i*h;
		Y[i]=Y[i-1]+h*F(X[i-1],Y[i-1]);
	}
	for(int i=0; i<=n; i++){
		cout << "X["<<i<<"]="<<X[i] <<" ";
	}
	cout << endl;
	for(int i=0; i<=n; i++){
		cout << "Y["<<i<<"]="<<Y[i] << " ";
	}
	return 0;
}


Результат:

X[0]=0 X[1]=0.1 X[2]=0.2 X[3]=0.3 X[4]=0.4 X[5]=0.5 X[6]=0.6 X[7]=0.7 X[8]=0.8 X[9]=0.9 X[10]=1 
Y[0]=2 Y[1]=1.77296 Y[2]=1.66494 Y[3]=1.62879 Y[4]=1.62407 Y[5]=1.63217 Y[6]=1.64544 Y[7]=1.66082 Y[8]=1.6771 Y[9]=1.6938 Y[10]=1.71074


См. также метод Эйлера-Коши на С++
  • avatar
  • 0
  • 0


Интерполяционный многочлен Лагранжа на Python

Пусть функция f(x) задана таблицей
x  x0   x1     xn
y  y0   y1     yn

Интерполяционным многочленом Лагранжа называется многочлен
Ln(x)=i=0nyi(x-x0)(x-xi-1)(x-xi+1)(x-xn)(xi-x0)(xi-xi-1)(xi-xi+1)(xi-xn).

Объявляем функцию для организации вычислений по формуле интерполяционного многочлена Лагранжа

     def lagranz(x,y,t):
         z=0
         for j in range(len(y)):
             p1=1; p2=1
             for i in range(len(x)):
                 if i==j:
                     p1=p1*1; p2=p2*1	
                 else: 
                     p1=p1*(t-x[i])
                     p2=p2*(x[j]-x[i])
             z=z+y[j]*p1/p2
         return z


Пример. Написать программу для вычисления значений интерполяционного многочлена Лагранжа для функции, заданной таблицей
x     2 5  -6   7   4  3 8   9   1  -2
f(x) -1	77 -297 249 33 9 389 573 -3 -21

Решение

     import numpy as np
     import matplotlib.pyplot as plt
     x=np.array([2,5,-6,7,4,3,8,9,1,-2], dtype=float)
     y=np.array([-1,77,-297,249,33,9,389,573,-3,-21], dtype=float)
     def lagranz(x,y,t):
         z=0
         for j in range(len(y)):
             p1=1; p2=1
             for i in range(len(x)):
                 if i==j:
                     p1=p1*1; p2=p2*1	
                 else: 
                     p1=p1*(t-x[i])
                     p2=p2*(x[j]-x[i])
             z=z+y[j]*p1/p2
         return z
     xnew=np.linspace(np.min(x),np.max(x),100)
     ynew=[lagranz(x,y,i) for i in xnew]
     plt.plot(x,y,'o',xnew,ynew)
     plt.grid(True)
     plt.show()


Результат:
Интерполяционные многочлен Лагранжа

Для построения графика использовалась библиотека matplotlib. Некоторые примеры использования этой библиотеке можно посмотреть здесь:
  • avatar
  • 0
  • 0


Интерполяционный многочлен Лагранжа на C++

Пусть функция f(x) задана таблицей
x  x0   x1     xn
y  y0   y1     yn

Интерполяционным многочленом Лагранжа называется многочлен
Ln(x)=i=0nyi(x-x0)(x-xi-1)(x-xi+1)(x-xn)(xi-x0)(xi-xi-1)(xi-xi+1)(xi-xn).

Объявляем функцию для организации вычислений по формуле интерполяционного многочлена Лагранжа

double lagranz(double X[n], double Y[n], double t){
	double z,p1,p2; 
	z=0;
	for (int j=0; j<n; j++){
		p1=1; p2=1;
		for (int i=0; i<n; i++){
			if (i==j){
			    p1=p1*1;p2=p2*1;
			}
			else {
				p1=p1*(t-X[i]);
				p2=p2*(X[j]-X[i]);
		    }
		}
		z=z+Y[j]*p1/p2;
	}
	return z;
}


Улучшенный вариант этой функции можно найти здесь

Пример. Написать программу для вычисления значений интерполяционного многочлена Лагранжа для функции, заданной таблицей
x     2 5  -6   7   4  3 8   9   1  -2
f(x) -1	77 -297 249 33 9 389 573 -3 -21

Решение

#include <iostream>;
using namespace std;
const int n=10;

double lagranz(double X[n], double Y[n], double t);

int main() {
    double X[n]={2,5,-6,7,4,3,8,9,1,-2};
    double Y[n]={-1,77,-297,249,33,9,389,573,-3,-21};
    cout << "Ln(5)=" << lagranz(X,Y,5) << " " << endl;
    return 0;
}

double lagranz(double X[n], double Y[n], double t){
	double z,p1,p2; 
	z=0;
	for (int j=0; j<n; j++){
		p1=1; p2=1;
		for (int i=0; i<n; i++){
			if (i==j){
			    p1=p1*1;p2=p2*1;
			}
			else {
				p1=p1*(t-X[i]);
				p2=p2*(X[j]-X[i]);
		    }
		}
		z=z+Y[j]*p1/p2;
	}
	return z;
}


Результат:
Ln(5)=77
  • avatar
  • 0
  • 0


Бесплатные книги по программированию на русском (май 2016)

Марейн Хавербек - Выразительный Javascript

Название: Выразительный Javascript. Современное введение в программирование.
Автор: Марейн Хавербек
Язык: Русский
Перевод: Вячеслав Голованов
Лицензия: Creative Commons Attribution-Noncommercial
Источник: librarion.ru
Скачать
 

 

 


Tobias Oetiker, Hubert Partl, Irene Hyna и Elisabeth Schlegl - Не очень краткое введение в LaTeX 2e

Название: Не очень краткое введение в LaTeX 2e
Авторы: Tobias Oetiker, Hubert Partl, Irene Hyna и Elisabeth Schlegl
Язык: Русский
Перевод: Б. Тоботрас, 22 мая 2003 г.
Год: 2003
Версия: 4.12, 13 апреля, 2003 г.
Лицензия: GNU General Public License.
Источник: librarion.ru
Скачать

 


Scott Chacon, Ben Straub - Pro Git, 2nd edition

Название: Pro Git, 2nd edition
Авторы: Scott Chacon, Ben Straub
Язык: Русский
Год: 2014
Лицензия: Creative Commons Attribution-NonCommercial-ShareAlike 3.0.
Источник: librarion.ru
Скачать

 

 


Е.М. Балдин - Компьютерная типография LATEX

Название: Компьютерная типография LATEX
Автор: Е.М. Балдин
Язык: Русский
Год: 2013
Лицензия: Creative Commons Attribution-ShareAlike 3.0 Unported (CC-BY-SA 3.0).
Источник: librarion.ru
Скачать

 

 

 


Антон Холомьёв - Учебник по Haskell
Название: Учебник по Haskell
Авторы: Антон Холомьёв
Язык: Русский
Год: 2012
Лицензия: Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Generic license (CC BY-NC-ND 3.0).
Источник: librarion.ru
Скачать

 

 

 


Е.М.Балдин - История о PostgreSQL
Название: История о PostgreSQL
Авторы: Е.М.Балдин
Язык: Русский
Год: 2006 (ревизия 15.10.2013)
Лицензия: Creative Commons Attribution-Share Alike 3.0 License (CC-BY-SA-3.0).
Источник: librarion.ru
Скачать

 

 

 

 


Swaroop Chitlur - A Byte of Python
Название: A Byte of Python
Авторы: Swaroop Chitlur
Перевод: Владимир Смоляр
Язык: Русский
Год: 2013
Лицензия: Creative Commons Attribution-Share Alike 3.0 Unported.
Источник: librarion.ru
Скачать

 
  • avatar
  • 0
  • 0


Средства обработки звука на базе Linux

Для работы со звуком в Linux много специализированных программ. Это и проигрыватели всяческих аудио-форматов, и перекодировщики, и аудиоредакторы; каждая графическая оболочка типа KDE или GNOME предлагает свой набор утилит; существуют принципиально отличные друг от друга драйвера для одних и тех же устройств (OSS и ALSA), да плюс к этому существуют всяческие звуковые сервера для смешивания аудиопотоков от разных программ. Рассмотрим несколько примеров программ для полноценной обработки звука.
Многоканальная запись и сведение:
Ardour
В настоящее время это наиболее мощное свободное приложение с графическим интерфейсом для многоканальной записи и сведения. Программа умеет работать со звуковыми файлами различных форматов и различного качества (от 8бит-22КГц до 32бит-196КГц). Вся внутренняя обработка происходит с разрешение 32бит с плавающей точкой. Количество записываемых и сводимых дорожек ограничивается лишь возможностями вашего компьютера. Ardour поддерживает внешние микшеры, работающие по MMC. Микшер программы позволяет назначать бесконечное количество подгрупп для сведения. Ardour позволяет осуществлять недеструктивное редактирование, в том числе с применением внешних эффект-процессоров. Иными словами, вы можете сразу услышать как будет звучать дорожка с наложенными на него обработками, без изменения исходного звукового файла. В Ardour можно использовать модули эффектов LADSPA и VST.
Ecasound
Ecasound — средство многоканальной записи, построенное на концепции звуковых цепочек и работающее из консоли. Для каждой цепочки можно назначить свою последовательность эффектов со своими настройками. Ecasound прекрасно подходит для одновременной записи и сведения большого количества дорожек на компьютерах с ограниченной мощностью. Для Ecasound есть два активно разрабатываемых графических интерфейса: TkEca и EMI.
Любой звук после записи необходимо обработать и наложить на него эффекты.
Модули эффектов:
В дистрибутивы входит большое количество модулей LADSPA, являющихся прямым аналогом модулей VST и DX, известных в мире проприетарных операционных систем. Пакеты с модулями LADSPA имеют вид ladspa-*-plugins. Некоторые приложения, умеющие работать с ними (и называемые также хостами), поддерживают встроенный в LADSPA механизм классификации модулей по типу (компрессоры, ревербераторы и т.д.), что заметно упрощает выбор нужного модуля в меню приложения среди пары сотен других установленных модулей.
Аналогом модулей VSTi и DXi в Linux является новый формат DSSI, который поддерживается пока только в MIDI-секвенсере Rosegarden. DSSI построен на основе LADSPA и отличается от последнего тем, что позволяет создавать модули с оригинальным интерфейсом, используя любую библиотеку графических элементов интерфейса (Qt, GTK и т.д.).
Сами модули VST и VSTi поддерживаются либо при помощи отдельно устанавливаемой программы vst-server, либо самими приложениями из комплектации дистрибутива, такими как MusE и Ardour.

Для тех у кого нет времени или необходимых навыков для установки специального ПО существуют готовые решения.
64studio — готовая к употреблению операционная система, собранная на базе Debian Linux, включающая в себя подборку свободного ПО для работы с мультимедия. Для музыкантов там есть всё, что нужно: рабочая станция Ardour, драм-машины, сэмплеры, синтезаторы, плагины для обработки и мастеринга. Аудио драйверы: ALSA, OSS, Jack. Есть не требующий установки LiveCD. Наибольшие различия между этим дистрибутивом и стандартной Debian — это модифицированное ядро с применением патчей в реальном времени, некоторые пре-конфигурации и модифицированный выбор пакетов, адаптированный для креативных пользователей. Другие пакеты могут быть также расширенны, как стандартные темы GNOME.

Ubuntu Studio — готовая к употреблению операционная система, собранная на базе Ubuntu Linux, включающая в себя подборку свободного ПО для работы с мультимедия. Для музыкантов там есть всё, что нужно: рабочая станция Ardour, драм-машины, сэмплеры, синтезаторы, плагины для обработки и мастеринга. В отличие от других дистрибутивов Ubuntu, установка Ubuntu Studio основана не на Live-CD инсталляторах, а использует текстовый интерфейс. Кроме того, дистрибутив оказался слишком большим, чтобы поместиться на семисотмегабайтный компакт-диск, поэтому обычно устанавливается с DVD.

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


Аутентификация Debian GNU Linux в LDAP

Описание ИС


Сервер LDAP: openLDAP
Клиент: Debian Wheezy 7.5

Домен: unit.server.loc

IP сервера: 192.168.216.7
Администратор LDAP: login — admin, password — admin

Настройка клиента

Установка необходимого ПО
aptitude install libnss-ldap libpam-ldap nscd nslcd

Настраивается пакет libnss-ldap
Универсальный Идентификатор Ресурса сервера LDAP:
ldapi://192.168.216.7:389/
Индивидуальное имя базы поиска:
dc=unit,dc=server,dc=loc
Использовать версию LDAP: 3
Учетная запись LDAP для root: cn=admin,dc=unit,dc=server,dc=loc
Пароль учетной записи LDAP для root: admin
Разрешить учетной записи LDAP admin вести себя как root: нет
База данных LDAP требует входа: нет

Настраивается пакет nslcd
URI сервера LDAP: ldap://192.168.216.7:389/
База поиска сервера LDAP: dc=unit,dc=server,dc=loc

dpkg-reconfigure libpam-ldap

Настраивается пакет libpam-ldap
URI сервера LDAP: ldapi://192.168.216.7:389/
Индивидуальное имя базы поиска: dc=unit,dc=server,dc=loc
Использовать версию LDAP: 3
Разрешить учетной записи LDAP admin вести себя как root: нет
База данных LDAP требует входа: нет
Алгоритм локального шифрования паролей: crypt
Активируемые профили PAM: все

nano /etc/ldap/ldap.conf

host 192.168.216.7
base dc=unit,dc=server,dc=loc
rootbinddn cn=admin,dc=unit,dc=server,dc=loc
rootbindpw admin
URI ldap://192.168.216.7:389/
ldap_version 3
bind_policy soft

nano /etc/nsswitch.conf

passwd: files ldap
group: files ldap
shadow: files ldap
netgroup: ldap

nano /etc/nslcd.conf

uri ldap://192.168.216.7:389/
base dc=unit,dc=server,dc=loc

nano /etc/libnss-ldap.conf

host 192.168.216.7
base dc=unit,dc=server,dc=loc
uri ldapi://192.168.216.7:389/
ldap_version 3
binddn cn=admin,dc=unit,dc=server,dc=loc
bindpw admin
port 389
bind_policy soft
nss_reconnect_tries 1
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 8
nss_reconnect_maxconntries 2

nano /etc/pam_ldap.conf

host 192.168.216.7
base dc=unit,dc=server,dc=loc
uri ldapi://192.168.216.7:389/
ldap_version 3
binddn cn=admin,dc=unit,dc=server,dc=loc
bindpw admin
port 389
bind_policy soft

/etc/init.d/nscd restart
/etc/init.d/nslcd restart

Проверка
getent group

getent passwd


PAM


nano /etc/pam.d/common-auth

auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so

nano /etc/pam.d/common-account

account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so

nano /etc/pam.d/common-password

password [success=2 default=ignore] pam_unix.so obscure sha512
password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
password requisite pam_deny.so
password required pam_permit.so

nano /etc/pam.d/common-session

session required pam_mkhomedir.so skel=/etc/skel umask=0077
  • avatar
  • 0
  • 0


Установка новой версии Iceweasel в Debian Wheezy

В файл /etc/apt/sources.list добавляем строку

deb http://mozilla.debian.net/ wheezy-backports iceweasel-release

От имени пользователя root выполняем команды

aptitude update
aptitude install -t wheezy-backports iceweasel
  • avatar
  • 0
  • 0


Javadoc - документирование исходного кода

Javadoc — стандартный генератор документации в HTML-формате из комментариев исходного кода.

Для создания описания к элементу(поле, класс, метод) используются специальный комментарий, расположенный выше этого элемента:
/** Описание */
Для документирования можно использовать дескрипторы, вот некоторые из них:
@author — автор
@version — версия
@since — указывает с какой версии появился этот блок кода
@see — ссылка на другое место в документации
@param — передаваемый параметр методу
@return — описание возвращаемого значения метода
@exception и @throws — описание исключений
@deprecated — документирование устаревших частей кода
{@link} — создание ссылки, можно вставлять в любое место
{@value} — описание значения переменной

Рассмотрим пример:

/** Класс служит для хранения объектов со свойствами
 * <b>maker</b> и <b>price</b>.
 * @autor Filippov Yakov
 * @version 1.0
*/
class Product{
	/** Свойство - производитель */
	private String maker;
	
	/** Свойство - цена */
	public double price;
	
	/** Создает новый пустой объект
	 * @see Product#Product(String, double)
	*/
	Product(){
		setMaker("");
		price=0;
	}
	
	/** Создает новый объект с заданными значениями
	 * @param maker - производитель
	 * @param price - цена
	 * @see Product#Product()
	*/
	Product(String maker,double price){
		this.setMaker(maker);
		this.price=price;
	}
	
	/** Функция для получения значения поля {@link Product#maker}
	 * @return Возвращает название производителя
	 */
	public String getMaker() {
		return maker;
	}

	public void setMaker(String maker) {
		this.maker = maker;
	}
}

Как видно, в документации можно использовать HTML теги. При использовании ссылочных дескрипторов @see и @link нужно сначала указать имя класса и через символ "#" его метод или поле.
Вот пример использования ссылок для документирования перегруженного конструктора:

/** Создает новый объект с заданными значениями
* @param maker - производитель
* @param price - цена
* @see Product#Product()
*/

На выходе получаем:
Пример документации конструктора
Чтобы увидеть документацию в eclipse выделите элемент и нажмите F2.


Аутентификация Debian GNU Linux в Active Directory (MS Windows 2003 Server)

Описание ИС
Сервер AD: Microsoft Windows 2003 Server Standart (с настроенным DNS)
Клиент: Debian Wheezy 7.4

Домен: unit.server.loc

Имя сервера: win2003srv
IP сервера: 192.168.216.1
Администратор: login — admin, password — admin

Имя клиента: debian
IP клиента: 192.168.216.7

Установка необходимого ПО на клиенте

aptitude install samba winbind krb5-user libpam-krb5


Настройка клиента
Настройка времени
Для корректной настройки необходима синхронизация времени между сервером и клиентом.

Для синхронизации можно использовать команду
net time set 192.168.216.1

Однако, в этом случае нужно выполнять эту команду регулярно.

Более эффективным решением является использование сервера времени NTP и синхронизация времени с ним с помощью NTP клиента.

Настройка разрешения имени клиента debian
Правильное разрешение FQDN (Fully Qualified Domain Name — «полностью определённое имя домена») необходимо для корректной работы Kerberos и AD. Для этого в файле /etc/hosts должна быть строка
127.0.0.1    debian.unit.server.loc    localhost    debian


Настройка Kerberos
Редкутируем конфигурационный файл /etc/krb5.conf

[logging]
        Default = FILE:/var/log/krb5.log

[libdefaults]
        ticket_lifetime = 24000
        clock-skew = 300
        default_realm = UNIT.SERVER.LOC


[realms]
        UNIT.SERVER.LOC = {
                kdc = win2003srv.unit.server.loc:88
                admin_server = win2003srv.unit.server.loc:464
                default_domain = unit.server.loc        
        }

[domain_realm]
        .unit.server.loc = UNIT.SERVER.LOC
        unit.server.loc = UNIT.SERVER.LOC



Проверяем настройки.
Получаем билет Kerberos с помощью команды:
kinit admin

Используем команду klist для проверки

Ticket cache: File:/tmp/krb5cc_0
Default principal: admin@UNIT.SERVER.LOC

Valid starting          Expires                Service principal
16.02.2014 14.:37.07    16.02.2014 21.17.07    Krbtgt/UNIT.SERVER.LOC@UNIT.SERVER.LOC


Присоединение к домену
Для присоединения к домену потребуются samba и winbind
Редактируем конфигурационный файл samba: /etc/samba/smb.conf

[global]
        security = ads
        realm = UNIT.SERVER.LOC
        password server = 192.168.216.1
        workgroup = UNIT
#       winbind separator = +
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        winbind enum users = yes
        winbind enum groups = yes
        template homedir = /home/%D/%U
        template shell = /bin/bash
        client use spnego = yes
        client ntlmv2 auth = yes
        encrypt passwords = yes
        winbind use default domain = yes
        restrict anonymous = 2
        domain master = no
        local master = no
        preferred master = no
        os level = 0


Перезапускаем службы:

/etc/init.d/winbind stop
/etc/init.d/samba restart
/etc/init.d/winbind start


Присоединение к домену

net ads join -U admin

Using short domain name – UNIT

Joined ‘debian’ to realm ‘UNIT.SERVER.LOC’


Проверка

wbinfo -u


Настройка аутентификации
NSSWITCH
Редактируем /etc/nsswitch.conf

passwd: compat winbind
group:  compat winbind
shadow: compat


Проверка

getent passwd
getent group


PAM
Редактируем: /etc/pam.d/common-account

account sufficient      pam_winbind.so
account required        pam_unix.so


Редактируем: /etc/pam.d/common-auth

auth sufficient pam_winbind.so
auth sufficient pam_unix.so nullok_secure use_first_pass
auth required   pam_deny.so


Редактируем: /etc/pam.d/common-session

session required pam_unix.so
session required pam_mkhomedir.so umask=0077 skel=/etc/skel


Редактируем: /etc/pam.d/su

Auth sufficient pam_winbind.so
Auth sufficient pam_unix.so use_first_pass
Auth required    pam_deny.so

@include common-account


Завершение настройки
Создадим каталог для хранения учетных записей домена

mkdir /home/UNIT


Источник: https://wiki.debian.org/AuthenticatingLinuxWithActiveDirectory
  • avatar
  • 0
  • 0


Настройки прокси в Debian GNU/Linux

Глобальные настройки прокси (для всех пользователей)
В файл /etc/environment необходимо добавить строки:
export http_proxy="http://ip_adress:port/"
export https_proxy="https://ip_adress:port/"
export ftp_proxy="ftp://ip_adress:port/"

Настройки прокси для менеджера пакетов apt
В каталоге /etc/apt/apt.conf.d/ необходимо создать файл (например proxy), содержащий строки:
Acquire::http::Proxy "http://ip_adress:port";
Acquire::ftp::Proxy "http://ip_adress:port";
Acquire::Proxy "True";
  • avatar
  • 0
  • 0