MATLAB函数调用

MATLAB函数调用数学建模matlab自定义函数时间2020年5月10日学习Matlab自定义函数使用,并结合所学函数简单修改了一下上周的代码实现了Topsis法。1.Matlab语句构成的程序文件称为M文件,以m作为文件的扩展名,分为函数文件和程序文件。程序文件即脚本文件,无function;函数文件有function,且在第一行或者第一个不是注释的行2.两个文件运行函数:函数定义文件和函数调用文件(函数可在脚本文件或命令窗口直接调用),两文件必须放在同一目录下,函数文件名必须与函数名相…

大家好,又见面了,我是你们的朋友全栈君。

数学建模 matlab自定义函数
时间 2020年5月10日

学习Matlab自定义函数使用,并结合所学函数简单修改了一下上周的代码实现了Topsis法。

1.Matlab语句构成的程序文件称为M文件,以m作为文件的扩展名,分为函数文件和程序文件。

程序文件即脚本文件,无function;

函数文件有function,且在第一行或者第一个不是注释的行

2.两个文件运行函数:函数定义文件和函数调用文件(函数可在脚本文件或命令窗口直接调用),两文件必须放在同一目录下,函数文件名必须与函数名相同。

1)一个参数:

定义形式:

 function y=f(x) 

          y=x^2; 

2)多个参数:

多元函数可以看做向量函数(四种形式实现同一题的运算)

函数定义形式(两个输入两个输出)

function  [y1,y2]=f1(x1,x2)

          y1=x1+x2;

          y2=x1-x2;

end

函数调用形式

[a,b]=f1(2,3)     

函数定义形式(将两个输入合成一个向量)

function  [y1,y2]=f1(x)

          y1=x(1)+x(2);

          y2=x(1)-x(2);

end

函数调用形式

[a,b]=f2([2,3])

函数定义形式(将两个输出合成一个向量)

function y=f3(x1,x2)

        y(1)=x1+x2;

        y(2)=x1-x2;

end

函数调用形式

c=f3(2,3)

函数定义形式(将两个输入合成一个向量,将两个输出合成一个向量)

function  y=f4(x)

        y(1)=x(1)+x(2);

        y(2)=x(1)-x(2);

end

函数调用形式

d=f4([2,3])

3)任意多个参数的情况:

a.参数

varargin任意多个输入参数

varargout任意多个输出参数

nargin得到实际输入参数个数

nargout得到实际输出参数个数

b.对于输入变量,MATLAB可以识别输入变量的个数,通过nargin来记录当前输入变量个数。通过nargin判断变量个数,然后再写对应的程序

c.对于输出变量,MATLAB可以根据调用情况来输出结果,根据调用的格式,自动忽略没匹配上的输出结果。

d.函数做好之后,需要写好说明,否则代码的通用性会很差。matlab自动将函数下的注释当作函数说明,通过help来查看帮助文档

4)写一个函数计算输入参数之和(输入参数可以是任意多个)

function y=ssum(varargin)

   n=nargin

   y=0;

   for i=1:n

   y=varargin{ 
   i}+y;

end

5)对于一组数据 x1,x2,…,xm, 分高优指标、低优指标、中优指标、均优指标,四种标准化方式对数据标准化。(学习代码并理解nargin的用法)

function [x] = standlize(v,type,q)

%STANDLIZE   对列向量v 进行归一化 返回归一化后的向量 x

%  x = STANDLIZE(v,'low') 对列向量按低优指标进行归一化

%  x = STANDLIZE(v,'high') 对列向量按高优指标进行归一化

%  x = STANDLIZE(v,'middle',q) 对列向量按中优指标进行归一化

%  x = STANDLIZE(v,'between',q) 其中 q = [a , b] 对列向量按均优指标进行归一化

m = length(v);

if nargin==2%两个输入参数,一个是向量V,另一个是指标类型

    if strcmp(type,'low') %低优指标

        %[strcmp](https://ww2.mathworks.cn/help/matlab/ref/strcmp.html)

        for i=1:m

            x(i) = (max(v)-v(i))/(max(v)-min(v));

        end

    elseif  strcmp(type,'high') %高优指标

        for i=1:m

            x(i) = (v(i)-min(v))/(max(v)-min(v));

          end

    end

elseif nargin==3

        %输入变量有三个,第一个是向量V、第二个是指标类型、第三个是q;

        %若为中优指标,q用于存放中间值;

        %若为均优指标(即我们所学的区间型指标),q用于存放均优指标的区间( q = [a , b] )。

        %因此可结合q的长度来区分中优指标和均优指标。

    if strcmp(type,'middle')&&length(q)==1 %中优指标

        for i=1:m

             if v(i) < q

                x(i) = 1 - (q-v(i))/max([q-min(v),max(v)-q]);

            elseif  v(i) > q

                    x(i)=1- (v(i)-q)/max([q-min(v),max(v)-q]);                

else

                x(i) = 1;

            end

        end

    elseif strcmp(type,'between')&&length(q)==2 %均优指标

        for i=1:m

            if v(i) < q(1)

                x(i) = 1-(q(1)-v(i))/(max([q(1)-min(v),max(v)-q(2)]));

            elseif v(i) > q(2)

                x(i) = 1-(v(i)-q(2))/(max([q(1)-min(v),max(v)-q(2)]));

            else

                x(i)=1;

            end

        end

    end

end

x = reshape(x,size(v));

        %访问链接查看[reshape](https://blog.csdn.net/weixin_33805557/article/details/94506302)

        
end  

简单了解matlab的绘图函数(条形图)

% clear all;

data=S;%代入数据

b=bar(data,'BarWidth',0.6);%可以直接设置条形图的宽度

grid on;

        %grid是显示或隐藏坐标轴网格线,grid on是打开网格,grid off是关闭网格。

set(gca,'XTick',1:25,'XTickLabel',{ 
   'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'})%设置横坐标数值

for i = 1:25

text(i,S(i)+0.1,num2str(data(i)),'VerticalAlignment','middle','HorizontalAlignment','center','FontSize',12);%为条形图添加数标

end

set(gca,'FontSize',9);%设置字体大小

xlabel('评价对象/河流');%横坐标标签

ylabel('评分');%纵坐标标签

axis([0 26 0 0.1]);%设置坐标轴显示范围

        %axis一般用来设置axes的样式,包括坐标轴范围,可来读比例等,

         %这儿用来设置坐标轴的范围,axis([xmin xmax ymin ymax])
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160819.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言中volatilekeyword的作用

    C语言中volatilekeyword的作用

    2021年12月2日
    48
  • js在数组添加数据[通俗易懂]

    js在数组添加数据[通俗易懂]在数组最前面添加元素arr.unshift()在数组后面添加元素arr.push()vararr=[1,2,3]arr.unshift(1)console.log(arr)//1,1,2,3——————————–vararr=[1,2,3]arr.push(1)console.log(arr)//1,2,3,1

    2022年4月28日
    91
  • ffplay文档[通俗易懂]

    ffplay文档[通俗易懂]目录目录1简介2描述3选项3.1流说明符3.2通用选项3.3AVOptions3.4主要选择3.5高级选项3.6比赛时4另见5位作者 1简介ffplay[ 选项 ][input_url]2描述FFplay是一个使用FFmpeg库和SDL库的非常简单和便携的媒体播放器。它主要用作各种FFmpegAPI的测试平台。…

    2022年6月17日
    48
  • php7 一句话木马,一句话木马的套路

    php7 一句话木马,一句话木马的套路原标题 一句话木马的套路 0 01 前言尽最大努力在一文中让大家掌握一些有用的 WEBSHELL 免杀技巧 0 02 关于 eval 于 assert 关于 eval 函数在 php 给出的官方说明是 eval 是一个语言构造器而不是一个函数 不能被可变函数调用可变函数 通过一个变量 获取其对应的变量值 然后通过给该值增加一个括号 让系统认为该值是一个函数 从而当做函数来执行通俗的说比如你这样是

    2025年10月28日
    4
  • Flutter jsonEncode 和 jsonDecode「建议收藏」

    Flutter jsonEncode 和 jsonDecode「建议收藏」json_decode()—-json转对象/数组通常网路请求后的数据用此方法转为我们需要的定义的对象当第二个参数为true返回array,默认是false返回object。json_encode()—-对象/数组转json成功返回json编码的string,失败返回false。…

    2022年7月17日
    86
  • 通配符掩码的应用 ACL 访问控制列表

    通配符掩码的应用 ACL 访问控制列表ACL(AccessControlList)访问控制列表在作为数据包的过滤器以及在对指定的某种类型的数据包的优先级,起到了对某些数据包的优先级起到了限制流量的作用,减少了网络的拥塞。通配符掩码作为ACL中重要的一部分,是路由器在进行访问控制时必不可少的重要部件,那么什么是通配符掩码呢?通配符掩码:路由器使用通配符掩码与原地址或者是目标地址一起来分辨匹配的地址范围,在访问控制列表中,将通…

    2022年7月19日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号