DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Метод Ньютона для розв’язування систем нелінійних рівнянь

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра безпеки інформаційних технологій

Інформація про роботу

Рік:
2007
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Алгоритмічні основи криптології
Група:
ІБ – 42
Коротко про документ

Про що ця робота

У звіті наведено розв'язання систем нелінійних рівнянь модифікованим методом Ньютона. Написано програму мовою C для реалізації ітераційного алгоритму.

У роботі розглядаються

  • Числові методи
  • Нелінійні рівняння
  • Метод Ньютона
  • Програмування мовою C
  • LU-факторизація
  • Криптологія

Зміст і розділи

  1. Мета роботи
  2. Теоретичні відомості
  3. Завдання
  4. Текст програми
  5. Результати виконання програми
  6. Блок-схема алгоритму
  7. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів.
Викладачі:Лагун А.Е.

Ключові поняття

метод Ньютонанелінійні рівнянняякобіанітераціяLU-факторизаціяматрицяпохибкамодифікований методнаближенняпрограма

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НУ ”Львівська політехніка” Звіт про виконання лабораторної роботи №3 з курсу: ”Алгоритмічні основи криптології” на тему: ”Метод Ньютона для розв’язування систем нелінійних рівнянь ” Мета роботи: ознайомлення з найпоширенішим ітераційним методом розвязування систем нелінійних рівнянь- методом Ньютона. Теоретичні відомості Систему нелінійних рівнянь у загальному випадку можна зобразити у вигляді  (1)  тобто як n функцій  від n невідомих  причому функції не обов’язково лінійно залежать від зміних . Позначимо вектор зміних через , а вектор функції через . Тоді систему можна запиати у формі  Модифікований метод Ньютона При використані стандартного методу Ньютона на кожній ітерації доводиться обчислювати новий якобіан , хоч зрозуміло, що при закінчені ітерації він повинен прийняти стабільне значення ,  - розвязок. У модифікованому або спрощеному або спрощеному методі Ньютона якобіан  заміняють правильно підібраною матрицею А. Звичайно, найкращим, але практично недосяжним була б заміна ,  - розвязок. Але на практиці користуються компромісним рішенням: -вибирають за якобіан в початковій точці , а ітерації проводяться за наступною формулою ; -зберігають А протягом певного числа ітерацій; - на певній r-й ітерації змінюють А, прирівнюючи її якобіану  і з новим значенням знову виконують певне число ітерацій і т.д. Отже, якобіан обчислюється тільки час від часу, за рахунок чого досягається економія машиного часу. Однак, збіжність методу при цьому стає практично лінійною. Завдання: Розв’язати систему нелінійних рівнянь модифікованим методом Ньютона, вибираючи за початкові наближення . Ітерації проводити до збігу двох послідовних наближень з похибкою . Обертання матриці здійснити методом LU-факторизації, похідні методом кінцевих різниць.  Текст програми #include <stdio.h> #include <conio.h> #include <math.h> #define n 2 #define e 0.0001 #define h 10e-8 float func(float *a,int i) { if (i==1) return (a[1]-cos(a[2])-1.0); else return (a[2]-sin(a[2])-1.0); } main() { float x[n+1],x1[n+1]; float max, xp,yp; int i,k,f,j,m; float u[n+1][n+1],l[n+1][n+1],Jcob[n+1][n+1]; float Jc[n+1][n+1]; float s1=0, s2=0; float b[n+1],y[n+1]; x[1]=x1[1]=01.0; x[2]=x1[2]=01.0; do { xp=x[1]; yp=x[2]; /*----Metod kincevyh riznyts---*/ for (i=1;i<=n;i++) for (j=1;j<=n;j++) { x1[j]+=h; Jc[i][j]=(func(x1,i)-func(x,i))/h; x1[j]-=h; } /*----------LUrozklad i obern------------------------------*/ for (f=1;f<=n;f++) { for (i=1;i<=n;i++) { if (f==i) b[i]=1; else b[i]=0; } /*Vyznachennia elementiv L ta U*/ for (i=1;i<=n;i++) l[i][1]=Jc[i][1]; for (j=2;j<=n;j++) u[1][j]=Jc[1][j]/Jc[1][1]; k=2; i=k; for(m=1;m<=(k-1);m++) s1+=(l[i][m]*u[m][k]); l[i][k]=Jc[i][k]-s1; s1=0; y[1]=b[1]/l[1][1]; for(i=2;i<=n;i++) { for(m=1;m<=(i-1);m++) s2+=(l[i][m]*y[m]); y[i]=(b[i]-s2)/l[i][i]; s2=0; } x1[n]=y[n]; for(i=n-1;i>=1;i--) { for (m=i+1;m<=n;m++) s2+=u[i][m]*x1[m]; x1[i]=y[i]-s2; s2=0; } //------Pereprysvoennia-- if (f==1) { Jcob[1][1]=x1[1]; Jcob[2][1]=x1[2]; } else { Jcob[1][2]=x1[1]; Jcob[2][2]=x1[2]; } } for (i=1;i<=n;i++) { s1=0; for (j=1;j<=n;j++) { Jcob[i][j]*=func(x,j); s1+=Jcob[i][j]; } if (i==1) x[i]=x1[i]=xp-s1; else x[i]=x1[i]=yp-s1; } max=fabs((x[1]-xp)/xp); for(i=2;i<=n;i++) if (fabs((x[i]-yp)/yp)>max) max=fabs((x[i]-yp)/yp); } while (max>e); printf("Rozvjazok i perevirka\n"); for (i=1;i<=n;i++) { printf(" x[%d]=%2.6f\n",i,x[i]); printf("f[%d]=%2.6f\n",i,func(x,i)); } return 0; } Результати виконання програми: x[1]=-0.188679 f[1]=-0.000000 x[2]=0.660377 f[2]=-0.000000 Блок – схема алгоритму роботи програми Висновок: виконавши дану лабораторну роботу, ми навчились використовувати модифікований метод Ньютона. Розв’язання систем нелінійних алгебраїчних рівнянь методом Ньютона можна досить легко реалізувати на ЕОМ за допомогою програми в середовищі Сі. Основна перевага модифікованого методу Ньютона полягає в тому, що при використанні цього методу якобіан замінюють правильно підібраною матрицею, яку зберігають сталою протягом деякого числа ітерацій, а потім на певній ітерації її заново обчислюють і присвоюють знайдене значення якобіану. Це дозволяє значно зекономити машинний час виконання програми. Розв’язання таких систем на ЕОМ є дуже актуальним, оскільки цей процес є набагато легшим та короткотривалішим ніж розв’язання систем нелінійних рівнянь вручну.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!