Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TORMONMMS-Ivanov_II (1).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
493.06 Кб
Скачать

4 Моделирование нелинейных систем

4.1 Найти корни полиномов:

.

Решение: Определение полиномов в Scilab осуществляет функция:

poly(a, "x ["fl"]),

где a – это число или матрица чисел,

x – символьная переменная,

fl – необязательная символьная переменная, определяющая способ задания полинома. Символьная переменная fl может принимать только два значения – «roots» или «coeff» (соответственно «r» или «c»). Если fl=c, то будет сформирован полином с коэффициентами, хранящимися в параметре a. Если же fl=r, то значения.

Функция roots(p) предназначена для решения алгебраического уравнения. Здесь p – это полином, созданный функцией poly и представляющий собой левую часть уравнения P (x) = 0.

Первое уравнение:

-->V= [-5 0 -3 0 2];

-->p = poly (V, ‘x’, ‘c’);

-->p = -5-3x2+2x4;

-->X = roots (p);

X = -1,5811388

= 1,5811388

= -5,551D-17+i

= -5,551D-17-i

Второе уравнение:

-->X = roots(poly[-7,4 5,4 0,52 2], ‘x’, ‘c’);

X = -0,3944527+1,8362718i

= -0,3944527-1,8362718i

= 1,0489053.

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

Решение:

Если заданы m уравнений с n неизвестными и требуется найти последовательность из n чисел, которые одновременно удовлетворяют каждому из m уравнений, то говорят о системе уравнений. Для решения систем уравнений в Scilab также применяют функцию fsolve(x0,f).

-->x=-%pi/2:0.1: %pi/2;

-->y=sqrt((1-0.9*(x^2))/2);

-->y(1)=(atan(x^2)-0.3)/x;

-->plot2d(x,y,style=[color("red")]);

-->xgrid()

-->plot(x,y(1),style=[color("blue")]);

--> function [y]=fun(x)

-->y=sqrt((1-0.9*(x^2))/2);

-->y(1)=(atan(x^2)-0.3)/x;

endfunction

-->exec(’D:\scilab 3\fun’);disp(’exec done’); exec done

-->fsolve([-1 1 1],fun)//решение системы

ans = ! 0.2236068 0.2236068 0.4853982 !

Рисунок 4.1 Решение системы уравнений

5 Обработка экспериментальных данных

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

U

0

1

1.5

2

2.5

3

3.5

4

4.5

5

V

12

10.1

11.58

17.4

30.68

53.6

87.78

136.9

202.4

287

Решение:

Метод наименьших квадратов позволяет по экспериментальным данным подобрать такую аналитическую функцию, которая проходит настолько близко к экспериментальным точкам, насколько это возможно. Задача сводится к определению коэффициентов ai из условия. Для реализации этой задачи в Scilab предусмотрена функция:

[a,S]=datafit(F,z,с)

где F – функция, параметры которой необходимо подобрать;

z – матрица исходных данных;

c – вектор начальных приближений;

a – вектор коэффициентов;

S – сумма квадратов отклонений измеренных значений от расчетных.

//Функция, вычисляющая разность между экспериментальными

//и теоретическими значениями.

//Перед использованием необходимо определить

//z=[x;y] - матрицу исходных данных - и

//с - вектор начальных значений коэффициентов,

//размерность вектора должна совпадать

//с количеством искомых коэффициентов.

-->function[zr]=F(c,z)

-->zr=1/(z(2)-c(1)-c(2)*z(1));

-->endfunction

//Исходные данные

-->u=[0 1 1.5 2 2.5 3 3.5 4 4.5 5];

-->v=[12 10.1 11.58 17.4 30.68 53.6 87.78 136.9 202.5 287];

//Формирование матрицы исходных данных

-->z=[u,v];

//Вектор начальных приближений

-->c=[0,0];

//Решение задачи

-->[a,S]=datafit(F,z,c);

S = 3.936D-19

a =

10^9 *

- 2.9534336

- 1.0693236

Для расчета коэффициентов регрессии в Scilab предназначена функция:

a=regress(x,y)

где x и y — экспериментальные данные, a — вектор коэффициентов линии регрессии a1 и a2.

-->a= regress(u, v)

a =

- 56.134675

52.255065

Коэффициент корреляции:

-->r=sum((u-mean(u)).*(v-mean(v)))/sqrt(sum((u-mean(u))^2)*sum((v-mean(v))^2))

r = 0.8762687

Индекс корреляции:

-->R=sqrt(1-sum((v-(a(1)+a(2)*u))^2)/sum((v-mean(v))^2))

R = 0.8762687

Построение графика экспериментальных данных и линии регрессии:

t=0:7; Yt=a(1)+a(2)*t;

plot2d(u,v,-5); plot2d(t,Yt)

Рисунок 5.1 График экспериментальных данных и линия регрессии

5.2 Найти приближенное значение функции при заданном значении аргумента с помощью функции линейной интерполяции.

x1=0.314 x2=0.235 x3=0.186

x

0.11

0.15

0.21

0.29

0.35

0.40

y

9.05421

6.61659

4.69170

3.35106

2.73951

2.36522

Решение:

В Scilab для построения линейной интерполяции служит функция:

y=interpln(z,x)

где z — матрица исходных драных; x — вектор абсцисс; y — вектор значений линейного сплайна в точка x.

-->x= [0.11 0.15 0.21 0.29 0.35 0.40];

-->y= [9.05421 6.61659 4.69170 3.35106 2.73951 2.36522];

-->plot2d (x, y, -4);

-->koeff= splin(x, y);

-->X=[0.314 0.235 0.186];

//Значение функции в заданных точках

-->Y=interp (X, x, y, koeff)

Y = 3.0780427 4.1822309 5.2957873

-->plot2d (X, Y, -3) //Нанесение точек на график

//Построение кубического сплайна

-->t=0.11:0.01:0.40;

-->ptd=interp(t, x, y, koeff);

-->plot2d(t, ptd)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]