
- •Занятия по matlab в компьютерном классе Темы занятий
- •Тема 1. Общие сведения о matlab'е
- •Тема 2. Переменные
- •Упражнения
- •Тема 3. Элементы xy-графики
- •Тема 4. Простые примеры, иллюстрирующие эффективность matlab'а
- •4;Plot(f)
- •3;Sum(isinf(kf))
- •Тема 5. Графический способ решения уравнений
- •2;Ginput
- •Упражнения
- •Тема 6. Полиномы
- •7;Plot(r), grid
- •9;Plot(r,'.'), grid
- •Упражнение
- •Тема 7. Итерации
- •5;Imag(xt')
- •6;Sum(isnan(xt))
- •7;Find(isnan(xt))
- •Упражнение
- •Упражнение
- •9;Find(isnan(z))'
- •Тема 8. Системы линейных алгебраических уравнений
- •2;Mesh(a) plot(a(1,:)) plot(a(20,:)) plot(a(41,:))
- •3;Plot(ut) plot(f) plot([ut,u])
- •4;Plot([u/max(abs(u)),f/max(abs(f))])
- •5;Plot(f)
- •Литература
5;Plot(f)
возмущений просто не видно (масштаб f забил их), а в U они отразились слишком сильно. Но формально он не противоречит оценке, связанной с числом обусловленности c(A). Действительно, без учета профиля df максимальная ошибка me вычисляется как
6;sp=eig(A); me=min(abs(sp))^(-1)*max(g)
и равна 0.6064, тогда как
7;max([ua-ut;ut-ui]) (=0.5180)
и лишь немного подрастет с увеличением n (при n=100 это 0.5540), т.е. не превзойдет значения me, что и свидетельствует о формальной согласованности обоих методов оценки погрешности. Чтобы окончательно избавиться от ощущения какой-то несогласованности наших методов, применим критерий cond(A) для среднеквадратичной нормы. Для этогог нам нужно пройтись по всем столбцам k=1:n (сейчас n=30) матриц U и F и вычислить
max( (norm(du)/norm(u)) / (norm(df)/norm(f)) ) .
Запишем это в виде (максимально используйте карман при наборе строк)
8;max((sum((U-ut(V)).^2).^.5./sum(U.^2).^.5)./(sum((F-f(V)).^2).^.5./sum(F.^2).^.5))
и получим 3.6484e+3, что меньше c(A)=6.6040e+3, так что и здесь мы не обнаружили противоречия.
Если подойти к оценке погрешности упрощенно, построив график
9;gm=max(g); plot(A\[f-gm,f,f+gm])
то все три линии на нем практически совпадут. Таким способом можно моделировать ошибку, если преобразование A-1 монотонно, т.е. если при f1<f2 обязательно u1<u2 или, наоборот, обязательно u1>u2. Но у нас это не так: на графике (эта строка получается из строки 9)
10;gm=100*max(g);plot(A\[f-gm,f,f+gm])
желтая линия (она соответствует решению для правой части f-gm<f) то выше, то ниже фиолетовой. Именно из-за немонотонности преобразования A-1 получается такой заметный разброс в U. С помощью этого приема можно быстро выяснить монотонность преобразования y=Q(x) (не обязательно линейного), что далеко не всегда удается определить теоретически: если все отклики Y=Q(X), x-a<X<x+a, a>0, лежат между Q(x-a) и Q(x+a), то преобразование Q монотонно, и нужно лишь взять значение a таким, чтобы результат был виден на графике (для этого нам пришлось увеличить max(g) в 100 раз).
6.Посмотрим, как изменятся результаты нашего примера при увеличении m - порядка матрицы A. Выполним, не меняя смысла задачи, отредактированную строку 1 предыдущего примера
1;clear all, hx=.01; x=1:hx:5; A=toeplitz(exp(x)); ut=sin(x)'; f=A*ut;u=A\f; plot([ut,u]), c=cond(A)
Здесь шаг hx уменьшен в 10 раз, так что теперь порядок m=401 – довольно высокий; c(A)= 6.0804e5 возросло почти в 100 раз, т.е. обусловленность A заметно ухудшилась (примерно в 102 раз), но
2;max(abs(u-ut)) (=1.3153e-9)
еще достаточно мал, хотя и возрос примерно в 103 раз, т.е. больше, чем c(A). Такое расхождение с теорией как бы предупреждает о том, что даже при сохранении смысла задачи увеличение ее размерности не позволяет автоматически применять критерий числа обусловленности к оценке ошибок округления. К выбору числа m нужно всегда относиться с повышенным вниманием.
Чтобы получить представление о собственных векторах преобразования A, выполним строку
3;[V,D]=eig(A); D=V'*V; m=length(x); D(1:m+1:m^2)=0; mcv=max(abs(D(:)))
и получим mcv=2.2985e-15, т.е. степень ортогональности остается удивительно высокой. Жордановы клетки порядка выше первого могут быть тогда, когда mcv(A)>0.99.
Мы рассмотрели этот пример так подробно, чтобы показать исключительно высокие возможности MATLAB'а в том, что касается анализа результатов.