Реферат: Matlab
abs (взятие модуля),
sign (взятие знака, выдающее 1, 0 и -1).
3. Логические задачи. Обычно при освоении программирования логические действия даются труднее арифметических. Приведем здесь два простых примера задач логического характера.
1. Напишем строку для нахождения общих элементов двух векторов:
x=1:20; y=15:30; [X,Y]=meshgrid(x,y); v=X(X==Y)
2. Второй пример несколько сложнее, и начинающие изучать MATLAB обычно пытаются решить его с помощью циклов for-end, что совершенно неправильно. Взяв на сторонах единичного квадрата по 200 интервалов, определим, сколько точек получившейся таким образом сетки попадает внутрь вписанной в него окружности. Нужнаяпрограммаимеетвид
1;tic, x=0:1/200:1; [X,Y]=meshgrid(x); M=abs(X+i*Y-.5-i*.5)<1/2; s=sum(M(:)), t1=toc
и даст ответ s=31397 точек, t1=0.16 сек, тогда как строка для циклов for-end
2;tic, s=0;w=1:201; for I=w,for J=w,if norm([x(I),x(J)]-.5)<.5,s=s+1; end,end,end, s ,t2=toc
дает то же самое s и t2=7.47 сек, так что t2/t1=46. Это лишний раз говорит о том, что нужно разумно подходить к использованию операторов языка программирования.
4. Графический способ решения уравнений
1. Простой пример: найти корни уравнения x*sin(x^2)=0 на отрезке [0,3]. Программа:
1; x =0:.01:3; f = x .* sin ( x .^2); plot ( x ,[ f ;0* f ] ), grid
2;ginput
В команде ginput точка снимается нажатием левой клавиши мыши, Enter – выход из ginput.
Проверим это другим способом:
3; nx = length ( x ); w =1: nx -1; x ( find ( f ( w ).* f ( w +1)<0| f ( w )==0)) Отв: 0, 1.77, 2.5.
Эту строку можно упростить:
4; nx = length ( x ); w =1: nx -1; x ( f ( w ).* f ( w +1)<0| f ( w )==0)
Матрицы и векторы с элементами 0-1.
2. Сложный пример – неявные функции. Построим график неявной функции f(x,y)ºx3 y-2xy2 +y-0.2=0, x,y=[0, 1]. Это выполнит программа
1; h =.02; x =0: h :1; [ X , Y ]= meshgrid ( x ); f = X .^3.* Y -2* X .* Y .^2+ Y -.2;
2;v=[0,0]; contour(x,x,f,v), grid
На графике зеленая линия (справа она двузначная) представляет искомый результат. Область в первом квадранте между этими кривыми обозначим через G. Эту задачу совсем непросто сделать в других системах программирования прежде всего потому, что вычисление образующих линии уровней точек – в общем случае очень сложная процедура.
Выясним, какой знак имеет f в области G, для чего выполним
3; mesh ( x , x , f .*( f >0))
Это пример трехмерной, т.е. xyz-графики. В ней цвет используется для изображения амплитуды (значения z),
изменяясь с ростом z от темносинего через голубой, зеленый и желтый до темнокрасного.
Вычислим площадь S этой области: