Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
Norwall
172 / 138 / 50
Регистрация: 07.02.2014
Сообщений: 436
#1

Как упростить цикл? - Matlab

23.09.2015, 13:47. Просмотров 198. Ответов 4
Метки нет (Все метки)

Добрый день!

Есть вот такой код:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Lx = 10; Ly = 10;
hx = 0.10; hy = 0.10;
Nx = Lx/hx; Ny = Ly/hy;
Tbf = 0; lamda_fld = 1.35; lamda_sld = 2.25;
C_fld = 3325e03; C_sld = 2500e03;
T = zeros(Nx,Ny);
lamda = ones(Nx,Ny)*lamda_sld;
C = ones(Nx,Ny)*C_sld;
 
    for i = 1:Nx
        for j = 1:Ny
            
            if T(i,j) < Tbf
                lamda(i,j) = lamda_sld;
                C(i,j) = C_sld;
            else
                lamda(i,j) = lamda_fld;
                C(i,j) = C_fld;
            end
            
        end
    end
Возможно ли его как-то упростить, чтобы не нужно было делать так много операций?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2015, 13:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как упростить цикл? (Matlab):

Как упростить выражение
Упростить выражение c помощью функций Factor Simplify Simple Solve

Как сделать цикл?
Есть у меня формулки, которые нужно пересчитать 3000 раз. Для каждой формулы...

Как векторизовать этот цикл?
Всем привет. Есть проблема с векторизацией одного цикла в программке,...

Как составить правильный цикл
Друзья! Помогите, пожалуйста. В звуковом файле производится дискретизация...

Как создать цикл бинаризации изображений
Всем привет. Задача состоит в следующем: загрузить все изображения из...

Цикл: Организовать цикл расчёта текущего члена ряда и текущей суммы ряда, используя их предыдущие значения.
Ввести переменную X с клавиатуры, задать начальные значения для члена ряда,...

4
kRosis
186 / 191 / 43
Регистрация: 13.05.2013
Сообщений: 705
23.09.2015, 16:14 #2
Лучший ответ Сообщение было отмечено Norwall как решение

Решение

Как-то так
Matlab M
1
2
3
4
lamda(T<Tbf) = lamda_sld;
C(T<Tbf) = C_sld;
lamda(T>Tbf) = lamda_fld;
C(T>Tbf) = C_fld;
1
Norwall
172 / 138 / 50
Регистрация: 07.02.2014
Сообщений: 436
24.09.2015, 09:14  [ТС] #3
kRosis, Спасибо!
0
Norwall
172 / 138 / 50
Регистрация: 07.02.2014
Сообщений: 436
28.09.2015, 13:11  [ТС] #4
Добрый день!
А если у меня вот такой цикл, как его упростить по схеме, приведенной выше? Или как-то еще...

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Lx = 10; Ly = 10;
hx = 0.10; hy = 0.10; Lq = 95e06;
Nx = Lx/hx; Ny = Ly/hy;
Tbf = 0; T0 = -2.50;
lamda_fld = 1.35; lamda_sld = 2.25;
C_fld = 3325e03; C_sld = 2500e03;
H0 = C_sld*(T0-Tbf);
T = zeros(Nx,Ny);
lamda = ones(Nx,Ny)*lamda_sld;
C = ones(Nx,Ny)*C_sld;
H = ones(Nx,Ny)*H0;
 
    for i = 1:Nx
        for j = 1:Ny
            
            if H(i,j) < 0
                T(i,j) = Tbf + H(i,j)/C(i,j);
            elseif H(i,j) >= 0 && H(i,j) <= Lq
                T(i,j) = Tbf;
            else
                T(i,j) = Tbf + (H(i,j)-Lq)/C(i,j);
            end
            
        end
    end
0
Centurio
Модератор
713 / 642 / 184
Регистрация: 13.09.2015
Сообщений: 2,324
28.09.2015, 14:22 #5
Лучший ответ Сообщение было отмечено Norwall как решение

Решение

Цикл со строки 13 можно заменить одной строкой:
Matlab M
1
T=(Tbf+H./C).*(H<0)+Tbf*(H>=0&H<=Lq)+(Tbf+(H-Lq)./C).*(H>Lq)
В связи с этим матрицу Т создавать заранее (строка 8) нет необходимости.

Могу предложить ещё один вариант
Matlab M
1
T=(Tbf+(H-Lq*(H>Lq))./C).*(H<0|H>Lq)+Tbf*(H>=0&H<=Lq)
1
28.09.2015, 14:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2015, 14:22
Привет! Вот еще темы с решениями:

Как, используя цикл, создать систему уравнений
нужно создать систему уравнений. Система очень большая, поэтому от руки можно...

Как сделать цикл с использованием памяти программы
Здравствуйте, не подскажите как сделать цикл с использованием памяти программы?...

Как создать цикл при обработке изображения
Мне нужно сделать цикл, который бы проходился по всем пикселям изображения и...

Упростить код
Доброго времени суток! Есть 4 скрипта на матлабе 1)x=input('x=...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru