在[0,100]之内把[0,60]分为不及格,[60,70]分为及格,[70,80]分为中,[80,90]分为良,[90,100]分为优. 分别采用五个高斯型隶属函数来表示,建 立一个模糊系统,使用matlab仿真,画出图像,写出完整代码
时间: 2024-09-24 07:11:46 浏览: 26
在MATLAB中建立一个基于五个高斯型隶属函数的模糊系统来划分分数等级,可以按照以下步骤操作:
1. 首先,我们需要定义五个高斯分布,每个分布在对应分数段上。高斯函数的一般形式是`gaussian(x, mu, sigma)`, 其中`x`是输入值,`mu`是均值,`sigma`是标准差。
```matlab
% 定义分数范围和对应的高斯分布参数
scores = [0, 60, 70, 80, 90, 100]; % 分数区间
grades = {'F', 'D', 'C', 'B', 'A'}; % 等级名称
mus = scores(2:end); % 均值等于分数分界点
sigmas = [15, 15, 15, 15, 15]; % 使用相同的宽度
% 初始化一个空的隶属度矩阵
membership = zeros(size(scores));
for i = 1:length(mus)
membership(i:i+1) = gaussian(scores(i:i+1), mus(i), sigmas(i)); % 计算每个分数的隶属度
end
```
2. 创建一个模糊系统,并设置输入、输出变量和规则集。在这个例子中,输入是分数,输出是等级。
```matlab
% 创建模糊系统结构体
fuzzy_system = fuzzyset('InputMembership', membership);
fuzzy_system.InputVariableNames = {'Score'};
fuzzy_system.OutputVariables = struct('Name', grades, 'Membership', ones(length(grades), length(scores)));
% 创建模糊规则
rules = "IF Score is F THEN Grade is F;
IF Score is D THEN Grade is D;
IF Score is C THEN Grade is C;
IF Score is B THEN Grade is B;
IF Score is A THEN Grade is A;";
fuzzy_system.Rules = rules;
% 设定模糊推理算法,这里使用Zadeh规则
fuzzy_system.Method = 'zadeh';
```
3. 最后,你可以创建一个模拟函数,让用户输入分数并返回模糊评价结果。
```matlab
function result = evaluate_score(score)
% 将用户输入映射到模糊系统的输入变量
score_membership = interp1(scores, membership, score, 'linear');
% 运行模糊推理得到等级
result = infer(fuzzy_system, score_membership);
end
```
4. 为了画出模糊系统图形,可以使用`viewMembership`函数展示输入变量的模糊集合,而结果可以用`plotmf`函数查看。
```matlab
figure;
viewMembership(fuzzy_system, 'Score');
figure;
plotmf(fuzzy_system, 'Grade');
```
完整的代码示例:
```matlab
scores = [0, 60, 70, 80, 90, 100];
grades = {'F', 'D', 'C', 'B', 'A'};
mus = scores(2:end);
sigmas = [15, 15, 15, 15, 15];
fuzzy_system = fuzzyset('InputMembership', [0; mus - sigmas; mus; mus + sigmas; 1]);
fuzzy_system.InputVariableNames = {'Score'};
fuzzy_system.OutputVariables = struct('Name', grades, 'Membership', ones(length(grades), length(scores)));
rules = "IF Score is F THEN Grade is F;
IF Score is D THEN Grade is D;
IF Score is C THEN Grade is C;
IF Score is B THEN Grade is B;
IF Score is A THEN Grade is A;";
fuzzy_system.Rules = rules;
evaluate_score = @(score) infer(fuzzy_system, interp1(scores, membership, score, 'linear'));
% 示例用户输入
score_to_test = 75;
result = evaluate_score(score_to_test);
fprintf("Score: %.0f, Grade: %s\n", score_to_test, grades{find(result == max(result))});
% 可视化
figure;
viewMembership(fuzzy_system, 'Score');
figure;
plotmf(fuzzy_system, 'Grade');
```