Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
численные методы и базы данных.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
20.17 Mб
Скачать

Лабораторная работа 6 Расчет нелинейной электрической цепи методом Ньютона-Рафсона Теоретическое введение

Математическая модель любой электротехнической системы описывается системой дифференциальных уравнений, что будет рассматриваться более подробно в лабораторной работе 7. В данной лабораторной работе мы рассмотрим численной решение дифференциального уравнения методом Ньютона-Рафсона.

Метод Ньютона-Рафсона решения уравнений

Метод Ньютона позволяет решать линейные и нелинейные уравнения вида f(x) = 0. Поиск решений осуществляется последовательным приближением и основан на методе простой итерации.

Для реализации метода Ньютона, необходимо последовательно:

1. Получить первое приближение к искомой переменной x0;

2. Найти значение производной функции f’(x) в точке x0;

3. Найти следующее приближение к искомой переменной по формуле

xi+1 = xi –f(xi)/f’(xi);

4. Проверить относительную точность полученного решения

δi = |xi+1 - xi|/|xi+1|: если δiz (заданная относительная точность), то выйти из программы, так как корень уравнения найден, иначе перейти к шагу 2.

Метод Ньютона решения систем уравнений

Метод Ньютона для решения нелинейных уравнений можно использовать при решении систем нелинейных уравнений вида:

Для решения систем уравнений такого вида необходимо выполнить следующий алгоритм:

1. Задать или рассчитать первое приближение вектора X[0].

2. Найти частные производные функций fi по всем переменным вектора X в точке X[0].

3. Составить и решить следующую систему линейных уравнений относительно вектора X[1]:

где

Данная запись равносильна матричной форме записи системы уравнений, относительно неизвестных – составляющих вектора X[1]:

Или, если упростить процедуру:

1. На основании исходного нелинейного уравнения электрической цепи f(x)=0, где x-искомая переменная, записывается итерационная формула

,  где - m=0;1;2;… - шаг итерации.

2.По полученной формуле проводится итерационный расчет

Задание на лабораторную работу:

По следующему ниже алгоритму написать программу расчета нелинейной цепи методом Ньютона-Рафсона, в соответствии с вариантами из лабораторной работы 4.

Алгоритм программы:

1). создать функцию, реализующую какой-либо алгоритм интерполяции (на основе лабораторной работы № 4). Для этого добавить в программу, разработанную в лабораторной работе 4, еще один столбец «Li(x)», куда выводить промежуточные значения многочлена Лагранжа и добавить в описании перменную.

double lagLx[1000];

StringGrid1->Cells[0][2]="L(x)";

Код изменить соответственно:

for (int j=0; j<n ;j++)

{

if (i!=j) s0=s0*(x-lagx[j])/(lagx[i]-lagx[j]);

//формирование l(x)

}

lagLx[i]=s0;

StringGrid1->Cells[i+1][2]=FloatToStr(lagLx[i]);

s=s+lagfx[i]*s0;//вычисление значения функции

2). Получившиеся значения из строк перенести в Excel, построить точечную диаграмму зависимости L(x) от x, по ней линию тренда и получить уравнение кривой.

3). Находим производную данной функции:

y = 0,9583x4 - 13,454x3 + 59,681x2 - 88,336x + 57,333

y’=3,8332х3-40,35х2+119,362х-88,336

4). Возвращаемся в программу Borland C++ Bielder. В лабораторно работе 4 построена зависимость тока от напряжения, то есть ВАХ, а в данной лабораторной мы исследуем производную от полученной функции. Электротехнический смысл dU/dI это динамическое сопротивление, следовательно, в результате мы получаем дискретные значения дифференциального сопротивления, вычисленные методом Ньютона-Рафсона.

5). Добавляем в таблицу StringGrid1 еще одну строку – R.

StringGrid1->Cells[0][3]="R";

6). Добавляем описание переменной double lagRx[1000];

7). В результате получаем следующий код программы:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

double x,s,s0,x0;

n=StrToInt(Edit1->Text);

x=StrToFloat(Edit2->Text);

//y = 0,9583x4 - 13,454x3 + 59,681x2 - 88,336x + 57,333

//y'=3,8332õ3-40,35õ2+119,362õ-88,336

//x_(m+1)=x_m-f(x_m)/f'(x_m),

s=0;

//считывание значения из таблицы в массив "х" и "f(x)"

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

{

lagx[i]=StrToFloat(StringGrid1->Cells[i+1][0]);

lagfx[i]=StrToFloat(StringGrid1->Cells[i+1][1]);

}

x0=lagfx[0]/lagx[0]; //первое приближение рассчитывемого значения

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

{

s0=1;

for (int j=0; j<n ;j++)

{

if (i!=j) s0=s0*(x-lagx[j])/(lagx[i]-lagx[j]);

//формирование l(x)

}

lagLx[i]=s0;

StringGrid1->Cells[i+1][2]=FloatToStr(lagLx[i]);

s=s+lagfx[i]*s0;//вычисление значения функции

lagRx[i]=abs(x0-(0.9583*x0*x0*x0*x0 - 13.454*x0*x0*x0 + 59.681*x0*x0 - 88.336*x0 + 57.333)/(3.8332*x0*x0*x0-40.35*x0*x0+119.362*x0-88.336));

StringGrid1->Cells[i+1][3]=FloatToStr(lagRx[i]);

x0=lagRx[i];

}

}

Контрольные вопросы:

1. Какие методы решения нелинейных уравнений вы знаете?

2. Расскажите о методе Ньютона.

3. Какие ограничения к применению метода Ньютона вы знаете?

4. К какому классу электротехнических задач применяется метод Ньютона?

5. Применение метода Ньютона к решению системы нелинейных уравнений.