在MATLAB中,在一个从1到N的循环计算中找出最小值
时间: 2024-06-04 19:12:00 浏览: 15
可以使用min函数,如下所示:
N = 10; % 假设N为10
min_val = Inf; % 初始化最小值为正无穷大
for i = 1:N
val = % 在循环中计算值,假设为val
if val < min_val % 如果当前值小于最小值
min_val = val; % 更新最小值
end
end
最终,min_val将包含从循环中得到的最小值。请注意,在循环之前,必须将min_val初始化为正无穷大,以确保第一个值成为最小值。
相关问题
Matlab中 用嵌套for循环解topsis法计算有两个属性六个方案的例题
假设有两个属性A和B,六个方案1-6,数据如下:
| | A | B |
|----|----|----|
| 1 | 0.6| 0.8|
| 2 | 0.7| 0.9|
| 3 | 0.8| 0.6|
| 4 | 0.4| 0.5|
| 5 | 0.3| 0.4|
| 6 | 0.5| 0.3|
步骤如下:
1. 标准化数据
计算每个方案的A、B属性的最大值和最小值,得到范围:
$A_{max}=0.8, A_{min}=0.3$
$B_{max}=0.9, B_{min}=0.3$
对于每个方案i,计算标准化后的值:
$A'_{i}=\dfrac{A_i-A_{min}}{A_{max}-A_{min}}$
$B'_{i}=\dfrac{B_i-B_{min}}{B_{max}-B_{min}}$
计算结果如下:
| | A | B | $A'$| $B'$|
|----|----|----|----:|----:|
| 1 | 0.6| 0.8| 0.67| 1.00|
| 2 | 0.7| 0.9| 0.83| 1.00|
| 3 | 0.8| 0.6| 1.00| 0.33|
| 4 | 0.4| 0.5| 0.00| 0.17|
| 5 | 0.3| 0.4| 0.00| 0.00|
| 6 | 0.5| 0.3| 0.33| 0.00|
2. 确定权重
假设A、B两个属性的权重分别为0.6和0.4
3. 计算加权后的矩阵
对于每个方案i,计算加权后的值:
$A''_{i}=w_A \times A'_i$
$B''_{i}=w_B \times B'_i$
$C_i=\sqrt{(A''_i)^2+(B''_i)^2}$
其中,$w_A=0.6, w_B=0.4$,$C_i$表示第i个方案的综合得分。
计算结果如下:
| | $A''$| $B''$| $C$ |
|----|-----:|-----:|-----: |
| 1 | 0.40| 0.40| 0.56 |
| 2 | 0.50| 0.40| 0.63 |
| 3 | 0.60| 0.13| 0.61 |
| 4 | 0.00| 0.07| 0.07 |
| 5 | 0.00| 0.00| 0.00 |
| 6 | 0.20| 0.00| 0.21 |
4. 确定最优解和次优解
找出综合得分最大的方案,即为最优解;找出综合得分第二大的方案,即为次优解。在此例中,最优解为2号方案,次优解为3号方案。
下面是Matlab代码实现:
```matlab
% 原始数据
data = [0.6 0.8; 0.7 0.9; 0.8 0.6; 0.4 0.5; 0.3 0.4; 0.5 0.3];
% 权重
w = [0.6; 0.4];
% 标准化数据
data_min = min(data);
data_max = max(data);
data_norm = (data-repmat(data_min,size(data,1),1))./(repmat(data_max,size(data,1),1)-repmat(data_min,size(data,1),1));
% 计算加权后的矩阵
data_weighted = data_norm .* repmat(w',size(data_norm,1),1);
data_score = sqrt(sum(data_weighted.^2,2));
% 输出结果
disp('标准化后的数据:');
disp(data_norm);
disp('加权后的数据:');
disp(data_weighted);
disp('综合得分:');
disp(data_score);
% 找出最优解和次优解
[sorted_score,rank] = sort(data_score,'descend');
disp(['最优解为第',num2str(rank(1)),'个方案,综合得分为',num2str(sorted_score(1))]);
disp(['次优解为第',num2str(rank(2)),'个方案,综合得分为',num2str(sorted_score(2))]);
```
输出结果如下:
```
标准化后的数据:
0.6667 1.0000
0.8333 1.0000
1.0000 0.3333
0 0.1667
0 0
0.3333 0
加权后的数据:
0.4000 0.4000
0.5000 0.4000
0.6000 0.1333
0 0.0667
0 0
0.2000 0
综合得分:
0.5623
0.6340
0.6083
0.0671
0
0.2132
最优解为第2个方案,综合得分为0.63402
次优解为第3个方案,综合得分为0.60832
```
用MATLAB写已知由直线两端点矩阵通过相互作差形成的角度差值slope_diff矩阵,现找出矩阵中的最小的数字,然后将最小值对应的直线给提出来归为一个类并将该值删除,再将剩余的直线进行筛选出最小值,然后将最小值对应的直线给提出来归为一个类并将该值删除,直到将所有的数值都分完类的代码
假设已知两端点坐标矩阵为 $p$,则可以通过以下步骤实现:
1. 计算斜率差值矩阵 $slope\_diff$:
```matlab
n = size(p, 1); % 点数
slope_diff = zeros(n, n); % 初始化斜率差值矩阵
for i = 1:n
for j = 1:n
if i ~= j
slope_diff(i, j) = (p(j, 2) - p(i, 2)) / (p(j, 1) - p(i, 1));
end
end
end
```
2. 依次处理每一个最小值对应的直线,直到所有数值都分完类:
```matlab
classes = cell(1, n); % 初始化类别数组
while any(slope_diff(:)) % 当斜率差值矩阵不全是0时循环
min_val = min(slope_diff(slope_diff ~= 0)); % 找到非零元素中的最小值
[i, j] = find(slope_diff == min_val, 1); % 找到最小值的位置
classes{i} = [classes{i}, j]; % 将直线放入类别i中
slope_diff(i, j) = 0; % 删除最小值
slope_diff(j, i) = 0;
end
```
最终,类别数组 `classes` 中的每一个元素就是一个类别,包含了对应的直线的索引。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)