Лістинг 6.6. Файл-функція для підрахунок шматково-заданої функції 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лістинг 6.6. Файл-функція для підрахунок шматково-заданої функції



function f=pwf(x)

if x<-1

f=1-exp(-1-x);

elseif x<=2

f=x^2-x-2;

else

f=2-x;

end

Хід роботи програми може визначатися значенням деякої змінної (перемикача). Такий альтернативний спосіб галуження програми заснований на використанні оператора перемикання switch. Змінна-перемикач поміщається після switch через пропуск. Оператор switch містить блоки, що починаються із слова case, після кожного case записується через пропуск те значення перемикача, при якому виконується даний блок. Останній блок починається із слова otherwise, його оператори працюють у тому випадку, коли жоден з блоків case не був виконаний. Якщо хоча би один з блоків case виконаний, то відбувається вихід із оператора switсh і перехід до оператора, наступного за end.

Припустимо, що потрібно знайти кількість одиниць і мінус одиниць в заданому масиві і, крім того, знайти суму всіх елементів, відмінних від одиниці і мінус одиниці. Слід перебрати всі елементи масиву в циклі, причому в ролі змінної-перемикача буде виступає поточний елемент масиву. Лістинг 6.7 містить файл-функцію, яка по заданому масиву повертає число мінус одиниць в першому вихідному аргументі, число одиниць — в другому, а суму — в третьому.

Лістинг 6.7. Файл-функція mpsum

function [m,p,s]=mpsum(x)

m=0;

p=0;

s=0;

for i=1:length(x)

switch x(i)

case -1

m=m+1;

case 1

p=p+1;

otherwise

s=s+x(i);

end

end

Блок case може бути виконаний не лише при одному певному значенні перемикача, але і у тому випадку, коли перемикач приймає одне з декількох допустимих значень. В цьому випадку значення вказуються після слова case у фігурних дужках через кому, наприклад: case{1,2,3}.

Дострокове завершення циклу while або for здійснюється за допомогою оператора break. Нехай, наприклад, потрібно по заданому масиву x утворити новий масив за правилом y(k)=x(k+1)/x(k) до першого нульового елементу x(k), тобто до тих пір, поки має сенс операція ділення. Номер першого нульового елементу в масиві x заздалегідь невідомий, більш того, в масиві x може і не бути нулів. Рішення задачі полягає в послідовному обчисленні елементів масиву y і припиненні обчислень при виявленні нульового елементу в x. Файл-функція, приведена на лістингу 6.8, демонструє роботу оператора break.

Лістинг 6.8. Використання оператора break для виходу із циклу

function y=div(x)

for k=1:length(x)-1

if x(k)==0

break

end

Y(k)=x(k+1)/x(k);

end

Завдання для самостійної роботи

1. Написати файл-функцію для підрахунків шматково-заданої функції. Написати файл-функцію для вирішення поставленого завдання.

Варіанти

1. Обчислити твір елементів вектора, що не перевершують середнє арифметичне значення його елементів.

2. Підрахувати число нулів і одиниць в заданій матриці.

3. Визначити кількість позитивних елементів вектора, розташованих між його максимальним і мінімальним елементами.

4. Підсумувати негативні елементи матриці, лежачі нижче за головну діагональ.

5. Замінити позитивні елементи вектора сумою всіх його негативних елементів.

6. Заповнити квадратну матрицю A, кожен елемент якої визначається таким чином:

7. Вичислити суму:

8. Для матриці розміру n на m знайти значення виразу

9. По заданому x знайти максимальне значення n, для якого наступна сума не перевершує 100:

10.Обчислити суму

із заданою точністю . Підсумовувати слід поки модуль відношення поточного доданку до вже накопиченої частини суми перевершує . Порівняти результат з точним значенням, побудувавши графіки ex і s(x) для

11.Задані кола, координати їх центрів містяться в масивах x і y, а радіуси в масиві r. Відомі координати деякої точки. Потрібно вивести графік, на якому маркером відмічено положення крапки, синім кольором зображені ті кола, усередині яких лежить крапка, а решта кіл намальована червоним кольором.

Робота з рядками

Основним типом даних в MatLab є масив, пригадаєте, що навіть числа представляються масивами розміру один на один. Елементи масиву не обов'язково повинні бути числами. Якщо елементи масиву є символами, то такий масив називається масивом символів, або рядком. Змінні, що містять рядки, називатимемо рядковими змінними. Для обмеження рядка використовуються апострофи, наприклад, оператор привласнення

>> str='Hello, World!'

приводить до утворення рядкової змінної

str =

Hello, World!

Переконаєтеся, що рядкова змінна str дійсно являється масивом, звернувшись до її елементів: str(8), str(1:5). Команда whos дозволяє отримати докладну інформацію про str, зокрема, str зберігається у вигляді вектор-рядки, її довжина рівна 13. Оскільки рядкові змінні являється масивами, то до них застосовні деякі функції і операції, розглянуті нами раніше. Довжина рядкової змінної, тобто число символів в ній, знаходиться за допомогою функції length. Допустиме зчеплення рядків як вектор-рядків з використанням квадратних дужок. Створіть ще одну рядкову змінну str1, що містить текст ' My name is Igor.', і здійсните зчеплення:

>> strnew=[str str1]

strnew =

Hello, World! My name is Igor.

Звернете увагу, що для розділення злитих рядків в квадратних дужках слід використовувати пропуск (або кому). Вживання крапки з комою приведе до помилки, оскільки крапка з комою служить для утворення вектора-стовпців або відділення рядків матриць. Але в матриці всі рядки повинні бути однакової довжини, а змінні str і str1 складаються з різного числа символів. Далі розглянемо, як створювати двовимірні масиви символів (масиви рядків), а поки звернемося до найбільш важливих функцій MatLab, призначених для обробки рядків.

Зчеплення рядків може бути проведене як з використанням квадратних дужок, так і за допомогою функції strcat. Вхідними аргументами strcat є злиті рядки, їх число необмежене, а результат повертається у вихідному аргументі. Функція strcat ігнорує пропуски в кінці кожного рядка. Для рядків: s1='abc ' і s2='def' зчеплення s=[s1 s2] і s=strcat(s1,s2) приведуть до різних результатів.

Пошук позицій входження під-рядка в рядок проводиться за допомогою функції findstr. Її вхідними аргументами є рядок і під-рядок, а вихідним вектор позицій, починаючи з яких під-рядок входить в рядок, наприклад:

>> s='abcbcddefbcc';

>> s1='bc';

>> p=findstr(s,s1)

p =

2 4 10

Порядок вхідних аргументів не важливий, під-рядком завжди вважається аргумент меншого розміру.

Функція strcmp призначена для порівняння двох рядків, які указуються у вхідних аргументах: strcmp(s1,s2). Результатом є логічна одиниця або нуль. Функція strncmp порівнює лише частину рядків від першого символу до символу, номер якого вказаний в третьому вхідному аргументі: strncmp(s1,s2,8). Дані функції мають аналоги: strcmpi і strncmpi, які проводять порівняння без урахування регістра, тобто, наприклад, символи 'A' і 'a' вважаються однаковими.

Для заміни в рядку одного під-рядка на іншу служить функція strrep. Нехай, наприклад, потрібно замінити в рядку str під-рядок s1 на s2 і записати оновлений рядок в strnew. Тоді виклик функції strrep повинен виглядати так: strnew=strrep(str,s1,s2). Тут важливий порядок аргументів.

Перетворення всіх букв рядка в рядкові (прописні) проводить функція lower (upper), наприклад: lower('MatLab') приводить до 'matlab', а upper('MatLab') до 'MATLAB'.

Те, що рядки є масивами символів, дозволяє легко писати власні файл-функції обробки рядків. Припустимо, що потрібно переставити символи в рядку в зворотному порядку. Файл-функція, приведена на лістингу 7.1, вирішує поставлену задачу.



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 283; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.201.64.238 (0.073 с.)