Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Steffensen(n, eps, count, x, y);




9. вывести на экран терминала (в текстовый файл) вектор решения x[n] и вектор невязок y[n].

Пример: решить систему уравнений

3x12 + 1,5x22 - x32 - 5 = 0;

6x1x2x3 - x1 + 5x2 + 3x3 = 0;

5x1x3 - x2x3 - 1 = 0;

В этом случае n=3, eps=1.0e-6, count=20.

Начальные приближения неизвестных:

x1=0.1, x2=0.2, x3=0.3

Система уравнений описывается в функции:

void pr_chasti(int n, float x[n], float b[n])

// описание правых частей системы уравнений в виде

// b[i]=b(x[j]); i,j=0…n-1,

{

b[0]=3.0*x[0]*x[0]+1.5*x[1]*x[1]+x[2]*x[2]-5.0;

b[1]=6.0*x[0]*x[1]*x[2]-x[0]+5.0*x[1]+3.0*x[2];

b[2]=5.0*x[0]*x[2]-x[1]*x[2]-1.0;

}

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

int Steffensen(int n, float eps, int count, float x[n], float y[n]);

int main(int argc, char **argv)

{

int n; // количество неизвестных

int count; // заданное количество итераций

float eps; // заданная погрешность вычислений

int i,j; // рабочие переменные

printf("\n kolichestvo neizvestnyh n=");

scanf("%d", &n);

float x[n]; // вектор решения системы уравнений

float y[n]; // вектор невязок

printf("\n vektor nachalnyh priblisheniy:\n");

for (i=0; i<n; i++)

scanf("%f", &x[i]);

printf("\n pogreshn. vychisl. eps=");

scanf("%g", &eps);

printf("\n max kolich. iteraciy count=");

scanf("%d", &count);

Steffensen(n, eps, count, x, y);

printf("\n Reshenie sistemy uravn.:\n");

for (i=0; i<n; i++)

printf("%12.6f", x[i]);

printf("\n");

printf("\n Vektor nevjazok:\n");

for (i=0; i<n; i++)

printf("%e ", y[i]);

printf("\n");

Return 0;

}

Результат работы программы:

Таким образом,

x1=1.2845 x2=0.1298 x3=0.1589

Решение избыточной системы нелинейных и трансцендентных уравнений
обобщенным методом Ньютона

В головной программе необходимо:

1. описать прототип функции решения системы уравнений:

int Newton(int n, int m, int *iter, float eps, float x[n], float y[m], float *s0);

2. ввести значение переменной n – количество неизвестных,

3. ввести значение переменной m (m>=n) – количество уравнений,

4. ввести значение переменной eps – погрешность вычислений,

5. ввести значение переменной count – заданное количество итераций,

6. описать массивы:

float x[n]; // вектор решения системы уравнений

float y[n]; // вектор невязок

7. описать систему уравнений в функции:

void pr_chasti(int n, float x[n], float b[n])

в виде b[i]=b(x[j]); i,j=0…n-1,

8. ввести массив x[n] – вектор начальных приближений неизвестных,

9. обратиться к программе решения системы уравнений:

Newton(n, m, &iter, eps, x, y, &s0);

10. вывести на экран терминала (в текстовый файл) вектор решения x[n], вектор невязок y[n], количество выполненных итераций iter и среднеквадратическую невязку s0.

Пример: решить систему уравнений

x12 + x22 - x3 - 0,5 = 0;

0,75x13 - x2 + x32 + 0,65 = 0;

x1x33 + 0,25 = 0;

В этом случае n=3, eps=1.0e-6, count=20.

Начальные приближения неизвестных:

x1=0.1, x2=0.1, x3=0.1

Система уравнений описывается в функции:

void pr_chasti(int n, float x[n], float b[n])

// описание правых частей системы уравнений в виде

// b[i]=b(x[j]); i,j=0…n-1,

{

b[0]=x[0]*x[0]+x[1]*x[1]-x[2]-0.5;

b[1]=0.75*x[0]*x[0]*x[0]-x[1]+x[2]*x[2]+0.65;

b[2]=x[0]*x[2]*x[2]*x[2]+0.25;

}

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

int Newton(int n, int m, int *iter, float eps, float x[n], float y[m], float *s0);

int main(int argc, char **argv)

{

int n; // количество неизвестных

int m; // количество уравнений (m>=n)

int iter; // заданное количество итераций

float eps; // заданная погрешность вычислений

float s0; // среднеквадратическая невязка

int i; // рабочая переменная

printf("\n Kol-vo neizvestn. n=");

scanf("%d", &n);

printf("\n Kol-vo uravnen. (m>=n) m=");

scanf("%d", &m);

float x[n]; // вектор оценок неизвестных

float y[m]; // вектор невязок

printf("\n Kol-vo iteracij iter=");

scanf("%d", &iter);

printf("\n Pogreshn. vychislenij eps=");

scanf("%e", &eps);

printf("\n vvedite vektor nachaln. priblishenij (%d znachenij):\n", n);

for (i=0; i<n; i++)

scanf("%f", &x[i]);

printf("\n");

Newton(n, m, &iter, eps, x, y, &s0);

printf("\nKol-vo iteracij: %d\n", iter);

printf("\n Ocenki neizvestnyh:\n");

for (i=0; i<n; i++)

printf("%10.5f", x[i]);

printf("\n");

printf("\n Vector nevjazok:\n");

for (i=0; i<m; i++)

printf("%e ", y[i]);

printf("\n");

printf("\nSrednekv. nevjazka: %e\n", s0);

return 0; }

Результат работы программы:

Таким образом,

x1=-1.042 x2=0.1867 x3=0.6213

Вычисление комплексных корней алгебраического уравнения

методом Ньютона-Рафсона

В головной программе необходимо:

1. описать прототип функции вычисления корней:

int Newton_Rafson(int n, float q[n+1], float p[2][n]);

2. ввести значение переменной n – степень уравнения,

3. описать массивы:

float q[n+1]; // вектор коэффициентов исходного уравнения

// по возрастанию степеней

float p[2][n]; // массив корней уравнения:

// первая строка – действительные части,

// вторая строка – мнимые части,

4. ввести массив q[n+1] – вектор коэффициентов исходного уравнения,

5. обратиться к программе вычисления корней:

Newton_Rafson(n, q, p);

6. вывести на экран терминала (в текстовый файл) массив корней уравнения

Пример: определить корни алгебраического уравнения

x3 – 3x2 + 4x – 12 = 0

В этом случае n=3, вектор коэффициентов уравнения:

q[4]=(-12, 4, -3, 1).

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

int Newton_Rafson(int n, float q[n+1], float p[2][n]);

int main(int argc, char **argv)

{

int n; // степень уравнения

int i; // рабочая переменная

char c; // рабочая переменная

printf("\n stepeny uravnenia n=");

scanf("%d", &n);

float q[n+1]; // вектор коэффициентов исходного уравнения // по возрастанию степеней

float p[2][n]; // массив корней уравнения

printf("\n vektor koefficientov:\n");

for (i=0; i<n+1; i++)

scanf("%f", &q[i]);

Newton_Rafson(n, q, p);

printf("\n Korni uravnenija");

printf("\n Dejstvit. chasti Mnimye chasti \n");

for (i=0; i<n; i++)

printf(" %12.6f %12.6f\n", p[0][i], p[1][i]);

printf("\n");

c=getch();

Return 0;

}

Результат работы программы:

Таким образом,

x1=3.0 x2,3=0.0 ± j 2.0

 

Вычисление комплексных корней алгебраического уравнения

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

В головной программе необходимо:

1. описать прототип функции вычисления корней:

int Bairstow(int n, float q[n+1], float p[2][n]);

2. ввести значение переменной n – степень уравнения,

3. описать массивы:

float q[n+1]; // вектор коэффициентов исходного уравнения

// по возрастанию степеней

float p[2][n]; // массив корней уравнения:

// первая строка – действительные части,

// вторая строка – мнимые части,

4. ввести массив q[n+1] – вектор коэффициентов исходного уравнения,

5. обратиться к программе вычисления корней:

Bairstow(n, q, p);

6. вывести на экран терминала (в текстовый файл) массив корней уравнения

Пример: определить корни алгебраического уравнения

2x3 + 3x2 + 3x + 1 = 0

В этом случае n=3, вектор коэффициентов уравнения:

q[4]=(1, 3, 3, 2).

Головная программа:

#include <stdio.h>

#include <math.h>

#include <conio.h>

int Bairstow(int n, float q[n+1], float p[2][n]);

int main(int argc, char **argv)

{

int n; // степень уравнения

int i; // рабочая переменная

char c; // рабочая переменная

printf("\n stepeny uravnenia n=");

scanf("%d", &n);

float q[n+1]; // вектор коэффициентов исходного

// уравнения по возрастанию степеней

float p[2][n]; // массив корней уравнения:

// первая строка - действит. части,

// вторая – мнимыечасти

printf("\n vektor koefficientov:\n");

for (i=0; i<n+1; i++)

scanf("%f", &q[i]);

Bairstow(n, q, p);

printf("\n Korni uravnenija");

printf("\n Dejstvit. chasti Mnimye chasti \n");

for (i=0; i<n; i++)

printf(" %12.6f %12.6f\n", p[0][i], p[1][i]);

printf("\n");

c=getch();

return 0; }

Результат работы программы:

Таким образом,

x1=-2.0 x2,3=-0.5 ± j 0.866

Вычисление коэффициентов интерполяционного полинома Лагранжа

В головной программе необходимо:

1. описать прототип функции:

void interpol_Lagrang(int n, float x[n], float y[n], float q[n]);

2. ввести значение переменной n – количество узлов интерполяции,

3. описать массивы:

float x[n], y[n]; // значения аргумента и функции

// в узлах интерполяции

float q[n]; // вектор коэффициентов

// интерполяционного полинома Лагранжа

// по возрастающим степеням

4. ввести массивы x [n], y[n],

5. обратиться к программе вычислений:





Поделиться с друзьями:


Дата добавления: 2017-03-11; Мы поможем в написании ваших работ!; просмотров: 364 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Чтобы получился студенческий борщ, его нужно варить также как и домашний, только без мяса и развести водой 1:10 © Неизвестно
==> читать все изречения...

2431 - | 2320 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.